个性化阅读
专注于IT技术分析

WordPress-按条项列出的自定义帖子类型的自定义分类页面

我有一个taxonomy-taxonomy.php页面, 需要如下所示:

自定义帖子类型标题(资源)

自定义分类法1(资源类型)

资源类型第1条款(白皮书)

  • 白皮书发布1

    白皮书发布2

    白皮书发布3

资源类型术语2(视频)

  • 影片发布1

    影片发布2

    影片发布3

试图理解所有有关Wordpress 3.0的新文档, 但是这使我更加困惑, 因为它似乎与2.8混为一谈。


#1


不必将对象转换为数组, 可以轻松处理对象。好奇(至少对我而言)是, 你得到这样的东西:

  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循环, 该循环仅限于自定义的post-type和每个术语。

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。希望有人能理解这一点, 听起来令人困惑。

也许可以使用某些回调函数?


#2


嘿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>

希望有帮助!


#3


这对我来说很好:-

<?php
    $custom_terms = get_terms('custom_taxonomy');

foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array('post_type' => 'custom_post_type', 'tax_query' => array(
            array(
                'taxonomy' => 'custom_taxonomy', 'field' => 'slug', 'terms' => $custom_term->slug, ), ), );

     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        echo '<h2>'.$custom_term->name.'</h2>';

        while($loop->have_posts()) : $loop->the_post();
            echo '<a href="'.get_permalink().'">'.get_the_title().'</a><br>';
        endwhile;
     }
}
>?
赞(0)
未经允许不得转载:srcmini » WordPress-按条项列出的自定义帖子类型的自定义分类页面

评论 抢沙发

评论前必须登录!