在循环外获取POST ID:注意:正在尝试获取非对象的属性

时间:2017-09-12 作者:hamidable

我正在尝试在函数中的循环外获取post id。php。但我的错误是:Notice: Trying to get property of non-object in functions.php on line 549

function theme_myeffecto_disable() {
  global $wp_query;
  $post_id = $wp_query->post->ID;

  $showreaction = get_post_meta( $post_id, \'post_reaction_show\', true );
  $showreaction = isset($showreaction) ? $showreaction : true;
  var_dump($showreaction);
}
add_action( \'init\', \'theme_myeffecto_disable\', 20 );
以及$showrating 总是有错误的天气,无论是真是假:(

3 个回复
SO网友:Rizwan

您无法在中获取帖子IDinit 钩获取post id的第一个安全挂钩是template_redirect.

看见this 回答更多详细信息:

SO网友:Alvic

您只需将其添加到模板中即可

<?php
 global $post;

if($post >= 1) {
echo $post->ID;
}
?>
或者如果你想在你的功能中使用它。php并在任何地方使用它

function get_my_post_id() {

  global $post;

   if($post >= 1) {
    echo $post->ID;
}
}

add_shortcode( \'post_id\', \'get_my_post_id\' );

// then add the shortcode in your template file where you want the post_id output
<?php echo do_shortcode(\'[post_id]\'); ?> 

SO网友:Razon Komar Pal

Rizwan 在无法使用之前提及init 钩住这个。可以安全获取post id的第一个钩子是template_redirect. Here 您可以查看详细信息。我用过get_queried_object_id() 获取当前帖子id。

add_action(\'template_redirect\', function () {
    $post_id = get_queried_object_id();
    // if post id available, this will not execute in archive pages.
    if ($post_id) {
        $showreaction = get_post_meta($post_id, \'post_reaction_show\', true);
        $showreaction = isset($showreaction) ? $showreaction : true;
        var_dump($showreaction);
    }
});

结束