谷歌搜索了几个小时,找不到解决方案。
在我的theme 你有一个Browse
从我正在处理的自定义帖子类型中提取所有视频的页面。如果用户制作了30个类别,那么我希望用户能够使用顶部列出的类别按钮对视频进行排序。如果他们点击Horror
我想循环显示所有Horror
视频。
如何在此循环中使用类别对视频进行排序?
BROWSE PAGE
我的类别ul li a
<ul class="sort-by-category">
<?
$args = array(
\'orderby\' => \'name\',
\'parent\' => 0
);
$categories = get_categories( $args );
foreach ( $categories as $category ) {
echo \'<li><a class="browse-categories" href="\' . get_category_link( $category->term_id ) . \'">\' . $category->name . \'</a></li>\';
}
?>
</ul>
<?
// Our variables
$numPosts = (isset($_GET[\'numPosts\'])) ? $_GET[\'numPosts\'] : 0;
$page = (isset($_GET[\'pageNumber\'])) ? $_GET[\'pageNumber\'] : 0;
query_posts(array(
\'posts_per_page\' => $numPosts,
\'paged\' => $page,
\'post_type\' => \'theme_video\'
));
// our loop
if (have_posts()) {
while (have_posts()){
the_post();
get_template_part( \'partials/content\', \'browse\' );
}
}
wp_reset_query();
?>
我对如何进行有点迷茫。我尝试过的方法似乎都无法对循环进行排序,我使用的方法已经过时1-2年了。。。
这个网站对我的第一个主题很好,但我不知道如何让这个循环按你选择的类别排序。有什么建议吗?
谢谢
SO网友:Joey Yax
我很难理解这个问题,但我假设您发布的代码片段包含query_posts
在类别、存档或索引模板中,当您跟踪由生成的链接时会调用该模板get_category_link ()
. 如果是,则query_posts
函数重写默认循环,但您不包括要筛选的类别,因此它将获取该帖子类型中的所有帖子。
// Our variables
$numPosts = (isset($_GET[\'numPosts\'])) ? $_GET[\'numPosts\'] : 0;
$page = (isset($_GET[\'pageNumber\'])) ? $_GET[\'pageNumber\'] : 0;
// build query
$args = array(
\'posts_per_page\' => $numPosts,
\'paged\' => $page,
\'post_type\' => \'theme_video\'
);
// get category ID
$cat_id = get_query_var( \'cat\' );
// add category to query if an id is found
if ( $cat_id != \'\' ) {
$cat = get_category ( $cat_id );
$args[\'category\'] = $cat->slug;
}
// go!
query_posts( $args );
另一方面,我建议使用
pre_get_posts
挂钩与
query_posts
作用
SO网友:FlannelBeard
EDIT: 已找到答案,我将其张贴给任何有此问题的其他人。如果你有更好的方法来做到这一点,那么请在下面发表文章,以造福他人。
将此代码放入category.php. 它将自动从URL中获取类别并将其传递给cat => $category_id
并相应地更新循环。
<ul class="sort-by-category">
<?
$args = array(
\'orderby\' => \'name\',
\'parent\' => 0
);
$categories = get_categories( $args );
foreach ( $categories as $category ) {
echo \'<li><a class="browse-categories" href="\' . get_category_link( $category->term_id ) . \'">\' . $category->name . \'</a></li>\';
}
?>
</ul>
<?
// Our variables
$page = (isset($_GET[\'pageNumber\'])) ? $_GET[\'pageNumber\'] : 0;
// grab slug from url
$category_id = get_query_var(\'cat\');
// define args
$args = array(
\'posts_per_page\' => \'36\',
\'paged\' => $page,
\'post_type\' => \'theme_video\',
\'cat\' => $category_id
);
// place args in query
$category_posts = new WP_Query($args);
// our loop
if($category_posts->have_posts()) {
while($category_posts->have_posts()) {
$category_posts->the_post();
get_template_part( \'partials/content\', \'browse\' );
}
}
wp_reset_query();
?>