在自定义分类模板中的 WP_Query 期间查询(2)ACF 发布对象

Posted

技术标签:

【中文标题】在自定义分类模板中的 WP_Query 期间查询(2)ACF 发布对象【英文标题】:Query (2) ACF post objects during WP_Query in custom taxonomy template 【发布时间】:2019-02-18 18:43:15 【问题描述】:

为自定义分类和相关的自定义帖子类型构建 Wordpress 页面模板。在新的 WP_Query 中,我需要从 (2) 不同的 ACF 帖子对象字段中获取字段;名单员工和名单代表。代码按预期工作,直到 wp_reset_postdata();返回正确数量的结果,每个帖子中的数据在重置之前都是唯一的。重置后,每个帖子中的所有数据都相同。代码如下,我确信有一个更优雅的解决方案:

<?php 
$args = array( 
'orderby' => 'title',
'order'   => 'ASC',
'post_type' => 'parade-of-homes',
'parade-category'   => 'parade-homes',
'posts_per_page'    => -1,
'meta_key'          => 'entry_number',
'orderby'           => 'meta_value',
'order'             => 'ASC'           
);
$listing = new WP_Query( $args );
if ( $listing->have_posts() ) :
    while ( $listing->have_posts() ) : $listing->the_post();
?>
<?php the_field('list_number'); ?>
<?php
$staff = get_field('list_staff');
$rep = get_field('list_rep');
if( $staff ): 
    // override $post
    global $post;
    $post = $staff;
    setup_postdata( $post ); 
    ?>
    <?php the_permalink(); ?><?php the_title(); ?>
    <?php 
    endif;
    if( $rep ): 
        // override $post
        $post = $rep;
        setup_postdata( $rep ); 
    ?>
    <?php the_field('mkt_co'); ?><?php the_field('mkt_tel'); ?>
    <?php
    endif;
    wp_reset_postdata();
    ?>
    <?php the_field('list_address') ?>
    <?php 
        endwhile; 
    endif;
wp_reset_query(); 
?>         

【问题讨论】:

【参考方案1】:

想出了这个。 setup_postdata() 对于这个应用程序来说是一个完全错误的方向。 ACF 页面上记录了“显示多个帖子对象的数据”的正确内容。正如文章所述“使用此方法,$post 对象永远不会更改,因此所有函数都需要相关帖子 ID 的第二个参数。”在此处阅读更多信息; https://www.advancedcustomfields.com/resources/post-object/。我的工作代码如下:

<?php 
    $args = array( 
    'orderby' => 'title',
    'order'   => 'ASC',
    'post_type' => 'parade-of-homes',
    'parade-category'   => 'parade-homes',
    'posts_per_page'    => -1,
    'meta_key'          => 'entry_number',
    'orderby'           => 'meta_value',
    'order'             => 'ASC'           
    );
    $listing = new WP_Query( $args );
    if ( $listing->have_posts() ) :
        while ( $listing->have_posts() ) : $listing->the_post();
?>
        <?php 
             the_field('list_number');
             $post_object = get_field('list_staff');
             if( $post_object ):
        ?>
             <a href="<?php echo get_permalink($post_object->ID); ?>">
             <?php echo get_the_title($post_object->ID); ?>
         <?php 
             endif; 
         ?>

         <?php 
             $post_object = get_field('list_rep');
             if( $post_object ):
         ?>
             <p><?php the_field('mkt_co', $post_object->ID); ?></span></p>
             <a href="tel:<?php the_field('mkt_tel', $post_object->ID); ?>"><?php the_field('mkt_tel', $post_object->ID); ?></a>
         <?php 
             endif; 
         ?>                    
         <?php the_field('list_address') ?>
     <?php 
         endwhile; 
    endif;
    wp_reset_query(); 
?> 

【讨论】:

以上是关于在自定义分类模板中的 WP_Query 期间查询(2)ACF 发布对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 WP_Query Ajax 上实现分页

在自定义分类模板中获取自定义字段

php 查询WP_QUERY中的高级自定义字段

Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类

php 基本WP_Query模板,用于显示每个类别的自定义帖子选择

从 WP_Query 中排除特定条款