WP_QUERY并在参数数组中为‘cat’=>使用变量=WP Bug?

时间:2013-01-30 作者:Chief Alchemist

为了便于讨论,这里有一个类别内查询的版本。php:

wp_reset_query();
$category_id = get_cat_ID(single_cat_title(\'\', false));
$my_query = new WP_Query(array(
\'posts_per_page\' => SOME_DEFINED_VALUE,
\'cat\'  => $category_id,
\'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 ),
\'post_type\' => array(\'post\',\'post_custom_1\',\'post_custom_2\',\'post_custom_3\')
));
// print_r($my_query);
简而言之,它不起作用。以下是我注意到的。

当我执行print\\r($my\\u query)时;我可以在第一行看到query\\u vars。它们与我的数组参数不匹配。例如,“posts\\u per\\u”页面默认为其他值(不是常量),post\\u类型列表不再包括post(应该/必须)。

如果我删除带有“cat”=>的行,或对值进行硬编码(“cat”=>3),那么一切都会按预期进行。剩余的查询变量显示在打印中。生活很好:)

我尝试了以下方法,但没有成功:

将var设置为常量,就像posts\\u per\\u页面一样(这不会导致问题)

  • \'cat=>数组($category\\u id)-我拉错了-它不喜欢它是数组

    下面是“起作用”的原因(阅读:我可以使用$category\\u id,这样做不会弄乱WP\\u Query()数组列表中的其余参数)。

    \'cat\'  => \'"-\'$category_id\'"\',
    
    也就是说,我不能说猫的ID。疯了吧?

    除非我能正确地解决它,否则我将对我的所有cat not\'ed进行逗号分隔,解析出当前cat,然后使用该字符串进行查询。换句话说,如果我的猫是A、B和C,而不是对A进行查询(正如人们所期望的那样)

    \'cat\' => A
    
    我要查询的不是B,不是C。

    \'cat\' => -B,-C
    
    希望有一个更简单的解决方案。我已经在这上面呆了太多个小时了,我已经迫不及待地想使用这个黑客程序,并把它干掉。也就是说,这对我来说确实是一个核心缺陷。是的,我使用的是3.5.1(或者我们现在使用的是0.2还是0.3?)。我的观点是,我使用的是最新版本(在3.2.x中也是如此)。

    顺便说一句,我在其他地方看到过这个问题(例如WP论坛)。唯一的解决方案建议args数组不是数组而是字符串。即使在WP\\u查询中可以这样做,我如何将post\\u类型的列表/数组作为字符串执行?最后,如果我做错了什么,那么Codex帮助页面需要更新,是吗?

    帮助:)

  • 4 个回复
    SO网友:Chip Bennett

    您在何处/如何定义$category_id?

    参考the Codex entry for WP_Query() category parameters. WP_Query() 期望类别ID作为传递integers, 不作为strings:

    如果$category_id 是整数,将其传递给\'cat\'.$category_id 是一个数组(属于ID类,又称整数),将其传递给\'category__in\'

    SO网友:Simon

    我想这与你获得类别的方式有关。我在自己的博客上设置了这个功能;$category_id 始终为0。

    所以我用这条线来检查$category_id :

    global $post;
    $category_id = get_the_category($post->ID)[0]->term_id;
    
    这是一种快速获取分配给帖子的第一个类别的方法。

    之后,查询正常cat将填充查询上的参数。

    SO网友:Wyck

    我测试了你的函数,它运行得很好,所以你可能在主题中的其他代码中有错误,或者插件冲突。或者您的循环不正确。

    作为参考,我在上测试了以下代码category.php 在2111年,输出是正确的,没有错误。

    wp_reset_query();
    define("SOME_DEFINED_VALUE", 5);
    
    $category_id = get_cat_ID(single_cat_title(\'\', false));
    
    $my_query = new WP_Query(array(
    \'posts_per_page\' => SOME_DEFINED_VALUE,
    \'cat\'  => $category_id,
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 ),
    \'post_type\' => array(\'post\',\'post_custom_1\',\'post_custom_2\',\'post_custom_3\')
    ));
    
    var_dump($my_query);
    

    SO网友:Andy Killen

    当我把你的东西分成可管理的块来分析它们时,我发现问题很可能出在数组中的“分页”行上。

    wp_reset_query();
    $category_id = get_cat_ID(single_cat_title(\'\', false));
    
    $paged = ( get_query_var(\'paged\') )? get_query_var(\'paged\') : 1 ;
    
    $query = array(
    \'posts_per_page\' => 5,
    \'cat\'  => $category_id,
    \'paged\' => $paged ,
    \'post_type\' => array(\'post\',\'custom_1\',\'custom_2\',\'custom_3\')
    );
    
    $loop = new WP_Query( $query);
    
    print_r($loop);
    
    如您所见,我在第一个get_query_var 从而成为一个合适的三元运算符。我在试验台上试过这个,效果很好。

    雷加德桑迪

    结束

    相关推荐

    Multiple loops are not reset

    我可爱的同事们再次设计了一款让我很难在Wordpress中找到它的东西。令人惊讶的是,这是我以前做过多次的事情;在一个页面上有最近的帖子和页面内容。主页是一个页面。在页面内容上方有三篇最近的帖子。对于帖子,我需要在<!--more--> 标签这个循环似乎工作得很好。稍后,在模板中,我循环查看实际页面内容。无论我做什么,它总是给我不可靠的结果。这是我的索引的精简版本。php/页。php模板(它们恰好相同):<div id=\"content\"> <?php g