我正在尝试显示基于页面的列表。该列表基于ACF自定义字段中的数据构建,该字段位于序列化数组中。
该列表适用于部门中的员工。我正在Wordpress中设置父页面,但希望在所有子页面上列出员工。可能还需要在多个部门中列出员工,因此ACF字段存储为序列化数组。
如果当前页面在数组中,我已经能够使它工作,但是当数据用于父页面,祖父母页面等时出现问题。我该如何迭代查找符合条件的第一个父页面?
相关代码(显示其他内容,其中一些内容可能对您的回答有所帮助):
$postid = get_the_ID();
$staffList = get_posts(array(
'post_type' => 'staff',
'meta_key' => 'position_order',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ministries', // name of custom field
'value' => $postid,
'compare' => 'LIKE',
),
array(
'key' => 'administration', // name of custom field
'value' => $postid,
'compare' => 'LIKE',
)
)
));
if(( $staffList ) != '') {
foreach ( $staffList as $staff ) : setup_postdata( $people );
$pid = $staff->ID;
$featured_img_url = get_the_post_thumbnail_url($pid, 'full');
$highres = get_field('high_res', $pid);
$normal = get_field('normal', $pid);
$biofile = get_field('bio_file', $pid);
$scontent = $staff->post_content;
$contact = apply_filters('the_content',$scontent);
?>
<div class="profile">
<div class="text-center">
<img src="<?php echo $featured_img_url; ?>" width="130"
alt="<?php echo $staff->post_title; ?>">
</div>
<div class="profile__name"><?php echo $staff->post_title; ?></div>
<?php echo $contact; ?>
<?php if ( $biofile != "" ) { ?>
<a href="<?php echo $biofile; ?>" class="btn" target="_blank"><span class="icon-file"></span> <?php echo $people->post_title; ?> Bio</a>
<?php } ?>
</div>
<?php
endforeach;
wp_reset_postdata();
?>
<?php } endif; ?>
我认为该查询需要放置在一个函数中,但是在使其正确运行并随后遍历父帖子直到找到结果时遇到问题。这个概念是:
如果当前$ pageid没有雇员,则获取$ parent_pageid并运行查询。如果没有找到雇员,请找到grandparent_pageid并运行查询等,直到找到雇员或没有更多父页面为止。
我发现了这一点:Recursive function to get the parent caegory description似乎是一种很好的迭代方法,只是在修改需要满足的问题时就可以使用。
感谢您的帮助!
答案 0 :(得分:0)
此函数将遍历父帖子,直到返回结果:
function get_staff_posts($post) {
$staffList = new WP_Query( array(
'post_type' => 'staff',
'meta_key' => 'position_order',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ministries', // name of custom field
'value' => $post->ID,
'compare' => 'LIKE',
),
array(
'key' => 'administration', // name of custom field
'value' => $post->ID,
'compare' => 'LIKE',
),
),
));
$parent = $post->post_parent;
if( !$staffList->have_posts() && $parent != 0 )
get_staff_posts($parent);
return $staffList;
}
该函数将返回查询,因此您可以像这样在主题中使用它:
$staffList = get_staff_posts($post);
if( $staffList->have_posts() ):
while( $staffList->have_posts() ): $staffList->the_post();
// output
endwhile; wp_reset_postdata();
endif;