it-swarm.com.de

Post-Inhalt kann nicht aus der benutzerdefinierten Post-Typ-Schleife abgerufen werden

Aus irgendeinem Grund kann ich den benutzerdefinierten Inhalt des Beitragstyps nicht mit dem folgenden Code ausgeben. was vermisse ich hier Es funktioniert gut für get_the_title, aber die Verwendung von get_the_content mit denselben Parametern ergibt nichts.

<?php
            $query = new WP_Query( ['post_type' => 'testimonials', 'posts_per_page' => -1 ] );
            foreach($query->get_posts() as $testimonial):
            $meta = get_post_meta($testimonial->ID);
            foreach($meta as &$m){
                if(is_array($m)){
                    $m = $m[0];
                }
            } ?>

            <div class="content"><?=get_the_content($testimonial->ID); ?></div>
            <div class="author">- <?=get_the_title($testimonial->ID); ?> / <span class="company_name"><?=$meta['_testimonial_company_name'] ?></span></div>
            <div class="link"><a href="<?=home_url('/testimonials'); ?>" title="View All Testimonials">View More</a></div>
            <?php endforeach; ?>
3
Zach Smith

Wie in anderen Antworten bereits erwähnt, befinden Sie sich nicht in der Schleife, sodass get_the_*()-Funktionen nicht ordnungsgemäß funktionieren. Da Sie eine Schleife über $query->get_posts() ausführen, können Sie einfach das Objekt WP_Post verwenden.

So etwas wird funktionieren.

foreach($query->get_posts() as $testimonial):
    $meta = get_post_meta($testimonial->ID);
    foreach($meta as &$m){
            if(is_array($m)){
                $m = $m[0];
            }
        }

    <div class="content"><?= do_shortcode($testimonial->post_content); ?></div>
    <div class="author">- <?=$testimonial->post_title; ?> / <span class="company_name"><?=$meta['_testimonial_company_name'] ?></span></div>
    <div class="link"><a href="<?=home_url('/testimonials'); ?>" title="View All Testimonials">View More</a></div>            

<?php endforeach;?>

Abhängig von Ihrer spezifischen Situation möchten Sie möglicherweise auch den Inhalt wpautop(). Z.B. do_shortcode(wpautop($testimonial->post_content))

Wenn Sie eine sekundäre Schleife einrichten möchten, können Sie; Sie sollten jedoch NICHT setup_postdata() verwenden, es sei denn, Sie sind sicher, dass Sie nicht in einer verschachtelten Schleife arbeiten, da dadurch das globale Post-Objekt geändert wird.

0
TheGentleman

get_the_content() muss innerhalb einer Schleife verwendet werden, und Sie müssen die Daten des Posts einrichten.

Sie sollten zuerst setup_postdata( $post ); verwenden, und dann können Sie get_the_content() verwenden.

Ich sehe hier jedoch ein paar Probleme:

  • Zunächst können Sie eine Schleife anstelle von foreach verwenden.
  • Sie sollten niemals kurze PHP Tags verwenden. Ich bin überrascht, wie Ihr Code überhaupt ausgeführt wird.
  • Es ist besser, die Abfrageparameter zur besseren Lesbarkeit in einem Array zu speichern und an WP_Query(); zu übergeben.
  • Verwenden Sie the_content() anstelle von get_the_content(), um sicherzustellen, dass auch die Filter angewendet werden.

Hier ist eine optimierte Version Ihres Codes:

<?php
$args = array( 
    'post_type' => 'testimonials', 
    'posts_per_page' => 100
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        $company_name = get_post_meta( get_the_ID(), '_testimonial_company_name', true );
        ?>
        <div class="content"><?php the_content(); ?></div>
        <div class="author">- <?php the_title(); ?> / <span class="company_name"><?php echo $company_name; ?></span></div>
        <div class="link"><a href="<?php echo home_url( '/testimonials' ); ?>" title="View All Testimonials">View More</a></div><?php
    }
}
?>
0
Jack Johansson