快捷码属性-数组中的POST__NOT_

时间:2019-07-27 作者:Waterbarry

我正在尝试组合一个短代码,让用户循环帖子,但按id排除特定帖子。

 $atts = array_change_key_case((array)$atts, CASE_LOWER);

    // override default attributes with user attributes
    $custom_atts = shortcode_atts([
                                     \'link\' => \'off\',
                                     \'hide\' => \'\',
                                     \'only\' => \'\',
                                     \'reverse\' => \'\',
                                 ], $atts, $tag);

    $args = array(
        \'cat\' => 113,
        \'post_type\' => \'page\',
        \'posts_per_page\' => \'-1\',
        \'order\' => \'ASC\',
        \'post_parent\'     => $current_id,
            \'post__not_in\'    => array($custom_atts[\'hide\'])

    );


    $the_query = new WP_Query( $args );
然后,短代码如下所示:

[customposts hide="7043,7128"]
但不管出于什么原因,它只是隐藏属性中列出的第一篇帖子。

有什么想法吗?

1 个回复
SO网友:birgire

本部分:

\'post__not_in\' => array($custom_atts[\'hide\'])
您正在实际运行:

\'post__not_in\' => array( "7043,7128" )
使用[customposts hide="7043,7128"].

请注意post__not_in 应为数字数组,而不是包含单个CSV元素的数组。

看一看,例如。wp_parse_id_list() 不要忘记验证输入,例如,避免空输入或非整数输入。

附:这可能会消耗大量帖子的资源:

\'posts_per_page\' => \'-1\'
考虑在此处添加限制。

相关推荐

Do not parse shortcode in CPT

我有一个CPT,我不想在它的内容中解析shortcode(使用\\u content()函数)。我可以使用remove\\u filter删除短代码的默认过滤器。但我如何确定我只是为了我想要的CPT而删除过滤器?我有一个在页面中使用的快捷码[我的自定义快捷码]。此短代码使用WP\\U查询和输出CPT帖子。我不想在这篇CPT文章中分析短代码。我是否应该在短代码解析挂钩之前用虚拟内容更改短代码,并在之后替换回来?或者我应该在我的CPT输出之前删除短代码的默认过滤器,然后在我的CPT输出完成后再次添加短代码的默