在一个数组中合并多个ACF变量

时间:2018-08-27 18:17:17

标签: arrays wordpress variables advanced-custom-fields

我正在使用ACF关系字段。我正在显示多个手动选择的帖子块。在最后一个帖子块中,我要排除之前所有手动选择的帖子。

如何对所有ACF进行排列以选择它们以将其从循环中排除?

到目前为止,这是我的代码(无法正常工作,如果我仅使用一个变量,则可以正常工作)

<?php   
$excluir = get_field('bloque_6_posts');
$excluir2 = get_field('bloque_2_posts');
$excluir3 = get_field('post_destacado');
$excluir4 = get_field('posts_destacados');
$excluir5 = get_field('bloque_4_posts');
$excluirtodo = array (
  $excluir,
  $excluir2,
  $excluir3,
  $excluir4,
  $excluir5
);
$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$args = array(
  'posts_per_page' => 9,
  'paged'          => $paged,
  'post__not_in' => $excluirtodo
);

$the_query = new WP_Query( $args ); 
?>

编辑[已解决]:如@disinfor指出,解决方案是array_merge而不是array

2 个答案:

答案 0 :(得分:1)

在评论中添加我的答案,以帮助将来的访问者

您当前正在将数组数组传递给post__not_in。您需要使用array_merge将数组合并为一个数组。

<?php   
$excluir = get_field('bloque_6_posts');
$excluir2 = get_field('bloque_2_posts');
$excluir3 = get_field('post_destacado');
$excluir4 = get_field('posts_destacados');
$excluir5 = get_field('bloque_4_posts');

// NEW CODE HERE
$excluirtodo = array_merge(
  $excluir,
  $excluir2,
  $excluir3,
  $excluir4,
  $excluir5
);
// END ARRAY_MERGE
$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$args = array(
  'posts_per_page' => 9,
  'paged'          => $paged,
  'post__not_in' => $excluirtodo
);

$the_query = new WP_Query( $args ); 
?>

答案 1 :(得分:0)

在我看来,调用5个ACF字段然后在构建页面时将它们组合成数组的方法不好。
对我来说,这种方法更好:
1.创建一个文本AСF字段-hide_excluir
2.在functions.php中添加过滤器(编辑我们的页面时,所有带有例外的ACF字段都将合并到一个数组中,并保存在我们之前创建的字段中。)

add_filter('acf/save_post', 'excluir_post_filter', 20);
function excluir_post_filter($post_id) {

    if ( $post_id != 2 ) //Change to your page ID (or if you need use post type or page template, need modify)
        return;

    $excluir = get_field('bloque_6_posts');
    $excluir2 = get_field('bloque_2_posts');
    $excluir3 = get_field('post_destacado');
    $excluir4 = get_field('posts_destacados');
    $excluir5 = get_field('bloque_4_posts');

    $all_excluir = array_merge(
        $excluir,
        $excluir2,
        $excluir3,
        $excluir4,
        $excluir5
    );

    update_post_meta($post_id, 'hide_excluir', $all_excluir ); //Save array to our field

}

3。我们将字段与get_post_meta一起使用

$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$args = array(
  'posts_per_page' => 9,
  'paged'          => $paged,
  'post__not_in' => get_post_meta( $post->ID, 'hide_excluir', true ) //Get our field with post array
);

$the_query = new WP_Query( $args );

对于测试方法,您可以安装Query Monitor插件并查看对数据库的查询数量的差异。