Wordpress - Пользовательская страница таксономии со списком пользовательских типов записей по терминам - PullRequest
8 голосов
/ 29 июля 2010

У меня есть страница taxonomy-taxonomy.php, которая должна выглядеть так:

ПОЛЬЗОВАТЕЛЬСКИЙ НАЗВАНИЕ ТИПА (РЕСУРСЫ)

Пользовательская таксономия 1 (типы ресурсов)

Тип ресурса, термин 1 (официальные документы)

  • Сообщение White Paper 1

    Белая книга пост 2

    Почтовая бумага 3

Тип ресурса, термин 2 (видео)

  • Видео пост 1

    Видео пост 2

    Видео пост 3

Пытался разобраться во всей новой документации для Wordpress 3.0, но это только запутало меня, так как кажется, что он перепутан с 2.8.

Ответы [ 2 ]

6 голосов
/ 27 сентября 2010

Нет необходимости преобразовывать объект в массив, вы можете отлично работать с объектом без особых хлопот. Что любопытно (по крайней мере для меня), так это то, что вы получаете что-то вроде этого:

  Array
  (
      [0] => stdClass Object
          (
              [term_id] => 7
              [name] => Magister comunicaciones aplicadas
              [slug] => magister-comunicaciones-aplicadas
              [term_group] => 0
              [term_taxonomy_id] => 7
              [taxonomy] => linea-de-estudio
              [description] => 
              [parent] => 0
              [count] => 4
          )

      [1] => stdClass Object
          (
               [term_id] => 8
               [name] => Engagement marketing
               [slug] => engagement-marketing
               [term_group] => 0
               [term_taxonomy_id] => 8
               [taxonomy] => linea-de-estudio
               [description] => 
               [parent] => 0
               [count] => 5
          )
  )

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

$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');    
echo  $myterms[0]->name;

Если вам нужно перебрать элементы, вы все равно можете использовать foreach();.

foreach ($myterms as $term) { ?>
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php
} ?>

Таким образом, вы можете публиковать статьи из своей таксономии.

Для пользовательских типов записей вам нужно создать цикл, подобный следующему:

$args = array(
    'post_type' => 'post-type-name',
    'taxonomy' => 'term'
    //for example
    //'resources' => 'videos'
);

//  assigning variables to the loop
global $wp_query;
$wp_query = new WP_Query($args);

// starting loop
while ($wp_query->have_posts()) : $wp_query->the_post();

the_title();
blabla....

endwhile;

Затем вы можете создать несколько циклов по одному для каждой таксономии / термина:).

Если вы хотите получить еще больше фантазий (не хотите повторяться сто раз), вы можете включить второй цикл в первый и назначить переменные таксономии (ресурсы, то есть) и термины, которые она имеет (видео ) (из вашего примера только последний). Идея состоит в том, что у вас будет обычный (типичный) цикл wordpress, ограниченный пользовательским типом записи и каждый из терминов.

foreach ($myterms as $term) : ?>
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php

        $term_name = $term->slug;

        $args = array(
        'post_type' => 'post-type-name',
        'taxonomy' => "$term_name"
        );

   //  assigning variables to the loop
   global $wp_query;
   $wp_query = new WP_Query($args);

   // starting loop posting only
   while ($wp_query->have_posts()) : $wp_query->the_post();

   the_title();
   blabla....

   endwhile;

endforeach; ?>

Очевидно, что вы можете сделать и обратное, создать нормальный цикл для пользовательского типа с одним шаблоном (похоже, у вас есть только один), и внутри он содержит все пользовательские термины.

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

Может быть, это возможно с какой-нибудь функцией обратного вызова?.

1 голос
/ 22 сентября 2010

Эй, manon1165, я на самом деле только что достиг этого. Была огромная боль, надеюсь, мой фрагмент кода поможет!

Я сделал пользовательский шаблон страницы. И сделал что-то вроде

<?php $categories = get_terms('taxonomy-name', 'orderby=name&hide_empty=0'); $cats = object_to_array($categories); ?>

Теперь просто print_r($cats), и вы увидите массив категорий.

Вам нужно будет преобразовать объект в массив, я сделал это с.

function object_to_array($data) 
{
  if(is_array($data) || is_object($data))
  {
    $result = array(); 
    foreach($data as $key => $value)
    { 
      $result[$key] = object_to_array($value); 
    }
    return $result;
  }
  return $data;
}

Я сделал

<ul id="cat-list">
<?php foreach($cats as $cat) { ?>
  <li><a href="/taxonomy-name/<?php echo $cat['slug']; ?>"><?php echo $cat['name']; ?> (<?php echo $cat['count']; ?>)</a><br><?php echo $cat['description']; ?></li>
<?php } ?>
</ul>

Надеюсь, это поможет!

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