当且仅当用户正在编辑post类型为“event”的帖子(post.php)时,我试图使用admin\\u init钩子做一些事情。我的问题是,即使wordpress指向一个全局变量调用$post\\u type。如果我这样做:
global $post_type;
var_dump($post_type);
它返回NULL。
但如果我这样做:
global $pagenow;
var_dump($pagenow);
它返回我的当前页面。i、 e.“post.php”。
我研究了这个函数$screen = get_current_screen();
但是,直到admin\\u init hooks运行之后才声明,然后就很晚了。
因此,我的问题是,在运行admin\\u init时,如何找出当前正在编辑的帖子的类型。如果url为post.php?post=81&action=edit
那么,我如何知道postid=81是什么样的帖子类型?
ThanksMalthe谢谢
最合适的回答,由SO网友:Alessandro Benoit 整理而成
add_action( \'admin_init\', \'do_something_152677\' );
function do_something_152677 () {
// Global object containing current admin page
global $pagenow;
// If current page is post.php and post isset than query for its post type
// if the post type is \'event\' do something
if ( \'post.php\' === $pagenow && isset($_GET[\'post\']) && \'post\' === get_post_type( $_GET[\'post\'] ) )
// Do something
}
}
SO网友:MxmastaMills
我将详细介绍MiCc83的答案。有一些事情没有遵循OP最初的问题,但总的来说,这是一个很好的解决方案。例如,它不适用于post\\u类型事件,因为您正在将post\\u类型检查为答案中的“post”。
add_action( \'admin_init\', \'do_something_152677\' );
function do_something_152677 () {
// Global object containing current admin page
global $pagenow;
// If current page is post.php and post isset than query for its post type
if ( \'post.php\' === $pagenow && isset($_GET[\'post\']) ){
$post_id = $_GET[\'post\'];
// Do something with $post_id. For example, you can get the full post object:
$post = get_post($post_id);
}
}
条件
\'post\' === get_post_type( $_GET[\'post\'] )
在前面的回答中,将阻止此操作处理post类型的“事件”。您需要检查帖子类型“event”,而不是“post”。