Cum să obții categoriile copil ale unui articol dat

20 oct. 2011, 21:48:11
Vizualizări: 18.6K
Voturi: 2

Cum pot obține numele categoriilor copil ale unui articol oarecare?

De exemplu, am slug-ul categoriei - 'motociclete' și am subcategorii pentru aceasta. Așadar, trebuie să obțin numele subcategoriei fiecărui articol care se află în categoria cu slug-ul motociclete. Y2ok

5
Comentarii

Poți explica relevanța schimbării slug-ului de categorie, în loc să fie doar o întrebare despre obținerea categoriilor copil ale unei categorii părinte?

Chip Bennett Chip Bennett
20 oct. 2011 22:08:07

Bună, în mod normal slug-ul categoriei este 'category', dar pentru mine este 'motociclete', iar în interiorul slug-ului de categorie 'motociclete' am subcategorii. În subcategorii am articole și trebuie să obțin numele subcategoriei cu $cat = get_the_category($post->ID); $category_name = $cat->name;, dar nu pot pentru că returnează un array gol.

Y2ok Y2ok
20 oct. 2011 22:18:34

Încă nu înțeleg. Ce înțelegi prin "în mod normal slug-ul categoriei este 'category'"? Vorbești cumva despre baza URL-ului pentru categorii?

Chip Bennett Chip Bennett
20 oct. 2011 22:30:24

Bună, da exact.

Y2ok Y2ok
20 oct. 2011 22:32:41

Ăă... asta e diferit de comentariul tău de mai jos. Deci, dacă răspunsul meu editat nu răspunde la întrebarea ta, încă sunt confuz în legătură cu ce anume ai nevoie.

Chip Bennett Chip Bennett
20 oct. 2011 22:41:49
Toate răspunsurile la întrebare 2
8
12

Pentru a obține categoriile copil ale unei categorii părinte date prin slug, folosește o combinație între get_category_by_slug() și get_categories().

Această din urmă funcție va returna un array de obiecte de categorie care se potrivesc cu argumentele de interogare specificate; prima va returna ID-ul unei categorii, având slug-ul acesteia.

De exemplu:

<?php
$motorbike_child_cat_args = array(
    'child_of' => get_category_by_slug( 'motorbikes' )
);

$motorbike_child_cats = get_categories( $motorbike_child_cat_args );
?>

Apoi, poți face orice dorești cu array-ul tău de obiecte de categorie. De exemplu, pentru a obține un array cu numele categoriilor copil:

<?php
$motorbike_child_cat_names = array();
foreach ( $motorbike_child_cats as $child_cat ) {
    $motorbike_child_cat_names[] = $child_cat->name;
}
?>

Serios, ce faci cu aceste date depinde de tine în acel moment.

EDITARE

Dacă trebuie să obții categoriile copil ale unei articole arbitrare, atunci poți folosi get_the_category().

Dacă ești în interiorul Loop-ului, apelează pur și simplu get_the_category(); dacă ești în afara Loop-ului, atunci trebuie să transmiți ID-ul articolului către apel: get_the_category( $id ).

De exemplu, pentru a construi un array cu numele categoriilor copil (indiferent de părinte) ale articolului curent:

<?php
$my_post_categories = get_the_category();

$my_post_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
    if ( 0 != $post_cat->category_parent ) {
        $my_post_child_cats[] = $post_cat->cat_name;
    }
}
?>

Sau, de exemplu, pentru a construi un array cu numele categoriilor copil 'motorbikes' ale articolului curent:

<?php
$my_post_categories = get_the_category();

$motorbikes_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
    if ( 'motorbikes' == $post_cat->category_parent ) {
        $motorbikes_child_cats[] = $post_cat->cat_name;
    }
}
?>

Este mai aproape de ceea ce cauți?

EDITARE 2

Dacă ai nevoie doar să obții toate categoriile articolului tău:

<?php
$all_post_categories = get_the_category();

$my_post_cats = array();
foreach ( $my_post_categories as $post_cat ) {
    $my_post_cats[] = $post_cat->cat_name;
}
?>

Asta îți va oferi toate categoriile pentru articolul curent. Nu am nicio idee cum slug-ul categoriei motorbikes se încadrează în această întrebare.

20 oct. 2011 22:16:37
Comentarii

Bună, mulțumesc, dar cum pot obține numele subcategoriei pentru $post->ID, deoarece $cat = get_the_category($post->ID); $category_name = $cat->name; nu funcționează.

Y2ok Y2ok
20 oct. 2011 22:23:08

Deci, încerci să obții categoriile copil ale unei articole arbitrare, mai degrabă decât categoriile copil ale unei categorii cunoscute, 'motociclete'?

Chip Bennett Chip Bennett
20 oct. 2011 22:33:08

Bună, da, mă poți ajuta cu asta?

Y2ok Y2ok
20 oct. 2011 22:36:56

Vezi răspunsul editat.

Chip Bennett Chip Bennett
20 oct. 2011 22:40:22

Bună, da dar cum pot să-l afișez? Dacă fac ceva de genul - echo $motorbikes_child_cats[0]; sau echo $my_post_child_cats[0]; va afișa doar gol.

Y2ok Y2ok
20 oct. 2011 22:46:40

Ce primești cu <?php var_dump( $my_post_child_cats ); ?>? Dacă este gol, ești sigur că postul tău are de fapt categorii copil?

Chip Bennett Chip Bennett
20 oct. 2011 22:49:45

Bună, returnează NULL, deci înseamnă că nu am subcategorii? Dacă da, atunci cum pot obține numele categoriei pentru postarea mea, dacă slug-ul categoriei este 'motociclete'?

Y2ok Y2ok
20 oct. 2011 22:55:49

Poți să explici, de unde naiba provine "slug-ul categoriei este 'motocicleta'"?

Chip Bennett Chip Bennett
20 oct. 2011 22:57:35
Arată celelalte 3 comentarii
1
// Obține ID-urile categoriilor asociate postării curente
$categories = wp_get_post_categories( get_the_ID(), array('fields' => 'ids') );

// Argumentele pentru interogarea termenilor de taxonomie
$arguments = array(
    'taxonomy'    => 'category', // Taxonomia 'categorie'
    'childless'   => true,       // Doar categorii fără subcategorii
    'include'     => $categories, // Include doar categoriile asociate postării
);

// Obține categoria selectată pe baza argumentelor
$selected_category = get_terms( $arguments );
28 iul. 2016 21:40:36
Comentarii

Te rog să editezi răspunsul tău și să adaugi o explicație: de ce ar putea rezolva problema? Vezi [răspuns]

fuxia fuxia
28 iul. 2016 21:58:37