我正在使用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
答案 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插件并查看对数据库的查询数量的差异。