Ottieni l'ID categoria all'interno del modello categoria


22

come posso ottenere l'ID gatto all'interno del modello. Molto importante: non posso farlo con il nome, perché abbiamo gatti muliple con lo stesso nome. Solo la lumaca è diversa. Se avessi preso la lumaca, sarebbe andato bene lo stesso. Ma come ho detto: non posso usare il titolo Cat .....

Risposte:


40

$wp_query->get_queried_object()ti darà "l'oggetto attualmente interrogato". Su un archivio di categoria questo è l'oggetto categoria, su una pagina dell'autore questo è l'autore, su un singolo post questo è il post stesso, ... beh, hai l'idea. Se vuoi solo l'ID puoi anche usare $wp_query->get_queried_object_id().


9

sulla base della mia ricerca è necessario utilizzare questo:

$category = get_queried_object();
echo $category->term_id;

Suppongo che tu abbia ricevuto il downvote perché non stai spiegando perché aiuta, affermando solo che questo lo fa. Potresti voler ispezionare la fonte di quella funzione e aggiungere le tue uscite come modifica alla tua risposta. Suggerimento: se un commento deve essere più lungo della tua risposta, allora dovrebbe essere stato un commento :)
kaiser

7

Umm, non posso ancora commentare, ma la risposta di VicePrez funziona. Quanto segue funziona perfettamente su una pagina di archivio di categoria (anche se probabilmente si desidera fare qualcosa di diverso dall'eco):

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

EDIT: Scratch it, ha funzionato per me fino a quando non mi sono imbattuto in una categoria che non aveva un post, quindi ha raccolto la sottocategoria anziché la categoria principale. Non puoi fare affidamento su get_the_category su una pagina di modello di categoria .


Questa non è una soluzione praticabile in quanto restituisce tutte le categorie per tutti i post nella pagina di quella categoria. Il risultato echo restituisce la categoria iniziale dell'ultimo post nell'elenco.
cj5

4

A meno che non fraintenda la domanda, penso che puoi anche aggiungere la categoria id / lumaca alla classe corporea:

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

4

La risposta di @Jan Fabry è in realtà la risposta corretta, ecco perché: poiché Wordpress consente più categorie per un post, utilizzando $category = get_the_category() e l'interrogazione $category[0]non funzioneranno in tutti i casi poiché ciò che stai effettivamente facendo è chiedere la prima categoria del primo post. Immagina di avere le categorie A, B e C. Se hai un solo post, ha le categorie A e B e ti trovi nella pagina delle categorie di B, potresti finire con le informazioni di A.

Ecco perché è meglio usarlo $category = $wp_query->get_queried_object(), perché nell'esempio precedente ti forniranno sempre le informazioni di B quando ti trovi nella pagina delle categorie di B.


2

Puoi usare get_the_category() per farlo.

Esempio:

<?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;

?>

Puoi usare:

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

per visualizzare la matrice di oggetti restituiti.


la domanda "come posso ottenere l'ID gatto all'interno del modello" è aperta a interpretazioni diverse. all'interno di un singolo modello di post, hai ragione. funziona all'interno del ciclo per ottenere le categorie di un singolo post; tuttavia, get_the_category()non funzionerà in una pagina di archivio di categoria per ottenere l'id di categoria, il risultato sarebbe arbitrario.
Michael,

@Michael vero dire. @Jan sembra aver dato una risposta più appropriata in relazione a quel contesto specifico.
VicePrez,

1
get_the_category()funziona all'interno di category.php
Lea Cohen il

0
$category = get_category( get_query_var( 'cat' ) );

$cat_id = $category->cat_ID;

$catname=explode(",",get_category_parents($cat_id,'',','));
print_r($catname);

1
Spiega perché ciò potrebbe risolvere il problema. Uno snippet di codice non è una risposta.
fuxia

0

La maggior parte degli esempi precedenti funziona ma se si utilizzano più categorie NESSUNO (al momento della scrittura, WP versione 3.6) degli altri metodi funzionano per ottenere tutte le categorie che sono state passate a "cat" o "nome_categoria".

L'unico modo che ho trovato è di estrarre i dati da:

$wp_query->query['category_name']

Per qualche motivo questo restituisce un valore diverso a get_query_var( 'category_name' ) quale restituisce solo la prima categoria.

Quando si utilizzano più categorie, è necessario utilizzare alcune funzioni come explodeottenere una serie di slug di categoria, quindi scorrere attraverso quello per afferrare tutti gli ID:

<?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

?>

Ovviamente ci devono essere alcune considerazioni quando si usano gli operatori AND (+) o OR (,).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.