编辑.php是否有一个查询字符串来显示所有没有自定义分类术语的帖子?

时间:2013-05-26 作者:Shaun Scovil

我写了一个插件Premium Posts 注册一个名为sms_premium_posts 并在WordPress管理区域的帖子列表表中添加一列。

在该自定义列中,如果已标记帖子Premium, 术语Premium 链接到仅高级帖子的筛选列表。此链接是使用查询字符串生成的:

http://www.example.com/wp-admin/edit.php?sms_premium_posts=premium

如果帖子未标记为Premium, 我想要这个学期Standard 筛选列表,使表仅显示未标记为高级的帖子(即没有分类术语的帖子)。

是否有查询字符串?

Example query string:
http://www.example.com/wp-admin/edit.php?sms_premium_posts!=premium

你可能会问,“为什么不加上这个词?”Standard 所有其他帖子?“我不这样做的原因是,当插件被激活时,需要用自定义分类术语标记所有现有的帖子……这似乎效率很低。

提前感谢!

SOLUTION

根据下面@s\\u ha\\u dum的回答,我是如何伪造一个否定查询字符串的:

function standard_term_filter( $query ) {
    if ( ! $query->is_admin || ! isset( $_GET[\'sms_premium_posts!\'] ) )
        return $query;

    if ( \'premium\' == $_GET[\'sms_premium_posts!\'] ) {
        $taxquery = array(
            array(
                \'taxonomy\' => \'sms_premium_posts\',
                \'field\'    => \'slug\',
                \'terms\'    => \'premium\',
                \'operator\' => \'NOT IN\'
            )
        );
        $query->set( \'tax_query\', $taxquery );
    }
    return $query;
}
add_action( \'pre_get_posts\', array( $this, \'standard_term_filter\' ) );
请注意,我将此函数添加为插件类的一个方法,这就是为什么我在add\\u action()中为回调使用了一个数组。

还要注意!在我的查询字符串术语末尾:sms_premium_posts!

我做了我的Standard 术语链接如下所示:

http://www.example.com/wp-admin/edit.php?sms_premium_posts!=premium

自从sms_premium_posts! 不同于sms_premium_posts (我的自定义分类法的鼻涕虫),它是有效的。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

使用tax_query 使用NOT IN 操作人员

$args = array(
  \'post_type\' => \'post\',
  \'tax_query\' => array(
    array(
      \'taxonomy\' => \'sms_premium_posts\',
      \'field\' => \'slug\',
      \'terms\' => \'Premium\',
      \'operator\' => \'NOT IN\'
    )
  )
);
$query = new WP_Query( $args );
现在,通过$_GET 把你的问题串起来,你可以这样做:

function alter_edit_php_query_wpse_100794($qry) {
  if(isset($_GET[\'notin\'])) {
    $qry->set(
      \'tax_query\',
      array(
        array(
          \'taxonomy\' => \'category\',
          \'field\' => \'slug\',
          \'terms\' => sanitize_title_with_dashes($_GET[\'notin\']),
          \'operator\' => \'NOT IN\'
        )
      )
    );
  }
}
add_action(\'pre_get_posts\',\'alter_edit_php_query_wpse_100794\');
这很粗糙。您可能需要更多条件,例如is_admin, 防止其在全球范围内发挥作用。

参考文献

http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

SO网友:DrewAPicture

没有税务查询是不可能的。您最好指定“premium”或“standard”术语,并且永远不要为空——也许可以使用包含默认值“standard”的下拉列表。

如果您不想在列中反复显示“Standard”,您可以始终通过回调来测试和隐藏它manage_posts_custom_column.

另请参见:https://stackoverflow.com/questions/10582066/is-that-possible-to-use-in-query-string

结束

相关推荐

How do I find posts?

我是一名新的网站管理员,我对没有显示在仪表板上的帖子有问题。发布所有(21)已发布(13)待定(8)。这是一个列表网站和用来显示的帖子。有没有关于如何解决这个问题的想法?