我创建了一个函数,并将逗号分隔的值动态传递给wp_args。当我回显变量时,我得到的准确无误,并传递了统计结果,但传递变量名称时,却没有得到结果。
$excludepages1 = "12,14";
$excludepages2 = "'".implode("','", explode(",", $excludepages1))."'";
$excludepages = str_replace('"', '', $excludepages2);
现在,如果我回声$excludepages
,我得到'12','14'
但是当我通过这里
$children = get_posts( array(
'post_type' =>'page',
'posts_per_page' =>-1,
'post_parent' => $post_id,
'orderby' => 'menu_order',
'order' => 'ASC',
'post__not_in' => array($excludepages)));
我没有得到任何结果,并且如果我通过变量'12','14'
而不是变量,我得到了结果,请您帮忙?
答案 0 :(得分:1)
参考:https://developer.wordpress.org/reference/functions/get_posts/
$excludepages1 = "12,14";
$excludepages = explode(",", $excludepages1);
爆炸数组可以直接使用。
在文档中建议“排除”参数。因此,我使用的不是“ post__not_in”。
$children = get_posts( array(
'post_type' =>'page',
'posts_per_page' =>-1,
'post_parent' => $post_id,
'orderby' => 'menu_order',
'order' => 'ASC',
'exclude' => $excludepages)
);
答案 1 :(得分:1)
按照您的方式进行操作,将创建索引为0且值为“ 12,14”的数组。您正在执行的操作是将字符串“ 12、14”传递给数组的第一个索引。您要做的是将两个整数传递给数组。因此,如果您按自己的方式打印array($ excludepages),将会看到
Array
(
[0] => 12,14
)
你想要的是
Array
(
[0] => 12
[1] => 14,
)
我不确定您要如何处理爆破,爆炸和str_replace,但您将希望使用以下方法定义数组:
$excludepages = array(12, 14); // Notice, no quotes in the array declaration.
或
$excludepages = array();
$excludepages[] = 12;
$excludepages[] = 14;
然后在get_posts中看起来像这样:
$children = get_posts( array(
'post_type' =>'page',
'posts_per_page' =>-1,
'post_parent' => $post_id,
'orderby' => 'menu_order',
'order' => 'ASC',
'post__not_in' => $excludepages) );
答案 2 :(得分:1)
问题与post__not_in
参数无关。它需要数组,而不是逗号分隔的字符串:
'post__not_in' (数组)不检索的帖子ID的数组。注意:一串用逗号分隔的ID无效。
更多详细信息:https://developer.wordpress.org/reference/classes/wp_query/parse_query/
您的$excludepages
返回string(9) "'12','14'"
。
您应该像这样更新它:
$excludepages1 = "12,14";
$excludepages = explode(",", $excludepages1);
$children = get_posts( array(
'post_type' =>'page',
'posts_per_page' =>-1,
'post_parent' => $post_id,
'orderby' => 'menu_order',
'order' => 'ASC',
'post__not_in' => $excludepages)
);
在上面的代码中,$excludepages
将返回:
array(2) {
[0]=> string(2) "12"
[1]=> string(2) "14"
}