如果自定义字段包含页面ID,则Wordpress:迭代父页面

时间:2018-10-03 16:43:34

标签: wordpress loops advanced-custom-fields

我正在尝试显示基于页面的列表。该列表基于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似乎是一种很好的迭代方法,只是在修改需要满足的问题时就可以使用。

感谢您的帮助!

1 个答案:

答案 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;