我正在开发一个插件,我遇到的一个问题是,我无法在分配给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!!
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;
}