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');
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.