自定义视图计数未正确更新

时间:2014-06-01 作者:member8888

我正在尝试将一些自定义视图/过滤器添加到管理员中自定义帖子类型的帖子列表中。然而,统计帖子数量的查询正在一次更新所有过滤器的帖子数量,前提是我使用的是其中一个自定义过滤器。

以下是我如何设置查询以获取帖子数量的方法:

add_action( \'views_edit-movies\', array($this, \'custom_views\') );
public function custom_views($views) {
    //$directors is a valid array returned from seperate function, removed for clarity
    foreach ($directors as $key => $value) {
        $director = $value;
        $query = array(
           \'post_type\' => \'movies\',
           \'meta_key\' => \'director\',
           \'meta_value\' => $director
        );
        $result = new WP_Query($query);

        $class = ($wp_query->query_vars[\'meta_value\'] == $director) ? \' class="current"\' : \'\';
        $views["$director"] = sprintf(__(\'<a href="%s"\'. $class .\'>\' . $director . \' <span class="count">(%d)</span></a>\'),
        admin_url(\'edit.php?&post_type=movies&director=\'.$director),
        $result->found_posts);
    }//end foreach
} 
如果我在“All”、“Published”或“Trash”默认视图上,并且每个director过滤器在这些视图上都有正确数量的帖子,那么这很好用。当我点击某个董事时,所有其他董事的职位数量都与我目前的职位数量相同。

这是因为我正在基于变量在foreach循环中分配视图吗?或者因为我正在更改查询以显示包含以下代码的视图?

以下是实际显示视图的代码:

add_action( \'pre_get_posts\', array($this, \'filters\') );
public function filters($query)
{
    if ( isset($_GET[\'director\']) ) {
        $query->set( \'meta_key\', \'director\' );
        $query->set( \'meta_value\', $_GET[\'director\'] );
    }
    return $query;
}

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

问题是$query->set 在filter函数中,正在更新用于统计帖子数量的主查询。可能是因为他们被呼叫的顺序。我试着冲洗并运行一个新的wp_query 但最终效果最好的是下面使用自定义查询的函数。

public function count($director)
{ 
 $num = $this->wpdb->get_results("SELECT * FROM " . $this->wpdb->prefix . "postmeta WHERE meta_key = \'directory\' AND meta_value = \'".$director."\'"); 
 return count($num); 
}

结束

相关推荐

Filters on Login Page

我正在尝试使用修改登录页built in filters. add\\u操作按预期工作,但我无法使筛选器工作。这是我函数中的代码。php:add_filter( \'login_form_top\', \'filter_top_login\' ); function filter_top_login( $content ) { return \'This is what I want it to say!\'; } 但当我加载wp登录时,它似乎没有做任何