Single.php – Erhalte aktuelle Elternkategorie

Das Problem

Ich versuche, den aktuellen Titel der übergeordneten Kategorie mit dem Titel rechts darunter anzuzeigen. Das Problem ist, ich kann nicht scheinen, die aktuelle Kategorie innerhalb oder außerhalb der Schleife zu bekommen. Ich kann eine Liste der übergeordneten Kategorien erhalten. Wenn ich zum Beispiel einen Beitrag in drei verschiedenen Kategorien habe und ich den einzelnen Beitrag in diesen Kategorien browse, möchte ich, dass der aktuelle Kategoriename oben angezeigt wird und nicht nur die erste [0] Kategorie, in der er sich befindet.


Das Beispiel

Test Post ist in den Kategorien: Cat1, Cat2

Ich gehe zum Test Post in Cat1 es sollte Cat1 - Test Post anzeigen

Ich gehe zum Test Post in Cat2 es sollte Cat2 - Test Post anzeigen


Versuch und Fehler

get_the_category() gibt beide Kategorien zurück: Cat1, Cat2

$post->post_parent immer 0 zurück

echo $category[0]->name; wird natürlich nur die oberste Kategorie – Cat1

Solutions Collecting From Web of "Single.php – Erhalte aktuelle Elternkategorie"

Die sehr breite Antwort, warum das nicht funktioniert, ist, dass das Internet staatenlos ist . Grundsätzlich ist jede Anfrage für eine Seite eine separate und eindeutige Instanz von anderen Seitenanforderungen.

Beispiel

Nehmen wir an, Post-1 ist in Kategorie-1 und Kategorie-2 .

Wenn WordPress post-1 auf single.php , hat es keine Möglichkeit zu wissen, wie der Benutzer auf der Seite angekommen ist. Es weiß nur, dass sowohl Kategorie-1 als auch Kategorie-2 dem Post zugeordnet sind.

Es ist nicht möglich, die “aktuelle Kategorie” zu erhalten, da sie nicht mehr in einer Kategorie ist.

Dieses Verhalten führt auch zu Verwirrung mit Breadcrumbs in WordPress. Der Breadcrumb-Pfad eines Benutzers könnte so aussehen.

 Step 1. Home Step 2. Home->category-1 Step 3. Home->post-1 

Das erwartete Verhalten sieht oft so aus, dass der letzte Schritt so aussieht.

 Step 3. Home->category-1>post-1 

Aber wenn das funktioniert, dann würde das auch funktionieren.

 Step 3. Home->category-2->post-1 

Und das wäre schlecht für Suchmaschinen, weil derselbe Beitrag jetzt zwei verschiedene URLs hat.

jedoch

Wenn Sie wirklich die Kategorie anzeigen möchten, aus der der Benutzer stammt, können Sie so etwas ausprobieren. Denken Sie daran, das Internet ist zustandslos, Sie brauchen also eine Möglichkeit, Informationen von einer Seite an eine andere zu übermitteln.

Kategorievorlage

Auf category.php Sie Ihren Permalink auf den einzelnen Post ändern und einen Abfragezeichenfolgenparameter in Form von ?category=id . Das könnte ungefähr so ​​aussehen.

 < ?php $cat_obj = get_category( get_query_var( 'cat' ) ); $cat_id = ( $cat_obj ? $cat_id = $cat_obj->term_id : $cat_id = '' ); ?> < ?php the_title(); ?> 

Dein Permalink sollte jetzt ungefähr so ​​aussehen, wo ?c=19 an den normalen Permalink angehängt ist.

 http://www.example.com/post-name/?c=19 

Einzelne Vorlage

Auf single.php müssen Sie die Kategorie-ID aus der Abfragezeichenfolge abrufen, den Namen der Kategorie abrufen und dann auf der Seite anzeigen. Der Code dafür könnte so aussehen.

Sie sollten überprüfen, ob der Abfragezeichenfolgenparameter festgelegt ist. Wenn dies der esc_html() ist, verwenden Sie esc_html() , um es aus Sicherheitsgründen zu esc_html() Überprüfen Sie dann, ob es numerisch ist und nicht etwas anderes wie “blah”.

Wenn Sie mit der validation fertig sind, rufen Sie den Kategorienamen und die Ausgabe auf der Seite ab.

 if ( isset( $_GET['c'] ) ) { $cat_id = (integer) esc_html( $_GET['c'] ); if ( is_numeric( $cat_id ) ) { $cat_obj = get_category($cat_id); $cat_name = $cat_obj->name; echo '' . $cat_name . ''; } } 

Vorbehalte

Wenn der Abfragezeichenfolgenparameter nicht existiert, wird keine Kategorie angezeigt. Es gibt viele Möglichkeiten, wie ein Benutzer zu einer einzelnen Post-Seite gelangen kann und dies nur einen sehr spezifischen Anwendungsfall behandelt.

Dies kann sich auch negativ auf die SEO auswirken, wenn die Suchmaschine mehrere eindeutige URLs mit exakt demselben Inhalt wahrnimmt.