web-dev-qa-db-ja.com

Functions.phpで投稿IDを取得できませんか?

私はfunctions.phpで書いたように私は関数の現在のポストIDが必要です。しかし、私は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 

最新版のワードプレスを使用しています。今何ができる?

更新: 以下の関数に投稿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');
2
shuvroMithun

投稿IDは、クエリが実行された後に使用可能になります。

投稿IDを取得しても安全な最初のフックは 'template_redirect' です。

引数として投稿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に書き換え規則を強制的に解析させるため、2番目の方法はパフォーマンスが劣ります。可能であれば、最初の方法を使用してください。

5
gmazzap