当我在admin的post.php上时,我如何知道当前的帖子类型?

时间:2014-07-04 作者:Malibur

当且仅当用户正在编辑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谢谢

3 个回复
最合适的回答,由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”。

SO网友:Lovor

get_current_screen()->post_type 保持柱状缓动器。或$_REQUEST[\'post_type\'].请注意,对于标准页面/帖子,可能未设置post\\u类型。

结束