Obține ID-ul categoriei curente din pagina de articol WordPress
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??
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ă.

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

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

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

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.

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

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.

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.

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.

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ă.

Î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.

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
}
