使用PRE_GET_POST后无法筛选

时间:2020-02-27 作者:user10980228

我在后端使用pre\\u get\\u posts()作为自定义帖子类型屏幕,其中通常显示所有记录。

我的动作是只显示今天的帖子。这很好,但当我尝试对不同的日期使用默认过滤器时,我没有得到任何数据,即使我知道有数据。(删除操作将显示所有数据)。

是否有一种方法可以使用pre\\u get\\u帖子,但仍然过滤/显示以前的日期?

add_action ( \'pre_get_posts\',  \'modify_query_get_apps_by_date\' );

function modify_query_get_apps_by_date( $query ) {

    if ( is_admin() && $query->is_main_query() && $query->get( \'post_type\' ) == \'apps\' ) {
          $query->set( \'meta_query\', [
              [
                  \'key\' => \'app_date\',
                  \'value\' => date(\'d-m-Y\'),
              ],
          ]);
    }
}

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

问题是你always 设置元查询,如果不希望它应用于特定情况,则需要检查该情况并对其进行说明。类似于您已经检查的方式is_admin, 或is_main_query, 等

在这种情况下,您需要检查$_GET 参数,用于检测是否已在posts屏幕上应用了过滤器,并且仅在不存在元查询时设置元查询。在这种情况下,我相信使用的参数是m, 但是URL中还有几个其他内容需要检查

进一步说明:

当你让过滤器工作时,你可能看不到预期的结果,因为过滤器在发布日期工作。如果希望看到按日期筛选的应用程序,则需要检测何时进行筛选,并添加不同的元查询来查询app_date 通过这些过滤器参数,然后撤消默认过滤器,通过其帖子元过滤帖子是昂贵的!真的,真的很贵!把这些当作你偶尔做的稀罕事。我见过一些主要网站因为简单的post meta查询而崩溃,这给数据库带来了很大的压力。这就是为什么要创建分类表,否则,类别和标记将存储在post meta中。如果您可以重新调整发布日期的用途,那么huge 差异\'type\' => \'DATE\'if ( !is_admin() ){ return; }, 这也使得调试更加容易,并且允许您在出现问题时单独测试每个检查,您的代码中也有一个bug,与您的问题无关,但仍然是一个bug。代码检查当前查询是否针对特定的职位类型,但因为它使用了赋值运算符= 而不是比较运算符==, 它不检查它们是否匹配,而是设置/分配值。因此,所有查询现在都是apps. 这与你问题中的问题无关。

相关推荐

Row actions not showing? Why?

我建造了一个WP_List_Table 显示在我构建的自定义主题页面上。尽管我查看了Internet上关于WP\\U List\\U表格的所有可能信息,但在显示行操作时遇到了一些问题。任何帮助都会很好!class Testimonials_List_Table extends WP_List_Table { function __construct() { parent::__construct( array( \'singular\'=> \'te