webentwicklung-frage-antwort-db.com.de

Beitrags-ID kann nicht auf einer Seite abgerufen werden, die ein benutzerdefiniertes Beitragstyp-Archiv ist

Ich habe einen benutzerdefinierten Beitragstyp archive archive-projects.php, den ich als Seitenvorlage verwende, da ich einige benutzerdefinierte Felder habe, die ich anzeigen möchte. Ich versuche, die Beitrags-ID dieser Seite abzurufen, erhalte jedoch entweder die ID null oder die des ersten Beitrags im Archiv, je nachdem, was ich versuche. Ich habe versucht, meinen Code über die Schleife auf meiner Seite zu setzen, aber ohne Glück.

Entschuldigung, wenn dies ein Duplikat ist, aber ich habe versucht, viele Tutorials zu diesem Thema zu durchsuchen, und habe immer noch keine Antwort auf mein spezifisches Szenario der Verwendung einer Seitenvorlage mit einem benutzerdefinierten Beitragstyp-Archiv.

Ich habe diesen Code ausprobiert und es funktioniert, aber ich bin immer noch ratlos, warum keine der anderen Methoden zu funktionieren scheint. Ich zögere es, dies als Lösung beizubehalten, da dies nicht mehr funktioniert, wenn der Benutzer den Seiten-Slug ändert:

$my_page_id = get_id_by_slug('projects');

function get_id_by_slug($page_slug) {
$page = get_page_by_path($page_slug);
if ($page) {
    return $page->ID;
} else {
    return null;
}
}

Ich habe Folgendes erfolglos versucht (über meiner benutzerdefinierten Schleife in meiner Vorlage):

get_queried_object_id(); // returns nothing
$page_id = $wp_query->get_queried_object_id(); // returns 0

global $post; // I've tried including this and removing with same effect
$post = $wp_query->post;
$post_id = $post->ID; // returns the id of the first post in my archive

Irgendwelche Ideen, was ich falsch mache oder wie ich die tatsächliche ID meiner Projektseite erhalte?

UPDATEBei meinem benutzerdefinierten Beitragstyp wurde has_archive auf true gesetzt. Ich habe versucht, eine benutzerdefinierte Vorlage zu erstellen, aber aufgrund der WordPress-Hierarchie wurde nach einer Archivseite gesucht. Ich habe mein Problem gelöst, indem ich has_archive auf false gesetzt und eine benutzerdefinierte Vorlage namens page-template-projects.php erstellt habe. Anschließend konnte ich eine Seite namens "Projekte" einrichten und meine benutzerdefinierte Vorlage verwenden, während ich eine ID für die Seite korrekt abrufen konnte.

5
Greg

BEARBEITEN

Ich habe den Eindruck, dass ich Ihre Frage falsch verstanden habe

Nur ein paar Anmerkungen hier

  • Wenn archive-projects.php eine Seitenvorlage ist, benennen Sie sie um. Sie sollten archive nicht als Präfix für eine Seitenvorlage oder einen anderen reservierten Vorlagennamen verwenden. Seitenvorlagen sollten den Namen page-{$name}.php oder einen anderen Namen mit Präfixen haben, die von der Vorlagenhierarchie verwendet werden. Dies ist verwirrend für Wordpress und bringt die Vorlagenhierarchie durcheinander

  • Wenn es sich um eine Seitenvorlage handelt, sollten Sie die ID mit get_queried_object_id(); abrufen oder mit echo get_queried_object_id(); anzeigen.

  • Wenn dies eine echte Archivseite ist, erhalten Sie keine ID

URSPRÜNGLICHE ANTWORT

Archivseiten, ob Beitragstyp-Archivseiten, Kategoriearchive, Datumsarchive usw., Suchseiten, Einzelseiten und die Homepage sind Pseudoseiten, mit anderen Worten, gefälschte Seiten. Sie haben keine IDs, da sie nicht existieren, weil sie keine Seiten erstellt haben, die in der Datenbank gespeichert sind

Diese Seiten "erben" die ID des spezifischen Beitrags oder Archivs, das sie anzeigen, obwohl sie selbst noch keine ID haben. Akzeptieren Sie die Startseite, Datumsarchive, Suchseiten und Archivseiten des Beitragstyps

Kurz gesagt, Ihre benutzerdefinierte Post-Archiv-Seite hat keine ID.

KONZEPTIONELLER BEWEISS

Sie können eine var_dump($wp_query) auf Ihrer Archivseite ausführen. Sie werden sehen, dass nur echte Seiten IDs haben

?><pre><?php var_dump($wp_query); ?></pre><?php 
5
Pieter Goosen

Bei meinem benutzerdefinierten Beitragstyp wurde has_archive auf true festgelegt. Ich habe versucht, eine benutzerdefinierte Vorlage zu erstellen, aber aufgrund der WordPress-Hierarchie wurde nach einer Archivseite gesucht. Ich habe mein Problem gelöst, indem ich has_archive auf false gesetzt und eine benutzerdefinierte Vorlage namens page-template-projects.php erstellt habe. (der Name ist nicht wichtig) Ich konnte dann eine Seite namens "Projekte" einrichten und meine benutzerdefinierte Vorlage verwenden, während ich eine ID für die Seite korrekt abrufen konnte.

Wenn Sie einen benutzerdefinierten Beitragstyp einrichten, notieren Sie sich den has_archive und stellen Sie sicher, dass Sie ihn entsprechend verwenden. Wenn Sie diesen Wert auf false setzen, können Sie ganz einfach Ihre eigene Vorlage und benutzerdefinierte Abfrage mit WP_Query in Ihrer Vorlage erstellen, um Ihre Posts aufzulisten, die zu Ihrem benutzerdefinierten Post-Typ gehören.

0
Greg