在自定义帖子类型中使用ACF复选框字段来过滤其他自定义帖子类型的结果

时间:2019-07-03 20:26:54

标签: php wordpress advanced-custom-fields

我有一个正在循环浏览的页面(自定义帖子类型1)。嵌套在(自定义帖子类型1)内部,我有另一个循环(自定义帖子类型2)。我们的目标是要在“自定义帖子类型1”中选中“ ACF复选框”,以便根据(“自定义帖子类型1”)签入内容过滤“(自定义帖子类型2)”的结果。

我是StackOverflow和Wordpress开发的新手。但是我可以像上面描述的那样工作,但还是要回退。您必须具有(自定义帖子类型2)中可用的复选框,才能使$ meta_query工作。完全有道理,为什么在阅读文档后以及如何进行此设置。

我将如何做到这一点(自定义帖子类型2)不需要复选框(基于自定义帖子类型1)已选中的复选框进行过滤?

<?php
// Custom Post Type 1
$args1 = array(
    'post_type' => 'custom_post_type_1',
    'posts_per_page' => -1,
);
$custom_post_type_1 = get_posts( $args1 );

foreach( $custom_post_type_1 as $post ) : setup_postdata( $post );
    // Do things

    // Get the selected options from custom post type 1 and throw them into an array                         
    $my_acf_checkbox = get_field('checkbox', $post->ID);
    $meta_query = array('relation' => 'OR');
    foreach( $my_acf_checkbox as $item ){
        $meta_query[] = array(
        'key' => 'checkbox',
        'value' => $item,
        'compare' => 'LIKE',
    );
    }

    // Custom Post Type 2 (Nested)
    $args2 = array(                                      
        'post_type' => 'custom_post_type_2',                                         
        'posts_per_page' => -1,
        'meta_query' => $meta_query
    );                                   
    $custom_post_type_2 = get_posts( $args2 );

    foreach( $custom_post_type_2 as $post ) : setup_postdata( $post );
        // Do things                                     
        wp_reset_postdata();                                     
    endforeach;

    wp_reset_postdata();
endforeach;                             
?>

1 个答案:

答案 0 :(得分:0)

我很好奇您为什么使用复选框ACF字段?返回的值是多少?帖子ID,子弹?我通常会使用Post Object字段并返回ID,因此它比将值硬编码到复选框字段中更具动态性。

我假设您在下面的解决方案的复选框中返回了post_id。

我可以看到您使用meta_query尝试执行的操作,但是如果您有ID,则可以在$ args2中使用post__in进行第二个循环,而不是这样:

int position = getTargetPosition(recycler);
recycler.scrollToPosition(position);

只需将您的ID自己推入数组,就像这样:

$my_acf_checkbox = get_field('checkbox', $post->ID);
$meta_query = array('relation' => 'OR');
    foreach( $my_acf_checkbox as $item ){
    $meta_query[] = array(
        'key' => 'checkbox',
        'value' => $item,
        'compare' => 'LIKE',
    );
}

然后在$ args2中的post__中使用新数组:

foreach( $my_acf_checkbox as $item ){
    $cpt2s[] = $item;
}

让我知道这是否可以为您提供解决方案,或者有什么不合理的地方。