GET_QUERY在POST过滤器后停止工作

时间:2012-07-04 作者:Helen

我目前正在尝试在我的管理员中为自定义帖子类型设置一些过滤器。自定义帖子类型是“玩家”,我正在通过另一个自定义帖子类型“团队”过滤他们。

要创建我的团队下拉列表,我使用get\\u帖子检索我的所有团队:

$args = array( \'numberposts\' => -1, \'post_type\'=> \'team\', \'order\' => \'ASC\', \'orderby\' => \'title\' );
return get_posts( $args );
当我第一次到达编辑屏幕时,这就可以工作了。下拉列表呈现得非常完美。然后我执行过滤(比如说由XI女队进行过滤),结果正如预期的那样,只输出XI女队中的球员。但是我的过滤器列表已经不起作用了,我已经缩小了范围,以获得没有从我的数据库中检索任何内容的\\u帖子。

我做了一些测试,无论我做什么,get\\u posts都会在我执行过滤器后停止工作。

请注意,这是我用来输出团队筛选器并在需要时执行筛选器的代码:

add_filter( \'parse_query\', \'esf_admin_posts_filter\' );
add_action( \'restrict_manage_posts\',\'esf_restrict_listings_by_team\' );

function esf_restrict_listings_by_team( ){
global $typenow;
if ( $typenow==\'player\' ) {
    $teams = esf_get_teams();

    ?>
    <select name="esf_team_select">
        <option value=""><?php _e(\'Filter By Team\', \'baapf\'); ?></option>
        <? foreach( $teams as $team): ?>
        <option value="<?=$team->ID?>"><?=$team->post_title?></option>
        <? endforeach; ?>
    </select>
    <?
}
}

function esf_admin_posts_filter( $query ){
global $pagenow;

if ( is_admin() && $pagenow==\'edit.php\' && isset( $_GET[\'esf_team_select\']) && $_GET[\'esf_team_select\'] != \'\') {
        $query->query_vars[\'meta_key\'] = \'esf_mm_teams\';
        $query->query_vars[\'meta_value\'] = $_GET[\'esf_team_select\'];
}

return $query;
}
提前感谢您提供的任何帮助!

海伦

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

那是因为esf_admin_posts_filter() 将自身应用于内部查询esf_get_teams()

正在添加$query->is_main_query()if 过滤器内部的条件应防止出现这种情况。

结束

相关推荐

Apply_Filters函数及其变量的说明

我正在学习如何使用PHP构建html表单,方法是以“simplr表单注册”插件为例。我正在查看以下代码:$form .= apply_filters(\'simplr-reg-instructions\', __(\'Please fill out this form to sign up for this site\', \'simplr-reg\')); 您能解释一下这里发生了什么吗?函数的作用是什么,为什么需要“simpr reg指令”和“simpr reg”?为什么这句话不能简单地说:$