get_the_content funktioniert nicht innerhalb des Shortcodes

Lesezeit: 3 Minuten

Benutzer-Avatar
NJC86

Ich habe ein Problem mit einem Shortcode, den ich für WordPress schreibe. Ich versuche, die zu verwenden get_the_content() Funktion, aber anstatt den Inhalt des von mir erstellten benutzerdefinierten Beitragstyps abzurufen, wird der Inhalt der Seite abgerufen, auf der sich der Shortcode befindet. Alle anderen Funktionen funktionieren einwandfrei, z get_the_title() und Get_the_post_thumbnail(). Ich übergebe die ID in den Funktionen und es funktioniert großartig für alles andere, nur nicht get_the_content.

get_the_content($testimonial_item->ID);

Der Shortcode enthält Paginierung und andere Elemente, die alle korrekt funktionieren. Es ist nur diese eine Funktion, die mir Kummer bereitet. Der vollständige Code ist unten, jede Hilfe wäre sehr willkommen.

function ncweb_display_testimonial_items($atts, $content = null) {

extract( shortcode_atts( array(
    'per_page' => 6
), $atts ) );

/* pagination parameters */

// check what page we are on
if ( isset ($_GET['testimonial-page'] ) ) $page = $_GET['testimonial-page']; else $page = 1;

// default number of pages
$total_pages = 1;

// portfolio offset. Used in the get_posts() query to show only portfolio for the current page
$offset = $per_page * ($page-1);

// setup the portfolio args for retrieving the total number of portfolio items
$testimonial_count_args = array(
    'post_type' => 'ncweb-testimonials',
    'posts_per_page' => -1
);
$testimonial_count = count(get_posts($testimonial_count_args));

// calculate the total number of pages
$total_pages = ceil($testimonial_count/$per_page);

/* end pagination parameters */

// main image query
$testimonial_args = array(
    'post_type' => 'ncweb-testimonials',
    'numberposts' => $per_page,
    'offset' => $offset
);

$testimonial_items = get_posts($testimonial_args);

// start our output buffer
ob_start();

if($testimonial_items) :

    /*** main portfolio loop ***/

        $counter = 1;
        echo '<div class="testimonial-items" id="testimonial-items">';

        foreach($testimonial_items as $testimonial_item) :

        $testimonial_company = get_post_meta($testimonial_item->ID, 'ncweb_testimonial_company', true);
        $testimonial_client = get_post_meta($testimonial_item->ID, 'ncweb_testimonial_client_name', true);

        echo '<aside class="testimonial-list-item row">';
        echo '<div class="col-xs-12 testimonial-list-item-info">';
        echo '<div class="testimonial-image">'. get_the_post_thumbnail($testimonial_item->ID) .'</div>';
        echo '<div class="testimonial-client"><span class="testimonial-client-name">'. $testimonial_client .'</span><br/><span class="testimonial-company">'. $testimonial_company .'</span></div>';
        echo '</div>'; //end of testimonial-list-item-info
        echo '<div class="col-xs-12 testimonial-item-content">'. get_the_content($testimonial_item->ID); .'</div>';
        echo '</aside>';

        $counter++;

        endforeach;
        echo '</div>';

        /*** display pagination ***/

        // pagination base
        echo '<div id="testimonial-pagination">';

            $base = get_permalink(get_the_ID()) . '%_%';

            echo paginate_links( array(
                'base' => $base,
                'format' => '?testimonial-page=%#%',
                'prev_text' => __('Previous', 'ncweb'),
                'next_text' => __('Next', 'ncweb'),
                'total' => $total_pages,
                'current' => $page,
                'end_size' => 1,
                'mid_size' => 5
            ));

        echo '</div>';

    /*** end pagination display ***/


else :
    echo '<p>' . __('No testimonial items found.', 'ncweb') . '</p>';
endif; // end if($images)

return ob_get_clean();

}
add_shortcode( 'testimonial-items', 'ncweb_display_testimonial_items' );

Benutzer-Avatar
Oh Gott warum

Dies liegt daran, dass die get_the_content() Funktion ist ein Wrapper und seine einzigen Argumente sind die Read More Text und die stripteaser Streit.

Was Sie eigentlich wollen, ist.

$post= get_post($testimonial_item->ID);
$testimonial_items = $post->content ;
$testimonial_items = apply_filters('the_content', $testimonial_items);

Dann haben Sie, was Sie suchen.

  • Dieser Code ist korrekt, aber anstelle von $content sollten Sie $testimonial_items als zweiten Parameter von apply_filters() übergeben.

    – nein, muss sein

    24. November 2020 um 17:21 Uhr

  • es sollte $post->post_content sein, nicht $post->content

    – Kender

    18. Februar um 16:34 Uhr

Sie können diesen Code ausprobieren, um die perfekte Ausgabe zu erhalten, wenn Sie Shortcode in Inhalten verwenden.

<?php 
  ob_start();
  the_content();
  $content_output = ob_get_clean();
  echo $content_output;
?>

Der sauberste Weg, the_content mit einem Shortcode auszugeben, ist dieser:

function my_sc_content() {
    ob_start();
        $my_content = the_content();
        echo $my_content;
        $output_string = ob_get_contents();
    ob_end_clean();
    return $output_string;
}

add_shortcode('my-content','my_sc_content');

1312380cookie-checkget_the_content funktioniert nicht innerhalb des Shortcodes

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy