man*_*165 8 wordpress wordpress-theming taxonomy custom-post-type
我有一个taxonomy-taxonomy.php页面,需要如下所示:
自定义帖子类型标题(资源)
自定义分类1(资源类型)
资源类型第1期(白皮书)
白皮书帖子1
白皮书帖子2
白皮书帖子3
资源类型第2期(视频)
视频发布1
视频帖子2
视频发布3
试图理解Wordpress 3.0的所有新文档,但它只是让我更加困惑,因为它似乎与2.8混在一起.
没有必要将对象转换为数组,您可以完美地处理对象而不会有太多麻烦.什么是好奇(至少对我来说),是你得到这样的东西:
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
)
)
Run Code Online (Sandbox Code Playgroud)
它基本上是一个对象数组,所以你要这样对待它们.例如,如果我想要第一个的名称:
$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');
echo $myterms[0]->name;
Run Code Online (Sandbox Code Playgroud)
如果您需要遍历元素,您仍然可以使用foreach();.
foreach ($myterms as $term) { ?>
<li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php
} ?>
Run Code Online (Sandbox Code Playgroud)
这样您就可以发布分类中的文章了.
对于自定义帖子类型,您必须创建一个这样的循环:
$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;
Run Code Online (Sandbox Code Playgroud)
然后,您可以为每个分类/术语创建多个循环,每个循环:).
如果你想变得更加花哨(不想重复自己一百次),你可以在第一个循环中包含第二个循环并将变量分配给分类法(资源即)和它拥有的术语(视频)(来自你的例子只是最后一个).这个想法是你会有一个普通的(典型的)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; ?>
Run Code Online (Sandbox Code Playgroud)
显然你也可以做相反的事情,为单模板自定义类型创建正常循环(看起来你只有一个),里面包含所有自定义术语.
不是很优雅,但这是我能想到的最佳方式:P.希望有人能理解这一点,听起来令人困惑.
也许有可能使用一些回调函数?
嘿 manon1165 ,我实际上刚刚完成了这个。非常痛苦,希望我的代码片段能有所帮助!
我制作了一个自定义页面模板。并做了一些类似的事情
<?php $categories = get_terms('taxonomy-name', 'orderby=name&hide_empty=0'); $cats = object_to_array($categories); ?>
Run Code Online (Sandbox Code Playgroud)
现在,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;
}
Run Code Online (Sandbox Code Playgroud)
我做到了
<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>
Run Code Online (Sandbox Code Playgroud)
希望有帮助!
| 归档时间: |
|
| 查看次数: |
8141 次 |
| 最近记录: |