Obține ID-ul categoriei curente din pagina de articol WordPress

19 dec. 2013, 13:17:46
Vizualizări: 24.6K
Voturi: 2

Am o problemă în obținerea ID-ului categoriei pentru articolul curent. Folosim <?php get_the_category( $id ) ?> pentru a afla categoria articolului curent. Dacă un articol precum 'demo' are 2 categorii, cum ar fi cat1 și cat2. Când deschid pagina cat1 și apoi merg la pagina demo, vreau un aspect diferit.. iar când deschid pagina cat2 și apoi merg la pagina demo, vreau să deschid această pagină demo cu alt aspect. Acest lucru poate fi făcut doar când voi putea identifica.. din ce categorie a fost accesat articolul.. dar cum??

1
Comentarii

Nu știu dacă ai reușit să rezolvi această problemă, dar tocmai am terminat de scris o funcție extinsă pentru navigarea între postări pentru asta, verifică și răspunsul de la @G.M. la întrebarea mea inițială aici. Poți, prin combinarea codului din ambele răspunsuri, să afli din ce categorie provine postarea individuală și apoi să folosești filtrul single_template pentru a seta un șablon specific

Pieter Goosen Pieter Goosen
8 ian. 2015 09:13:26
Toate răspunsurile la întrebare 5
0

WordPress are o funcție wp_get_referer, care obține URL-ul de referință din antetul HTTP. Deci, dacă navighezi de la o arhivă de categorii la un articol individual, numele categoriei va fi în mod normal inclus în acel URL. Aceasta înseamnă că poți începe fișierul single.php astfel:

$refer = wp_get_referer();
if (strpos($refer, 'category/cat1') != false) {... fă ceva ...}
elseif (strpos($refer, 'category/cat2') != false) {... fă altceva ...}
else {... fă ceva implicit ...}

În funcție de configurația ta, această soluție poate necesita unele ajustări, dar sper că ideea generală este clară.

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

Acest cod va returna un array de categorii, din care poți obține ID-ul, astfel:

$categories[0]-> term_id;

Aceasta va fi prima categorie din array dacă există mai multe categorii.

Informații despre utilizare pot fi găsite în codex

19 dec. 2013 14:08:58
Comentarii

Mulțumesc pentru această informație. Dar am nevoie de categoria din care a fost apelat articolul, nu de prima categorie.

devjohn devjohn
19 dec. 2013 14:26:29

Scuze, poate nu am înțeles exact, ce înțelegi prin "din care a fost apelat articolul"?

Gaffen Gaffen
19 dec. 2013 14:27:36

Simplu -- există o pagină de categorie pentru cat-1 și afișează toate articolele sale, de ex. demo. Când deschid articolul demo de pe această pagină, vreau să se deschidă cu layout-1. Dacă deschid articolul demo de pe pagina categoriei cat-2, atunci trebuie să se deschidă cu layout-2.

devjohn devjohn
19 dec. 2013 14:41:53

Pot face asta folosind un șir de interogare, dar nu vreau să folosesc asta din cauza problemelor cu URL-ul.

devjohn devjohn
19 dec. 2013 14:45:40

Aș sugera să setezi categoria ca date ale postării folosind fie un formular (deși asta nu e semantic corect) fie JavaScript - deși nu va funcționa fără JavaScript, cel puțin va avea o degradare grațioasă.

De asemenea, ai putea să reformulezi întrebarea pentru a reflecta mai bine ceea ce dorești - modificarea aspectului unei postări în funcție de categoria din care a fost vizitată - pentru a avea șanse mai mari să primești răspunsuri.

Gaffen Gaffen
19 dec. 2013 15:22:43

Aspectul postării, adică o postare să arate în acest format (doar aspectul) sau alt format. Dacă folosesc JavaScript, atunci acesta va adăuga și un șir de interogare în URL.

devjohn devjohn
20 dec. 2013 07:58:25

Singurul alt lucru la care mă pot gândi să sugerez este folosirea variabilelor de sesiune pentru a salva temporar pagina de categorie care a fost vizitată ultima dată, iar apoi dacă articolul curent vizualizat se află în acea categorie, să schimbăm layout-ul.

Gaffen Gaffen
20 dec. 2013 11:46:57

Mulțumesc pentru răspuns și sugestie. Dar este posibil să facem asta folosind niște trucuri din WordPress în loc de PHP?

devjohn devjohn
24 dec. 2013 07:00:01
Arată celelalte 3 comentarii
0

După cum a menționat Gaffen: "schimbarea aspectului unui articol în funcție de categoria din care a fost vizitat"

Mai întâi în template-ul de categorie din tema ta (de exemplu category.php)

obține ID-ul categoriei și stochează-l în opțiunea WordPress Transient.

global $wp_query;

//obține ID-ul categoriei (sau numele, slug-ul) și stochează în API-ul Transient
$categoryId = $wp_query->queried_object->cat_ID;
set_transient( 'category_id_visited', $categoryId, 1 * HOUR_IN_SECONDS );

acum în single.php sau în template-ul de afișare al articolului individual.

obține valoarea din Transient și modifică afișarea în consecință

if ( false === ( $category_id_visited = get_transient( 'category_id_visited' ) ) ) {
    // acest cod rulează când nu există un transient valid setat
    //nu face nimic deocamdată
} else {
    echo 'Ai ajuns vizitând categoria: ' . $category_id_visited;
    //șterge transientul dacă este necesar, altfel va expira automat
    delete_transient( 'category_id_visited' );
}

Sper că te ajută.

21 mar. 2014 11:39:51
0

În fișierul tău single.php poți folosi de exemplu

if(has_category('layout-1')) {
  // faci aici chestii pentru categoria layout-1
} elseif (has_category('layout-2')) {
  // aici faci chestii pentru layout-2
} else {
  // aici faci chestii pentru toate celelalte stiluri/chestii normale
}

Și mai bine, folosește get_template_part ca să nu umpli single.php cu tot felul de cod inutil.

17 mar. 2015 13:32:17
1

Mai întâi obține ID-ul categoriei:

$cat_id = get_queried_object_id();

Apoi obține numele categoriei:

$cat_name = get_cat_name($cat_id)

Apoi poți decide în funcție de numele categoriei ce să faci:

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

$cat_id = get_queried_object_id(); va returna ID-ul articolului și NU ID-ul categoriei atunci când vă aflați pe o pagină de articol, exact cum a întrebat OP.

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