只将过滤器应用于特定的帖子列表,而不检查URL参数

时间:2013-03-14 作者:meWantToLearn

我制作了一个名为:slider的自定义帖子类型,在我的插件类中,我添加了一个过滤器,该过滤器调用方法remove\\u row\\u action,该方法从actions中取消查看链接

   add_filter(\'post_row_actions\', array(&$this, \'remove_row_actions\'), 10, 1);

   public function remove_row_actions($action) {

    if (isset($_GET[\'post_type\'])  && $_GET[\'post_type\'] == \'slider\')) {
        unset($action[\'view\']);
        return $action;
    }else{
        return $action;
    }
}
它工作得非常好,但我相信必须有一种更简洁的方式,add\\u过滤器只应用于自定义的post类型,而不是我通过GET变量检查它

2 个回复
SO网友:david.binda

是的,你说得对。有一个聪明的方法。post\\u row\\u actions过滤器还可以接受第二个参数$post,您可以从中获取其post\\u类型。请参见代码:

add_filter( \'post_row_actions\', array( $this, \'remove_row_actions\' ), 10, 2);
public function remove_row_actions( $action, $post ) {
    if ( \'slider\' === get_post_type( $post ) ) {
        unset $action[\'view\'];
        return $action;
    }
    return $action;
}

SO网友:kaiser

只需检查get_current_screen() 对象它会告诉你你得到了什么。这同样适用于$query 可以在parse_requestpre_get_posts 过滤器。

结束

相关推荐

Query_Posts和自定义分类发布顺序

我有一个为“项目”定义的自定义分类法和一个显示所有项目的页面。在这个页面中有一个jquery过滤菜单(同位素)。最初,页面必须显示所有项目,但按时间顺序(“按时间顺序”是一个类别,1970、1980、1990等是项目元素的子类别)按DESC模式排序。现在,最初在页面中显示项目的查询是query_posts(\'post_type=portfolio&project-type=\'.get_post_meta($post->ID, \'portfolio_page_cats\', true).