为自定义分类法和相关的自定义帖子类型构建Wordpress页面模板。在新的WP_Query中, 我需要从(2)个不同的ACF发布对象字段中获取字段; list-staff和list-rep。直到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对象永远不会更改, 因此所有函数都需要有问题的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();
?>
来源:
https://www.srcmini02.com/65726.html