将PRE_GET_POST应用于管理区域中的特定自定义帖子类型

时间:2017-07-23 作者:Park Lai

我已经创建了一些CPT,并希望有一个自定义帖子类型可以从其他帖子类型中查询。

因此,我所做的是使用以下代码来更改查询:

add_filter(\'pre_get_posts\', \'code_to_alter_query\', 10);

function code_to_alter_query($query) {
  // If not backend, bail out
  if( !is_admin() ) return $query;

  $cpts = array(\'custom_job\', \'custom_us_job\');
  $query->set( \'post_type\', $cpts );

  return $query;
}
现在它将显示来自这两个方面的工作custom_jobcustom_us_job. 但这将适用于两个CPT,如果我只想custom_jobcustom_us_job 要使用默认查询?

我试过使用

global $pagenow;
但这只能得到edit.php 对于所有的CPT来说,哪个页面是相同的,我如何确定我现在在哪个(管理)页面?

1 个回复
SO网友:Johansson

您需要的功能是get_current_screen(). 要检查您是否在特定的自定义帖子类型页面上,请执行以下操作:

$screen = get_current_screen();
if ( $screen->post_type == \'custom_job\' ) {
    // We are on custom_job post type, good to go
}
现在,如果您访问edit.php?post_type=custom_job, 此条件将返回true,您可以在其中设置查询。

还有另一种方法。通过使用is_post_type_archive(\'custom_job\'), 您可以针对edit.php?post_type=custom_job. 请确保将此与is_admin() 确保您的目标不是前端。

结束

相关推荐

当返回值为空时,Apply_Filters为什么要返回非空字符串?

因为这个把我的键盘弄坏了。进行了正确的安装,将数据库上载到新的MySQL,并一直在正确使用子主题。但有件事困扰着我,我想不出来。在我的新安装上(ver2.whowhatwhy.com) 我故意将一些小部件留空。我想,当阅读default-widgets.php wp中的文件包括在该小部件上不会显示标题元素。相反,显示标题小部件是因为,出于某种原因,传递的值apply_filters 是一个空格,而不是空白值$instance[\'title\'] 为空。$title = apply_filters( \'