Holen Sie sich die Kategorie ID in der Kategorie Vorlage

22

Wie erhalte ich die Katzen-ID in der Vorlage? Sehr wichtig: Ich kann es nicht mit dem Namen tun, weil wir mehrere Katzen mit dem gleichen Namen haben. Nur die Schnecke ist anders. Wenn ich die Schnecke kriegen würde, wäre es auch okay. Aber wie gesagt: Ich kann den Katzentitel nicht verwenden .....

Laura
quelle

Antworten:

40

$wp_query->get_queried_object()gibt Ihnen das "aktuell abgefragte Objekt". In einem Kategoriearchiv ist dies das Kategorieobjekt, auf einer Autorenseite ist dies der Autor, in einem einzelnen Beitrag ist dies der Beitrag selbst. Nun, Sie haben die Idee. Wenn Sie nur die ID möchten, können Sie auch verwenden $wp_query->get_queried_object_id().

Jan Fabry
quelle
9

Auf der Grundlage meiner Suche müssen Sie Folgendes verwenden:

$category = get_queried_object();
echo $category->term_id;
Mahdi Majidzadeh
quelle
Ich gehe davon aus, dass Sie die Ablehnung erhalten haben, weil Sie nicht erklären, warum es hilft, sondern nur angeben, dass dies der Fall ist. Möglicherweise möchten Sie die Quelle dieser Funktion überprüfen und Ihre Ergebnisse als Bearbeitung zu Ihrer Antwort hinzufügen. Hinweis: Wenn ein Kommentar länger sein muss als Ihre Antwort, dann sollte es ein Kommentar sein :)
Kaiser
7

Ähm, ich kann noch keinen Kommentar abgeben, aber die Antwort von VicePrez funktioniert. Das Folgende funktioniert auf einer Kategoriearchivseite einwandfrei (obwohl Sie wahrscheinlich etwas anderes tun möchten, als es nur zu wiederholen):

<?php
$category = get_the_category(); 
echo $category[0]->cat_ID;
?>

BEARBEITEN: Scratch that, es funktionierte für mich, bis ich auf eine Kategorie stieß, die keinen Beitrag hatte, und dann die Unterkategorie anstelle der Hauptkategorie aufnahm. Sie können sich nicht auf get_the_category auf einer Kategorie-Vorlagenseite verlassen .

Stephen Cronin
quelle
Dies ist keine praktikable Lösung, da hiermit alle Kategorien für alle Beiträge auf dieser Kategorieseite zurückgegeben werden. Ihr Echo-Ergebnis gibt die ursprüngliche Kategorie des letzten Posts in der Liste zurück.
cj5
4

Wenn ich die Frage nicht falsch verstehe, können Sie meiner Meinung nach auch die Kategorie id / slug zur Body-Klasse hinzufügen:

<?php if(is_category()) { $cat_ID = 'cat-'.get_query_var('cat'); } ?>
<body <?php body_class($cat_ID); ?>>

quelle
4

Die Antwort von @Jan Fabry ist eigentlich die richtige Antwort. Hier ist der Grund: Da Wordpress mehrere Kategorien für einen Beitrag zulässt, funktioniert das Verwenden $category = get_the_category()und Abfragen $category[0]nicht in jedem Fall, da Sie tatsächlich nach der ersten Kategorie des ersten Beitrags fragen. Stellen Sie sich vor, Sie haben die Kategorien A, B und C. Wenn Sie nur einen Beitrag haben, der die Kategorien A und B enthält und sich auf der Kategorieseite von B befinden, erhalten Sie möglicherweise stattdessen die Informationen von A.

Das ist der Grund, warum es besser ist, es zu verwenden $category = $wp_query->get_queried_object(), da es im vorherigen Beispiel immer die Informationen von B anzeigt, wenn Sie sich auf der Kategorieseite von B befinden.

Der WebMacheter
quelle
2

Das könnten Sie gebrauchen get_the_category().

Beispiel:

<?php

$category = get_the_category(); 

// use this to echo the slug
echo $category[0]->slug;

// use this to echo the cat id
echo $category[0]->cat_ID;

// if you've got multiple categories you can run a foreach loop like so
foreach ( $category as $cat ) :

    echo '<li>' . $cat->name . '</li>';

endforeach;

?>

Du könntest benutzen:

<?php
    echo '<pre>';
    print_r($category);
    echo '</pre>';
?>

um das Array der zurückgegebenen Objekte anzuzeigen.

VicePrez
quelle
Die Frage, wie ich die Katzen-ID in die Vorlage bekomme, kann unterschiedlich interpretiert werden. Innerhalb einer einzelnen Beitragsvorlage haben Sie Recht. Es funktioniert innerhalb der Schleife, um Kategorien eines einzelnen Posts abzurufen. jedoch get_the_category()wird nicht Arbeit einer Kategorie Archivseite der Kategorie - ID zu bekommen, wäre das Ergebnis willkürlich.
Michael
@ Michael wahr sagen. @Jan scheint in Bezug auf diesen spezifischen Kontext eine angemessenere Antwort gegeben zu haben.
VicePrez
1
get_the_category()funktioniert in category.php
Lea Cohen
0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);
KaramBirKamboj
quelle
1
Bitte erläutern Sie, warum dies das Problem lösen könnte. Ein Code-Snippet ist keine Antwort.
Fuxia
0

Die meisten der obigen Beispiele funktionieren, aber wenn Sie mehrere Kategorien NONE (zum Zeitpunkt des Schreibens, WP Version 3.6) der anderen Methoden verwenden, werden alle Kategorien abgerufen, die entweder an "cat" oder "category_name" übergeben wurden.

Die einzige Möglichkeit, die ich gefunden habe, ist das Abrufen der Daten von:

$wp_query->query['category_name']

Aus irgendeinem Grund wird ein anderer Wert zurückgegeben, auf get_query_var( 'category_name' )den nur die erste Kategorie zurückgegeben wird.

Wenn Sie mehrere Kategorien verwenden, müssen Sie einige Funktionen verwenden explode, um ein Array von Kategorie-Slugs zu erhalten, und diese dann durchlaufen, um alle IDs abzurufen:

<?php
global $wp_query;

//grab all categories from query string (if using `category_name`)
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));

$categories = array();
$category_ids = array();

//loop through all the slugs
foreach($category_slugs_array as $category_slug)
{
    //get category object using slug
    $category = get_category_by_slug( $category_slug );

    //check to make sure a matching category has been found
    if(isset($category->cat_ID))
    {
        $categories[] = $category;
        $category_ids[] = $category->cat_ID;
    }
}

var_dump($categories); //array of categories
var_dump($category_ids); //array of category IDs

?>

Offensichtlich müssen bei der Verwendung von UND- (+) oder ODER- (,) Operatoren einige Überlegungen angestellt werden.

acSlater
quelle