• Resolved ba2018

    (@ba2018)


    Ich würde gerne mit dem Shortcode [dc-hide-content] [/dc-hide-content] in WordPress einen Loop umschließen.

    [[Kurze Erklärung:
    Wir haben das Plugin Woocommerce genutzt, um eine Übersicht aller Impfstoffe einzustellen, die DocCheck geschützt sind. Das hat soweit funktioniert, obwohl das Plugin eigentlich nicht mit DocCheck arbeiten möchte. Allerdings nur, wenn man die Impfstoffe direkt über die Seiten aufruft. Sobald man über Google auf einen Impfstoff kommt, ist er frei zugänglich. Die einzelnen Produktseiten werden wohl nicht als Zugehörig zu den geschützten Seiten erkannt. ]]

    Nun wollte ich über die Template-Seite den entsprechenden Loop, der die Produkte aufruft, einfach mit dem Shortcode umschließen. Mit der Funktion <?php echo do_shortcode („[dc-hide-content]“); ?> könnte das funktionieren (Shortcodes werden so erkannt, das Login-Feld konnte ich einbinden).

    Aber hier erkennt das Template den abschließenden Shortcode <?php echo do_shortcode („[/dc-hide-content]“);?> nicht. Der wird als Text einfach unten auf der Seite ausgegeben.

    The page I need help with: [log in to see the link]

Viewing 1 replies (of 1 total)
  • Hallo ba2018,

    Entschuldige die späte Antwort, wahrscheinlich hat sich die Frage mittlerweile erledigt. In der WordPress Dokumentation – sehr weit unten – ist ein recht gutes Beispiel, wie do_shortcode verwendet werden kann um Inhalte einzuspeisen.

    https://developer.ww.wp.xz.cn/reference/functions/do_shortcode/

    echo do_shortcode( '[iscorrect]' . $text_to_be_wrapped_in_shortcode . '[/iscorrect]' );

    Hier mal ein Beispiel anhand der index.php im Theme twentyseventeen, wie man das mit der Loop in WordPress verbinden könnte:

    <?php 
    
    			//  Turn on output buffering
    			ob_start();
    			
    			// Do your loop
    			if ( have_posts() ) :
    				while ( have_posts() ) :
    					the_post();
    
    					get_template_part( 'template-parts/post/content', get_post_format() );
    				endwhile;
    
    				the_posts_pagination(
    					array(
    						'prev_text'          => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
    						'next_text'          => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
    						'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
    					)
    				);
    
    			else :
    
    				get_template_part( 'template-parts/post/content', 'none' );
    
    			endif;
    
    			// Get current buffer contents and delete current output buffer
    			$hidden_content = ob_get_clean();
    
    			// Display content wrapped in doccheck shortcode
    			echo do_shortcode('[dc-hide-content]' . $hidden_content . '[/dc-hide-content]'); 
    
    			?>

    Für den Fall, dass kein User eingeloggt ist würde beim Shortcode ein leerer string zurückgegeben werden. Falls man dann einen anderen Text angezeigt haben möchte müsste man das noch zusätzlich abfangen.

    Optimal wäre natürlich, wenn wir unsererseits eine Methode implementieren, über die im Theme per if/else abgefragt werden kann ob ein DocCheck User eingeloggt ist, sodass das alles etwas einfacher geht. Wir notieren uns das!

    antwerpes

Viewing 1 replies (of 1 total)

The topic ‘dc-hide-content in php’ is closed to new replies.