2015-09-18 4 views
1

У меня есть категория «Decouverte» ведьма имеет три подкатегории: «actualité», «vidéo» и «coup de coeur».Категория_slug категории children wordpress

Когда я сортирую сообщения в соответствии с их подкатегориями, все работает, за исключением категории «видео»; category_slug отображает «decouverte».

На моей приборной панели, я вижу это: my posts

подкатегории «Видео» отображается последняя, ​​может быть, именно поэтому он не работает?

Мой код:

 $categories = get_the_category(); 
     $category_slug = $categories[0]->slug; 

     echo $category_slug; 

     if ($category_slug == 'actualite') { ?> 
      <div class="picto_home icone_actualite"></div><?php 
     } 

     elseif ($category_slug == 'video') { ?> 
      <div class="picto_home icone_video"></div><?php 
     } 

     elseif ($category_slug == 'coupdecoeur') { ?> 
      <div class="picto_home icone_coupdecoeur"></div><?php 
     } 

     else { echo "Doesn't work"; } ?> 

И сайт: http://www.overso.me/ Это на правый блок

ответ

2

источник проблемы

Это потому, что у вас есть две категории применяются ко всем сообщениям.

Категории в каждом посте хранятся в алфавитном порядке.

В вашем случае вы принимаете $category_slug = $categories[0]->slug;, что означает:

Возьмите первую категорию имя пробкового из категории массива

Для каждого поста есть:

  1. $categories[0] = Decouverte, $categories[1] = Video потому что D < V
  2. $categories[0] = Actualite, $categories[1] = Decouverte потому A < D
  3. $categories[0] = Coup de coeur, $categories[1] = Decouverte потому C < D

Как заставить его работать, как вы хотите

Ok так вот мой подход к вашей проблеме.

Перед проверкой на $categories[0]->slug, отметьте $categories[0] объект a РОДИТЕЛЬ. Вы можете сделать это путем проверки:

$categories = get_the_category(); 

// Remove parent category object from array if it's on first place 
if($categories[0]->parent == 0){ 
    unset($categories[0]); 
    $categories = array_values($categories); 
} 

Как вы видите, если $categories[0] является Родительская категория (if($categories[0]->parent == 0)), а затем удалить этот результат из массива $categories - unset($categories[0]).

Теперь вы можете просто сбросить индексацию этого массива до 0, позвонив по номеру $categories = array_values($categories).

С этого момента вы можете легко позвонить $categories[0]->slug, потому что на первом месте нет родительской категории.

Полный код:

$categories = get_the_category(); 

// Remove parent category object from array if it's on first place 
if($categories[0]->parent == 0){ 
    unset($categories[0]); 
    $categories = array_values($categories); 
} 

$category_slug = $categories[0]->slug; 

if ($category_slug == 'child-1') { 
    echo "1111"; 
} 

elseif ($category_slug == 'child-2') { 
    echo "2222"; 
} 

elseif ($category_slug == 'child-3') { 
    echo "3333"; 
} 

else { echo "Doesn't work"; } 

Конечно изменения, если утверждения логики данных.

Более общее решение для будущей ссылки

Хорошо, вот некоторое общее решение, которое я написал.

Если вам нужно получить только подкатегории для любого сообщения, для любого количества категорий, применяемых к сообщению, и независимо от того, в какой категории родительская категория будет находиться в массиве категорий, вы должны попробовать это.

Сначала добавьте эту функцию в файл functions.php (или в файл плагина).

function du_get_post_subcategories($post_id){ 
    $categories = get_the_category($post_id); 

    $i = 0; 
    foreach ($categories as $category) { 
     if($category->parent == 0){ 
      unset($categories[$i]); 
     } 
     $i++; 
    } 

    $categories = array_values($categories); 
    return $categories; 
} 

И тогда внутри цикла вы можете вызвать

$subcategories = du_get_post_subcategories($post->ID); 

Если у вас есть идентификатор поста, вы можете назвать это вне цикла, а

$subcategories = du_get_post_subcategories($your_post_id); 

Эта функция возвращает все подкатегории в том же формате, что и get_the_category() функция.

Если вы предоставили массив только с одной родительской категорией. Функция вернет пустой массив.

+0

Я понимаю, но как я могу настроить таргетинг подкатегории автоматически? –

+0

Отредактированный ответ, надеюсь, что это поможет –

+0

Большое спасибо за вашу помощь; вы, вероятно, правы, но я не знаю, как использовать '$ child_categories' для фильтрации:/ Все еще работаю над этим –