Получить категорию из произвольного типа сообщения

Я купил тему Wordpress в надежде, что после некоторой настройки кода она достигнет того, чего я хочу.

Теперь у меня есть (как мне кажется) настраиваемый тип сообщения под названием «Portofolio». Как вы можете видеть на рисунке ниже, в нем есть записи портфолио (для всех портфелей) и категории для вышеупомянутых записей портфолио.

введите здесь описание изображения

Я пытаюсь перечислить на странице настраиваемого шаблона все категории портфолио. Пока у меня есть этот код, но он только извлекает записи из портфолио, а не из категорий.

    <?php
//$args = array('post_type' => 'tm_portfolio');
$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'ids'] );
$args = [
    'tax_query' => [
        [
            'taxonomy' => 'tm_portfolio_category',
            'terms' => $term_ids
        ]
    ]
];
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  echo 'List of categories';
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <p><a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
  endwhile;
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>

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

Я выяснил название / ярлык типа сообщения / таксономии, проверив ссылку в панели администратора при добавлении категории (см. Рисунок ниже). введите здесь описание изображения


person Darkkz    schedule 17.04.2016    source источник


Ответы (1)


Я не особо вглядывался в код, но с самого начала вижу, что эта строка неверна.

$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'ids'] );

это должно быть "id"

e.g.

$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'id'] );

ИЗМЕНИТЬ

Извините, это моя ошибка,

Вместо этого вы можете попробовать этот подход

$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'ids'] );

$posts = query_posts( array(
    'post_type' => 'tm_portfolio',
    'tax_query' => array(
        array(
            'taxonomy' => 'tm_portfolio_category',
            'terms'    => $term_ids,
            )
        )
    ));

foreach ($posts as $post) {
   echo 'List of categories';
   ?>
   <p><a href="<?php echo get_permalink($post->ID); ?>" title="Permanent Link to <?php echo the_title_attribute(array('post'=>$post->ID)); ?>">
   <?php echo get_the_title($post->ID); ?>
    </a></p>
   <?php
}
wp_reset_query();

Я бы не рекомендовал использовать в этом случае собственный цикл WordPress для большей гибкости.

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

ИЗМЕНИТЬ

Извините, мне кажется, что я все еще не понимаю первоначальный вопрос.

$terms = get_terms( 'tm_portfolio_category' );

даст вам список условий.

foreach ($terms as $term) {
    ?>
    List of categories
    <p>
        <a href="<?php echo $term->slug; ?>" title="Permanent Link to <?php echo $term->name ?>" ><?php echo $term->name ?></a>
    </p>
    <?php 
}

?>

Ниже это должно дать вам желаемый результат без необходимости создавать другой запрос.

person Richard Miles    schedule 17.04.2016
comment
Спасибо за попытку помочь мне, к сожалению, он по-прежнему возвращает записи, а не категории. - person Darkkz; 17.04.2016
comment
Я постараюсь объяснить. Как показано на первом изображении, у меня есть (как я уже сказал, то, что я предполагаю тип сообщения) Portofolio. Я использую это, чтобы наладить отношения между странами и клубами. Добавляя новую запись в портфолио (Добавить новую кнопку / Все портфолио), я в основном добавляю Клуб. Все эти клубы будут отсортированы / размещены по странам (которые на самом деле являются категориями). Версия tl; dr будет - portofolio entry = club. Категория портфолио = страна. - person Darkkz; 17.04.2016
comment
Используя это $ terms = get_terms ('tm_portfolio_category'); Мне удалось запросить некоторые категории. Как-то у меня в Wp 7 категорий, но на странице возвращает 4. - person Darkkz; 17.04.2016
comment
Мне удалось показать их все, добавив hide_empty = false. Последняя строка кода для условий: $ terms = get_terms ('tm_portfolio_category', array ('hide_empty' = ›false)); . Большое спасибо :) С этого момента я должен понять, как запрашивать ссылки и так далее, используя кодекс wordpress. - person Darkkz; 17.04.2016