无法在edit.php页面上的字段上进行筛选

时间:2019-10-29 作者:StevieD

我在借用密码Add filter menu to admin list of posts (of custom type) to filter posts by custom field values 要将筛选器添加到我的自定义帖子类型,请使用parse_query 过滤器:

function grievance_posts_filter( $query ){
    global $pagenow;
    $type = \'post\';
    if (isset($_GET[\'post_type\'])) {
        $type = $_GET[\'post_type\'];
    }
    if ( \'grievance\' == $type && is_admin() && $pagenow==\'edit.php\' && isset($_GET[\'step\']) && $_GET[\'step\'] != \'\') {
        $query->query_vars[\'meta_key\'] = \'my_first_plugin_fields[step]\';
        $query->query_vars[\'meta_value\'] = 2;
    }
}
add_filter( \'parse_query\', \'grievance_posts_filter\' );
在上面的代码中,我硬编码了meta_value 进行故障排除。我希望上面的代码只显示带有step 值设置为“2”。但是,不是过滤帖子,而是编辑。php页面根本没有显示任何帖子。我认为我没有使用正确的值meta_keymeta_value 元素。我不知道该放什么。我的meta\\u键有多个子键与之关联。

我也尝试过:

        $query->query_vars[\'meta_key\'] = \'my_first_plugin_fields\';
        $query->query_vars[\'meta_value\'] = array( \'step\' => 2 );
但这也不起作用。

我还尝试:

    $meta = [ \'my_first_plugin_fields\' => [ \'key\' => \'step\', \'value\' => \'2\', \'compare\' => \'=\' ] ] ;
    $query->query_vars[\'meta_query\'] = $meta;
没有成功。

2 个回复
SO网友:Robert Ruby II

不会让我评论,可能是一个愚蠢的问题,但你有没有试过放骰子();就在if语句之后,以确保条件正确工作?

另一方面,我强制元值成为隐藏分类法中的术语,并将其用作过滤器。如果你愿意的话,我可以对此展开讨论,但我不想走得太远,因为这不是问题的主题。

SO网友:StevieD

我能够通过以下方式实现这一目标:

        $query->query_vars[\'meta_key\'] = \'my_first_plugin_fields\';
        $query->query_vars[\'meta_value\'] = sprintf(\':"step";s:1:"%s";\', $_GET[\'step\']);
        $query->query_vars[\'meta_compare\'] = \'LIKE\';
这似乎是一个可怕的黑客行为。如果有更好的办法,我很想听。

相关推荐

在不破坏比较修订工具的情况下通过phpMyAdmin编辑帖子的正确方法

在我网站上的数百篇帖子中,一个特定的字符串需要被另一个字符串替换,但这个替换只能在发布的帖子上执行,而不能在修订版上执行。我找到的插件(search&replace、better search replace等)没有此功能,因此必须使用phpMyAdmin完成这项工作。这可以通过此查询完成UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, \'tobereplaced\', \'replacement\') WHERE po