Ich möchte die Seiten-ID erhalten, bevor ich die Schleife in WordPress starte. ich benutze
$page = get_query_var('page_id');
Anscheinend gibt es nichts zurück.
Ich möchte nur eine Seite auf ihre ID überprüfen und dem darauf <body>
basierenden Tag eine Klasse hinzufügen .
Antworten:
Wenn Sie hübsche Permalinks verwenden,
get_query_var('page_id')
funktioniert dies nicht.Rufen Sie stattdessen die abgefragte Objekt-ID
von der globalenAdresse$wp_query
ab:// Since 3.1 - recommended! $page_object = get_queried_object(); $page_id = get_queried_object_id(); // "Dirty" pre 3.1 global $wp_query; $page_object = $wp_query->get_queried_object(); $page_id = $wp_query->get_queried_object_id();
quelle
get_queried_object_id();
gib 0 für mich zurück. Ich denke, dass das Problem ist, dass ich es nach einer benutzerdefinierten Abfrage aufrufe. Ich möchte die aktuelle Seiten-ID.get_queried_object();
hat bei mir nicht funktioniert,$wp_query->get_queried_object();
tut es aber ... Ich habe mir das angeschautget_queried_object();
und es ist dasselbe wie bei letzterem.$wp_query
mit einer benutzerdefinierten Abfrage überschrieben ?Sie können auch eine generische Funktion erstellen, um die ID des Posts abzurufen, unabhängig davon, ob er sich außerhalb oder innerhalb der Schleife befindet (behandelt beide Fälle):
<?php /** * @uses WP_Query * @uses get_queried_object() * @see get_the_ID() * @return int */ function get_the_post_id() { if (in_the_loop()) { $post_id = get_the_ID(); } else { global $wp_query; $post_id = $wp_query->get_queried_object_id(); } return $post_id; } ?>
Und einfach machen:
$page_id = get_the_post_id();
quelle
Verwenden Sie stattdessen diesen globalen $ post:
global $post; echo $post->ID;
quelle
$post
beim Starten von "the loop" initialisiert wird.Wenn Sie dieses Thema aufgrund der Postseite (Indexseitenalternative bei Verwendung der statischen Startseite) auf irgendeine Weise durchsucht haben, lautet die richtige Antwort:
if (get_option('show_on_front') == 'page') { $page_id = get_option('page_for_posts'); echo get_the_title($page_id); }
(entnommen aus Forrst | Echo WordPress "Posts Page" -Titel - Code von tammyhart )
quelle
Wenn Sie auf einer Seite sind und dies nicht funktioniert:
$page_object = get_queried_object(); $page_id = get_queried_object_id();
Sie können versuchen, den Permalink manuell mit PHP zu erstellen, um die Post-ID nachzuschlagen:
// get or make permalink $url = !empty(get_the_permalink()) ? get_the_permalink() : (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $permalink = strtok($url, '?'); // get post_id using url/permalink $post_id = url_to_postid($url); // want the post or postmeta? use get_post() or get_post_meta() $post = get_post($post_id); $postmeta = get_post_meta($post_id);
Möglicherweise wird nicht jeder mögliche Permalink abgefangen (insbesondere, da ich die Abfragezeichenfolge entfernt habe), aber Sie können ihn an Ihren Anwendungsfall anpassen.
quelle
Sie können
is_page($page_id)
außerhalb der Schleife verwenden, um zu überprüfen.quelle
Diese Funktion erhält ID von einem Seitenstrom.
quelle
$GLOBALS['post']
, die möglicherweise irgendwann ausgefüllt wurde , aber es gibt keine Garantie, es sei denn / bis Sie in der Schleife sind.Verwenden Sie die folgenden zwei Codezeilen, um die aktuelle Seiten- oder Beitrags-ID abzurufen
global $post; echo $post->ID;
quelle
Ich habe es folgendermaßen gemacht und es hat perfekt für mich funktioniert.
Deklarierte zuerst eine globale Variable in der header.php und wies die ID des Beitrags oder der Seite zu, bevor sie sich ändert, da die LOOP ihr die ID des zuletzt angezeigten Eintrags zuweist:
$GLOBALS['pageid] = $wp_query->get_queried_object_id();
Und um irgendwo in der Vorlage zu verwenden, Beispiel in der footer.php:
echo $GLOBALS['pageid];
quelle
Dies ist der richtige Code.
echo $post->ID;
quelle
Wenn Sie nicht in der WordPress-Schleife sind, können Sie keine der WordPress-Methoden verwenden, daher müssen Sie reines PHP verwenden.
Sie können diesen Code verwenden. Und sicher wird dir helfen :)
$page_id = @$_GET['page_id']; if (!is_numeric($page_id)) { // Then the uri must be in friendly format aka /my_domain/category/onepage/ // Try this //$path = '/www/public_html/index.php/'; ///$path = '/my_domain/category/onepage/'; $path = $_SERVER['REQUEST_URI']; // Clean the uri //$path = str_replace('/', '', $page); $path = str_replace('.php', '', $path); //$path = str_replace('?s=', '', $path); $path = $path ? $path : 'default'; $path_len = strlen($path); $last_char = substr($path, $path_len -1); //echo $last_char; $has_slash = strpos($last_char, "/"); //echo $has_slash; if ($has_slash === 0) : $path = substr($path, 0, $path_len -1); elseif ($has_slash === null) : $path = substr($path, 0, $path_len); endif; //echo "path: ".$path; // '/www/public_html/index' $page = substr(strrchr($path, "/"), 1); echo "page: ".$page; // 'index' } $my_page_id = 31; $my_page = 'mypage'; //echo "page: ".$page; //echo "page_id ".$page_id; if($page_id == $my_page_id || $page == $my_page) { // your stuff.... }
Genießen!
quelle
$post->ID
. Auch wenn Sie nicht auf dem Laufenden sind, können Sie viele, viele Wordpress-Funktionen verwenden. Nur nicht die wenigen, die in der Schleife verwendet werden müssen.