首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Wordpress -按术语列出自定义post类型的自定义分类页面

Wordpress -按术语列出自定义post类型的自定义分类页面
EN

Stack Overflow用户
提问于 2010-07-28 22:24:57
回答 3查看 9.1K关注 0票数 8

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

自定义POST类型标题(资源)

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

资源类别1(白皮书)

  • 白皮书第1版

白皮书第2条

白皮书第3版

资源类型2(视频)

  • 视频发布1

视频-帖子2

视频发布3

试图理解Wordpress 3.0的所有新文档,但这只会让我更加困惑,因为它似乎与2.8混淆了。

EN

回答 3

Stack Overflow用户

发布于 2010-09-27 05:50:00

不需要将对象转换为数组,您可以很好地处理对象,而不需要太多麻烦。令人好奇的是(至少对我来说),你得到了这样的东西:

代码语言:javascript
运行
复制
  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
          )
  )

基本上,是一组对象,所以你必须这样对待它们。例如,如果我想要第一个名称:

代码语言:javascript
运行
复制
$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');    
echo  $myterms[0]->name;

如果需要迭代元素,仍然可以使用foreach();

代码语言:javascript
运行
复制
foreach ($myterms as $term) { ?>
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php
} ?>

这样,您就可以从分类法中发布文章。

对于定制的post类型,您必须创建如下所示的循环:

代码语言:javascript
运行
复制
$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;

然后,您可以为每个分类法/术语创建多个循环。

如果您想变得更花哨(不想重复自己100次),您可以在第一个循环中包含第二个循环,并将变量分配给分类法(资源)和它所包含的术语(视频)(从您的示例中,只有最后一个)。其想法是,您将有一个普通的(典型的) wordpress循环,限制在定制的post类型的每一个术语。

代码语言:javascript
运行
复制
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.希望有人能理解这一点,听起来很混乱。

也许可以用一些回调函数吗?

票数 6
EN

Stack Overflow用户

发布于 2010-09-22 02:03:08

嘿,manon1165,我刚刚完成了这件事。是一个巨大的痛苦,希望我的代码片段会有帮助!

我做了一个定制的页面模板。做了一件事

代码语言:javascript
运行
复制
<?php $categories = get_terms('taxonomy-name', 'orderby=name&hide_empty=0'); $cats = object_to_array($categories); ?>

现在,只有print_r($cats)和您将看到类别的数组。

您将需要将对象转换为数组,我是这样做的。

代码语言:javascript
运行
复制
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;
}

我做到了

代码语言:javascript
运行
复制
<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>

希望这能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2019-08-22 05:45:12

这对我来说很好:-

代码语言:javascript
运行
复制
<?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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3358049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档