必须使用导致查询错误的插件

时间:2015-12-15 作者:Joe Bobby

我创建了一个MU插件,它只显示循环中某些标记的帖子,如下所示:

function custom_tags( $query ) {
    $query->set( \'tag\', array( \'custom\', \'general\' ) );
}
add_action( \'pre_get_posts\', \'custom_tags\' );
当我移除数组并只检查一个标记时,它工作得很好,但是如何让它像我在上面尝试的那样处理多个标记呢?

我得到的错误是:

Warning: strpos() expects parameter 1 to be string, array given in /srv/users/s/wp-includes/query.php on line 1966

Warning: preg_split() expects parameter 2 to be string, array given in /srv/users/s/wp-includes/query.php on line 1967

更新的代码:

$current = substr($_SERVER[HTTP_HOST], 0, -4);

function custom_tags( $query ) {
        $query->set( \'tag\', \'general,{$current}\' );
}
add_action( \'pre_get_posts\', \'custom_tags\' );

2 个回复
SO网友:Howdy_McGee

正如Milo(和您的错误)指出的那样:您正在传递一个数组,其中需要一个字符串。根据WP_Query tag parameter

显示与特定标记关联的帖子。

标签(string) - 使用tag slug要解决此问题,只需传递一个逗号分隔的字符串:

function custom_tags( $query ) {
    $query->set( \'tag\', \'custom,general\' );
}
add_action( \'pre_get_posts\', \'custom_tags\' );

SO网友:s_ha_dum

创建适当的tax_query, 例如:

\'tax_query\' => array(
    array(
        \'taxonomy\' => \'people\',
        \'field\'    => \'slug\',
        \'terms\'    => \'bob\',
    ),
),
但是您的代码“更新代码”也会因为其他原因而失败。

  1. $current 超出范围
  2. 并且您的变量不会在单引号内展开,您需要的基本更改是:

    function custom_tags( $query ) {
      $current = substr($_SERVER[HTTP_HOST], 0, -4);
      $query->set( \'tag\', "general,{$current}" );
    }
    add_action( \'pre_get_posts\', \'custom_tags\' );
    
    但如前所述,我会创建一个tax_query

    function custom_tags( $query ) {
      $current = substr($_SERVER[HTTP_HOST], 0, -4);
      $tax = array(
        array(
            \'taxonomy\' => \'tag\',
            \'field\'    => \'slug\',
            \'terms\'    => $current,
            \'operator\' => \'IN\' // This is default
          ),
        );
      $query->set( \'tag\', "general,{$current}" );
    }
    add_action( \'pre_get_posts\', \'custom_tags\' );
    
    可以更改运算符以获得不同的行为:

    运算符(字符串)-要测试的运算符。可能的值为“IN”、“NOT IN”、“AND”、“EXISTS”和“NOT EXISTS”。默认值为“IN”

  3. 您的代码将在站点上的每个查询上运行,大约。那会alter a lot of things, 肯定会破坏一切。您需要将其限制在您需要的位置。我不知道该在哪里或何时运行,但这应该是一个开始:

    function custom_tags( $query ) {
      if (is_admin() 
        || $query->is_main_query()
      ) {
        return;
      }
      $current = substr($_SERVER[HTTP_HOST], 0, -4);
      $tax = array(
        array(
            \'taxonomy\' => \'tag\',
            \'field\'    => \'slug\',
            \'terms\'    => $current,
            \'operator\' => \'IN\' // This is default
          ),
        );
      $query->set( \'tag\', "general,{$current}" );
    }
    add_action( \'pre_get_posts\', \'custom_tags\' );
    

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请