在CUSTOM_POST_TYPE上添加计数到“SUBSUB”也就是快速链接的问题

时间:2018-08-22 作者:Darius

我缺少一个基本概念。我正在尝试添加几个“subsubsub”链接或快速链接到

"All | published | draft | trash".

正在尝试添加“返回的自定义帖子类型(#)”和其他一些内容。(#)是不断更改为0的内容,除非您在包含帖子的页面上。

我只是尝试将posts\\u per\\u页面设置为查询,正如这里的一条评论所说的那样,但没有改变。

我看到他们出现了,但计数错了。它们都显示为0,除非单击链接,然后返回正确的计数。如果我转到lets say“Returned Custom Post Type”,则“Used Custom Post Type”将转到0。

我尝试了wp\\u reset\\u query()和wp\\u reset\\u post\\u data();每次查询后,都会出现问题,但运气不好。

我还有一个pre\\u get\\u posts函数,它只添加$query->set(\'post\\u type\')来过滤页面上的内容,但我假设链接与pre\\u get\\u posts是分开的。

有人告诉我我做错了什么吗?

哦,之所以它是add\\u filter(\'blah\',array(\'THIS,\'etc\'),是因为它在一个类中,所以我必须指定“$THIS”。

add_filter(\'views_edit-custom_post_type\',array($this,\'add_custom_post_type_to_subsubsub\'));

public function add_custom_post_type_to_subsubsub($views){
    if( ( is_admin() ) && ( $_GET[\'post_type\'] == \'custom_post_type\' ) ) {

         $query = array(
             \'post_type\'   => \'custom_post_type\',
             \'post_status\' => \'publish\',
             \'meta_key\'    => \'special_meta_key\'
         );

         $result = new WP_Query($query);
         $class = ($_GET[\'special_meta_key\'] == \'1\' && $_GET[\'special_meta_key_returned\'] != \'1\') ? \' class="current"\' : \'\';

         $views[\'custom_post_type\'] = sprintf(__(\'<a href="%s" \'.$class.\'>custom_post_type Vouchers <span class="count">(%d)</span></a>\', \'custom_post_type\' ), admin_url(\'edit.php?post_type=custom_post_type&special_meta_key=1\'), $result->found_posts);

         $querytwo = array(
             \'post_type\'   => \'custom_post_type\',
             \'post_status\' => \'publish\',
             \'meta_key\'    => \'special_meta_key\',
             \'meta_query\' => array(
                    array(
                        \'key\' => \'usage_count\',
                        \'value\' => \'0\',
                        \'compare\' => \'>\'
                    )
                )
         );

         $resulttwo = new WP_Query($querytwo);
         $class2 = (isset($_GET[\'special_meta_key_returned\']) && $_GET[\'special_meta_key_returned\'] == "1") ? \' class="current"\' : \'\';

         $views[\'custom_post_type_returned\'] = sprintf(__(\'<a href="%s" \'.$class2.\'>Returned custom_post_type Vouchers <span class="count">(%d)</span></a>\', \'custom_post_type\' ), admin_url(\'edit.php?post_type=custom_post_type&special_meta_key_returned=1\'), $resulttwo->found_posts);

        $querythree = array(
             \'post_type\'   => \'custom_post_type\',
             \'post_status\' => \'publish\',
             \'meta_query\' => array(
                    array(
                        \'key\' => \'usage_count\',
                        \'value\' => \'0\',
                        \'compare\' => \'>\'
                    )
                )
         );

         $resultthree = new WP_Query($querythree);
         $class3 = ($_GET[\'used_type\'] == \'1\') ? \' class="current"\' : \'\';

         $views[\'used_types\'] = sprintf(__(\'<a href="%s" \'.$class3.\'>Used Vouchers <span class="count">(%d)</span></a>\', \'custom_post_type\' ), admin_url(\'edit.php?post_type=custom_post_type&used_type=1\'), $resultthree->found_posts);

         //exit(var_dump($resulttwo));
         return $views;
     }

}

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

使用pre_get_posts &过滤器;使用is_main_query() 函数检查上下文(正如您在与@Milo), 但是,不要使用is_main_query() 直接地

当您使用is_main_query() 要检查上下文,它总是检查主全局$wp_query, 而不是您可能需要的另一个自定义查询对象。因此,它可能会导致意外行为。

要确保筛选的上下文正确,请使用$query 传递给的回调函数的参数pre_get_posts 过滤器挂钩。所以与其检查is_main_query(), 你会检查的$query->is_main_query(). 例如:

function wpse_example_filter( $query ) {
    if ( is_admin() && $query->is_main_query() ) {
        // $query modification CODE
    }
}
add_action( \'pre_get_posts\', \'wpse_example_filter\' );

结束