通过变量提供时,Wordpress Post__not_in无法正常工作

时间:2018-10-31 06:38:38

标签: php wordpress

我创建了一个函数,并将逗号分隔的值动态传递给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'而不是变量,我得到了结果,请您帮忙?

3 个答案:

答案 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"
}