我想得到一些帮助,将我网站上的所有帖子按类别和子类别发布到博客卷中。
我希望看到显示的最终结果HTML如下:
<div id="content">
<div id="category1">
<ul id="posts">
<li>post1</li>
<li>post2</li>
<li>post3</li>
</ul><!-- #posts -->
</div><!-- #category1 -->
<div id="category2">
<div id="sub-category1">
<ul id="posts">
<li>post4</li>
<li>post5</li>
<li>post6</li>
</ul><!-- #posts -->
</div><!-- #sub-category1 -->
<div id="sub-category2">
<ul id="posts">
<li>post7</li>
<li>post8</li>
<li>post9</li>
</ul><!-- #posts -->
</div><!-- #sub-category2 -->
</div><!-- #category2 -->
</div><!-- #content -->
我预见到的文件结构如下:
custom-category.php
//此文件将提取类别,对其进行排序,并为#category和#sub category创建容器div,并使用从其循环/查询中调用帖子信息get_template_part( \'content\', get_post_format() );
content.php
//该文件将对ul#帖子和我可能想添加的关于帖子本身的各种信息进行排序
现在我面临的主要问题是,我真的不知道从哪里开始寻找,甚至自己都不知道该怎么做。我一直在看默认值category.php
我觉得它看起来一点也不像。
我试过查看插件,但有些插件只对侧栏中的类别进行排序,其他插件允许为类别创建自定义字段,但评论中提到您不能调用这些值。我尝试了wp\\u list\\u categories();函数尝试从某个地方开始,但它甚至没有列出子类别。
我读过关于创建自己的query_posts();
或get_posts();
但我真的不知道从哪里开始。
由于这并不是一个问题,我想尝试指出这些问题以便于澄清,但请随意添加其他信息,因为我可能会问错问题xD
1-如何启动“循环”以获得类别/子类别
2-如何对类别进行排序并保持子类别嵌套
3-我如何确保这些帖子会落在正确的分区中?以防万一WP做了一些有趣的事。
谢谢你的帮助。
--- Update ---
我一直在互联网上寻找解决方案,我开始有所进展,但还没有完全实现。到目前为止,我得到的是:
<?php
// get all the categories from the database
$args1 = array(
\'orderby\' => \'ID\',
\'order\' => \'ASC\',
\'hierarchical\' => true,
);
$cats = get_categories( $args1 );
// loop through the categries
foreach ($cats as $cat) {
// setup the cateogory ID
$cat_id= $cat->term_id;
// Make a header for the cateogry
echo "<h2>".$cat->name."</h2><p>".$cat->term_id."</p>";
// create a custom wordpress query
$args2 = \'cat=\' . $cat_id . \'&orderby=date&order=DESC&post_per_page=-1\';
query_posts( $args2 );
// start the wordpress loop!
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php // create our link now that the post is setup ?>
<a href="<?php the_permalink();?>"><?php the_title(); ?></a>
<?php echo \'<hr/>\'; ?>
<?php endwhile; endif; // done our wordpress loop. Will start again for each category ?>
<?php } // done the foreach statement ?>
我在上找到了这段代码
this website. 它输出所有类别并将帖子放在它们下面,但它复制父类别的帖子,如下所示:
<h2>Category1</h2><p>2</p>
<a href="http://localhost/wordpress/2013/05/06/test0/">test0</a>
<hr>
<h2>Category2</h2><p>3</p>
<a href="http://localhost/wordpress/2013/05/15/test2/">test2</a>
<hr>
<a href="http://localhost/wordpress/2013/05/14/test1/">test1</a>
<hr>
<h2>Sub-category1</h2><p>4</p>
<a href="http://localhost/wordpress/2013/05/14/test1/">test1</a>
<hr>
<h2>Sub-category2</h2><p>5</p>
<a href="http://localhost/wordpress/2013/05/15/test2/">test2</a>
<hr>
正如您所看到的帖子,test1和test2显示在Category2中,这并不是我想要的,正如在最初的问题(最终结果HTML)中所描述的那样。
我认为我需要添加一个条件语句来验证当前类别是否有子类别,如果没有填充,是否跳转到子类别。但我还在想办法。我还没有达到一个足够舒适的程度,开始尝试实现我打算在最终结果HTML中使用的div,但我觉得我也会有一个问题。在这一点上,我基本上是想学习更多关于这个“循环的东西”,直到我得到一个像样的结果,这将使我能够把我的头围绕整个事情。
我知道这两个链接A 和B 但我仍然是一个新手,还不能真正做到这一点,所以我基本上是在使用代码,我看到代码正在工作,并将努力在我前进的过程中得到改进。
--- Update ---
这似乎可以按照正确的顺序输出帖子,而不会重复父类别。
<?php
// get all the categories from the database
$args1 = array(
\'orderby\' => \'ID\',
\'order\' => \'ASC\',
\'hierarchical\' => true
);
$cats = get_categories( $args1 );
// loop through the categries
foreach ($cats as $cat) {
$cat_id= $cat->term_id;// setup the cateogory ID
$cat_name= $cat->name;// setup the category name
$parent= $cat->category_parent;// setup the category parent
$cat_child= get_term_children( $cat_id, \'category\' ); //the function I had get_category_children(); was deprecated... fixed that
$has_child=bool; //
if( empty($cat_child)) { $has_child= false; }
else { $has_child= true; }
if ( $parent == 0 && $has_child == true ) { //is parent && has child -> post title
echo "<h2>".$cat_name."</h2>";
echo \'<hr/>\'; }
elseif ( $parent == 0 && $has_child == false ) { //is parent && no child -> loop posts
echo "<h2>".$cat_name."</h2>";
// create a custom wordpress query
$args2 = \'cat=\' . $cat_id . \'&orderby=date&order=DESC&post_per_page=-1\';
query_posts( $args2 );
// start the wordpress loop!
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo \'<hr/>\'; ?>
<?php endwhile; endif; }
else { //is child -> loop posts
echo "<h2>".$cat_name."</h2>";
// create a custom wordpress query
$args2 = \'cat=\' . $cat_id . \'&orderby=date&order=DESC&post_per_page=-1\';
query_posts( $args2 );
// start the wordpress loop!
if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo \'<hr/>\'; ?>
<?php endwhile; endif; // done our wordpress loop. Will start again for each category ?>
<?php }} // done the foreach statement ?>
我将其分为三种情况:
is parent and has child
,
is parent but no child
和
is child
. 使我能够到达这里的函数是
get_category_children();
.
现在读代码让我觉得我可以检查一下$cat_child
在主if/elseif语句中直接为空,避免了$has_child
绕一圈跑。