webentwicklung-frage-antwort-db.com.de

Kann keine Beitrags-ID in functions.php bekommen?

Ich benötige die aktuelle Beitrags-ID in einer Funktion, die ich in functions.php geschrieben habe. Aber ich kann den Ausweis nicht bekommen. Ich habe mehrere Methoden ausprobiert.

Mögen

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 

Ich benutze die neueste Version von WordPress. Was kann ich jetzt machen?

UPDATE: Ich brauche Post-ID in der Funktion unten.

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

Die Beitrags-ID ist verfügbar, nachdem die Abfrage ausgelöst wurde.

Der erste Haken, der die Post-ID sicher erhält, ist 'template_redirect' .

Wenn Sie Ihre Funktion ändern können, um eine Beitrags-ID als Argument zu akzeptieren, gehen Sie wie folgt vor:

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);
    }
}

Du kannst tun:

add_action('template_redirect', function() {
  if (is_single())
     em_change_form(get_queried_object_id());
  }
});

Ich habe get_queried_object_id() verwendet, um die aktuelle abgefragte Beitrags-ID abzurufen.

Wenn Sie Ihre Funktion unbedingt bei einem frühen Hook wie 'init' aufrufen müssen, können Sie url_to_postid() und home_url() + add_query_arg() verwenden, um die aktuelle URL abzurufen:

add_action('init', function() {
  $url = home_url(add_query_arg(array()));
  $id = url_to_postid($url);
  if ($id) {
     em_change_form($id);
  }
});

Beachten Sie, dass die zweite Methode weniger performant ist, da url_to_postid() WordPress zwingt, die Regeln zum Umschreiben zu analysieren. Verwenden Sie also, wenn Sie können, die erste Methode.

5
gmazzap