Ottenere l'ID della categoria corrente dalla pagina dell'articolo WordPress

19 dic 2013, 13:17:46
Visualizzazioni: 24.6K
Voti: 2

Ho un problema nell'ottenere l'ID della categoria dell'articolo corrente. Stiamo utilizzando <?php get_the_category( $id ) ?> per trovare la categoria dell'articolo corrente. Se un articolo come 'demo' ha 2 categorie come cat1 e cat2, quando apro una pagina cat1 e poi vado alla pagina demo, voglio un layout diverso... e quando apro una pagina cat2 e poi vado alla pagina demo, voglio aprire questa pagina demo con un altro layout. Questo può essere fatto solo quando riuscirò a identificare... da quale categoria proviene la chiamata... ma come??

1
Commenti

Non so se hai mai risolto questo problema, ma ho appena finito di scrivere una funzione molto estesa per la navigazione tra post per questo, dai anche un'occhiata alla risposta di @G.M. alla mia domanda originale qui. Puoi, prendendo il codice da entrambe le risposte e combinando, sapere da quale categoria proviene il singolo post e poi usare il filtro single_template per impostare un template specifico

Pieter Goosen Pieter Goosen
8 gen 2015 09:13:26
Tutte le risposte alla domanda 5
0

WordPress ha una funzione wp_get_referer, che ottiene l'URL di riferimento dall'header HTTP. Quindi, se si passa da un archivio di categoria a un singolo articolo, normalmente il nome della categoria sarà incluso in quell'URL. Questo significa che puoi iniziare il tuo single.php in questo modo:

$refer = wp_get_referer();
if (strpos($refer, 'category/cat1') != false) {... fai qualcosa ...}
elseif (strpos($refer, 'category/cat2') != false) {... fai qualcos'altro ...}
else {... esegui un'azione predefinita ...}

A seconda della tua configurazione, questa soluzione potrebbe richiedere qualche modifica, ma l'idea generale dovrebbe essere chiara, spero.

3 lug 2016 19:27:12
8
<?php $categories = get_the_category( $post->ID ); ?>

Questo restituirà un array di categorie, da cui puoi ottenere l'id, in questo modo:

$categories[0]-> term_id;

Questo sarà per la prima categoria nell'array se ce n'è più di una.

Informazioni sull'utilizzo possono essere trovate nel codex

19 dic 2013 14:08:58
Commenti

Grazie per questa informazione. Ma ho bisogno della categoria da cui il post è stato chiamato, piuttosto che la prima categoria.

devjohn devjohn
19 dic 2013 14:26:29

Scusa, forse non ho capito bene, cosa intendi con 'da quale post è stato chiamato'?

Gaffen Gaffen
19 dic 2013 14:27:36

Semplice-- c'è una pagina di categoria per cat-1 che mostra tutti i suoi post, ad esempio demo. Quando apro il post demo da questa pagina voglio che si apra con layout-1. E se apro il post demo dalla pagina della categoria cat-2, allora deve aprirsi con layout-2.

devjohn devjohn
19 dic 2013 14:41:53

Posso farlo usando la query string ma preferirei evitare a causa di problemi con l'URL.

devjohn devjohn
19 dic 2013 14:45:40

Suggerirei di impostare la categoria come post data utilizzando un form (anche se non sarebbe semantico) o javascript - anche se non funzionerà con javascript disabilitato, almeno si degraderebbe in modo elegante.

Potresti anche voler riformulare la tua domanda per riflettere meglio ciò che desideri - cambiare il layout di un post in base alla categoria da cui è stato visitato - così avrai maggiori probabilità di ottenere risposte.

Gaffen Gaffen
19 dic 2013 15:22:43

Layout del post affinché un post appaia in questo formato (solo nell'aspetto) o in un altro formato.. Se uso javascript verrebbe comunque inserita una query string nell'URL.

devjohn devjohn
20 dic 2013 07:58:25

L'unica altra cosa che mi viene in mente di suggerire è utilizzare variabili di sessione per salvare temporaneamente l'ultima pagina di categoria visitata, e poi se il post attualmente visualizzato è in quella categoria cambiare il layout.

Gaffen Gaffen
20 dic 2013 11:46:57

Grazie per la risposta e il suggerimento. Ma è possibile farlo usando qualche trucco di WordPress piuttosto che PHP?

devjohn devjohn
24 dic 2013 07:00:01
Mostra i restanti 3 commenti
0

Come menzionato da Gaffen: "cambiare il layout dei post in base alla categoria da cui è stato visitato"

Per prima cosa, nella pagina del template della categoria del tuo tema (es. category.php)

ottieni l'ID della categoria e memorizzalo nell'opzione Transient di WordPress.

global $wp_query;

//ottieni l'ID della categoria (o nome, slug) e memorizzalo nell'API transient
$categoryId = $wp_query->queried_object->cat_ID;
set_transient( 'category_id_visited', $categoryId, 1 * HOUR_IN_SECONDS );

ora su single.php o nella pagina del template di visualizzazione del singolo post.

recupera il valore da Transient e modifica la visualizzazione di conseguenza

if ( false === ( $category_id_visited = get_transient( 'category_id_visited' ) ) ) {
    // questo codice viene eseguito quando non è impostato un transient valido
    //non fare nulla per ora
} else {
    echo 'Sei arrivato visitando la categoria: ' . $category_id_visited;
    //elimina il transient se necessario, altrimenti scadrà automaticamente
    delete_transient( 'category_id_visited' );
}

Spero sia d'aiuto.

21 mar 2014 11:39:51
0

Nel tuo single.php potresti usare ad esempio

if(has_category('layout-1')) {
  // esegui qui le operazioni per la categoria layout-1
} elseif (has_category('layout-2')) {
  // operazioni per layout-2 qui
} else {
  // operazioni per tutti gli altri stili/contenuti regolari
}

Ancora meglio, usa get_template_part così non riempi il tuo single.php con ogni tipo di codice superfluo.

17 mar 2015 13:32:17
1

Per prima cosa ottieni l'ID della categoria:

$cat_id = get_queried_object_id();

Poi ottieni il nome della categoria:

$cat_name = get_cat_name($cat_id)

Quindi puoi decidere in base al nome della categoria cosa fare:

if ($cat_name == 'Cat 1') {
   // ... url = layout-1
} elseif ($cat_name == 'Cat 2') {
   // ... url = layout-2
}
17 mar 2015 17:02:46
Commenti

$cat_id = get_queried_object_id(); recupererà l'ID del post e NON l'ID della categoria quando sei su una pagina di post, come chiesto dall'OP.

Kevin M Kevin M
15 feb 2016 23:30:22