Admin_init中的WP_Query(和post_id)为空

时间:2012-02-23 作者:Mark

我正在开发一个插件,我遇到的一个问题是,我无法在分配给admin\\u init hook的函数中获取post id。

我尝试了几种不同的方法;但是,它们似乎都使用$wp\\u查询。ID不在URL中(SEO URL)。

下面是我正在使用的代码的简单版本。我刚才实现了这样的代码,并通过查看“后期编辑”页面来运行它

add_action(\'admin_init\',\'do_optional_featured_article\');
function do_optional_featured_article()
{
    global $wp_query;
    echo "<pre>";
    print_r($wp_query);
    echo "</pre>";
    die();
}
$wp\\u query是一个大部分为空的数组,值得注意的是,post成员为空

根据Webord的以下建议,我添加了此功能:

function get_admin_post()
{
    if( isset($_GET[\'post\']) ) 
    {
        $post_id = absint($_GET[\'post\']); // Always sanitize
        $post = get_post( $post_id ); // Post Object, like in the Theme loop
        return $post;
    }
    elseif( isset($_POST[\'post_ID\']) )
    {
        $post_id = absint($_POST[\'post_ID\']); // Always sanitize
        $post = get_post( $post_id ); // Post Object, like in the Theme loop
        return $post;
    }
    else 
    {
        return false;
    }
}
谢谢Webord!!

1 个回复
SO网友:Webord

在admin中,没有当前WP\\u查询,因为admin上的大多数页面都没有链接到任何帖子,因此与帖子有任何关系的页面应该从$_GET 就像这样:

add_action(\'admin_init\',\'do_optional_featured_article\');
function do_optional_featured_article() {
    if( isset($_GET[\'post\']) ) {
        $post_id = absint($_GET[\'post\']); // Always sanitize
        $post = get_post( $post_id ); // Post Object, like in the Theme loop
        echo "<pre>" . esc_html( print_r( $post, true ) ) . "</pre>"; // Better way to print_r without breaking your code with the html...
        die();
    }
}
如果您试图在保存操作中实现这一点,则帖子id应位于$_POST[\'post_ID\'];

希望我能帮上忙。

所以我对你的代码做了更多的修改:

function get_admin_post() {
    $post_id = absint( isset($_GET[\'post\']) ? $_GET[\'post\'] : ( isset($_POST[\'post_ID\']) ? $_POST[\'post_ID\'] : 0 ) );
    $post = $post_id != 0 ? get_post( $post_id ) : false; // Post Object, like in the Theme loop
    return $post;
}

结束

相关推荐