首页 > 解决方案 > 过滤器如何在 WordPress 数据表中工作?

问题描述

我正在定制Awesome Support插件以满足我的需求。有一个过滤选项all tickets。当我过滤 ID 时,它不能正常工作。在此处输入图像描述

我设置了一个实际上不存在的 ID。所以它应该显示空表。所有以前的数据都在显示。但是当我设置一个实际存在的 ID 时,它工作正常: 在此处输入图像描述

我浏览了插件的代码。发现以下几行是负责任的(可能是):

公共函数 set_filtering_query_var( $query ) {

global $post_type;

if ( 'ticket' !== $post_type
    || ! $query->is_main_query()
    || empty ($_GET[ 'id' ])
) {
    return;
}

$fields = $this->get_custom_fields();

foreach( $fields as $key => $value ) {
    if ( 'id' !== $key && $value[ 'args' ][ 'filterable' ] ) {
        $query->query[ $key ] = '';
        $query->set( $key, '');
    }
}

$query->query[ 'post_status' ] = '';
$query->set( 'post_status', '');

$query->query[ 'filter-by-date' ] = '';
$query->set( 'filter-by-date', '');
// echo '<pre>';print_r($query);

}

但无法弄清楚为什么它会发生在一个不存在的 ID 上。任何想法?请参考任何学习链接。我知道我是在胡说八道,但这个问题让我哭了。谢谢你的时间。

注意:过滤时的 url 结构:wp-admin/edit.php?post_status=all&post_type=ticket&id=574603956219986&filter_action=Filter&s&paged=1&action2=-1

标签: wordpress

解决方案


您可以尝试以下代码

if (!empty ($_GET[ 'id' ])) { $id = esc_attr( $_GET['id'] ); $query->set('post__in', array($id)); }


推荐阅读