grrrbytes
  • 0
Новичок

Вывод таксономий сообщений: не могу заставить работать get_the_taxonomies

  • 0

Я хочу вывести таксономии, связанные с сообщением, в атрибуте «заголовок», поэтому он должен быть неформатированным. Я знаю о get_terms и get_terms_list, но проблема в том, что вам нужно заранее указать, какую таксономию вы хотите получить. Но что, если у вас есть страница архива, на которой перечислены несколько различных типов сообщений… вы не знаете, какие таксономии связаны с определенным сообщением, поскольку вы не знаете, какой это тип сообщения. Итак, я попробовал это:

$posttaxonomies = get_the_taxonomies();
  if ($posttaxonomies) {
    foreach($posttaxonomies as $taxonomy) {
      $thetaxonomies .= $taxonomy->name . ' '; 
  }  
}

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

Share
  1. если вы находитесь в цикле, вы можете использовать get_post_taxonomies так:

    $taxs = get_post_taxonomies($post->ID);
    foreach ($taxs as $tax){
        // $tax holds the taxonomy name so you can
        //use either get_terms or get_terms_list
    }
    

    Обновлять

    Я попытаюсь объяснить лучше, так как вы не знаете, что такое тип сообщения, и вы не можете сказать, какие таксономии связаны с этим типом, вы сначала получаете список таксономий, связанных с каждым сообщением (независимо от того, какой тип сообщения есть) вот так:

    $taxs = get_post_taxonomies($post->ID);
    

    теперь $taxs — это массив, содержащий имена таксономий, связанных с текущим сообщением в цикле. поэтому мы можем запустить цикл foreach для вывода конкретных терминов для каждой таксономии, используя, например, get_terms или get_terms_list:

     $taxs = get_post_taxonomies($post->ID);
     foreach ($taxs as $tax){
        $before = $tax . ": ";
        echo get_the_term_list( $post->ID, $tax, $before, ' ', '' );
     }
    

    обновление 2

    Что ж, если вы не хотите, чтобы он повторял post_tags, просто проверьте и пропустите его, а что касается получения только терминов, а не форматированного html wp_get_object_terms, вместо этого что- get_the_term_list то вроде:

    $taxs = get_post_taxonomies($post->ID);
    foreach ($taxs as $tax){
        if (!$tax = "post_tags"){ //exclude tags
            print_r(wp_get_object_terms( $post->ID, $tax)); // its an array of the terms
        }
    }
    
    • 0

Оставить ответ

You must login to add an answer.