无法在unctions.php中获取帖子ID?

时间:2015-02-06 作者:shuvroMithun

我需要函数中的当前post id,我在函数中编写了该函数。php。但我无法获得id。我尝试了几种方法。

喜欢

get_the_ID(); //returns false 


global $post;
$id = $post->ID; //returns null  

global $wp_query
$id =$wp_query->get_queried_object_id(); //returns 0 

$url = \'http://\'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //returns 0 
我正在使用最新版本的wordpress。我现在能做什么?

UPDATE:我需要在下面的函数中使用post id。

function em_change_form(){
    $id = get_the_ID();
    if(isset($_GET[\'reg_typ\'])) {
        $reg_type = $_GET[\'reg_typ\'];
        if($reg_type ==\'vln\'){
            update_post_meta($id,\'custom_booking_form\', 2);
        } elseif ($reg_type == \'rsvp\') {
            update_post_meta($id,\'custom_booking_form\', 1);
        }
    }
}

add_action(\'init\',\'em_change_form\');

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

触发查询后,post ID可用。

可以安全获取post id的第一个钩子是\'template_redirect\'.

如果可以修改函数以接受post id作为参数,如下所示:

function em_change_form($id){
    $reg_type = filter_input(INPUT_GET, \'reg_typ\', FILTER_SANITIZE_STRING);
    if($reg_type === \'vln\'){
      update_post_meta($id,\'custom_booking_form\', 2);
    } elseif ($reg_type == \'rsvp\') {
      update_post_meta($id,\'custom_booking_form\', 1);
    }
}
您可以执行以下操作:

add_action(\'template_redirect\', function() {
  if (is_single())
     em_change_form(get_queried_object_id());
  }
});
我用过get_queried_object_id() 获取当前查询的帖子id。

如果您确实需要在早期钩子上调用函数,如\'init\', 您可以使用url_to_postid(), 和home_url() + add_query_arg() 要获取当前url,请执行以下操作:

add_action(\'init\', function() {
  $url = home_url(add_query_arg(array()));
  $id = url_to_postid($url);
  if ($id) {
     em_change_form($id);
  }
});
请注意,第二种方法性能较差,因为url_to_postid() 强制WordPress解析重写规则,因此如果可以,请使用第一种方法。

结束