下面是您使用的代码的变体。我正在使用get_categories()
在这里实现同样的目标。我不得不稍微调整我的代码,使其符合您的需要。
不过,您还需要进行其他修改才能使其正常工作。当您选择All Categories
选项,您将进入一个页面,该页面将显示您需要显示的内容。此页您必须manually 创造
您可能知道,Wordpress中没有索引存档页。(退房this post 我在同一个主题上做过。这意味着,domain.com/category/
返回404。
所以,要使这些都起作用,您必须制作一份page的副本。php,将其重命名为类似于页面类别的内容。php(参见codex 关于如何创建自定义页面模板),打开它,创建custom query 显示访问此页面时要显示的内容
现在需要在后端创建页面。我建议你用鼻涕虫category
所以当你访问domain.com/category/
, 将显示此页面。记住,你cannot 为此页面创建子页面,它将打破层次结构。我还编写了要转到的代码domain.com/category/
什么时候All Categories
已选定
除此之外,代码应该可以正常工作。您只需要检查URL结构,并在中设置参数get_categories()
满足您的需求。这是下拉代码。
<select name="event-dropdown" onchange=\'document.location.href=this.options[this.selectedIndex].value;\'>
<option value=""><?php echo esc_attr(__(\'Select Category\')); ?></option>
<?php
$option = \'<option value="\' . get_option(\'home\') . \'/category/">All Categories</option>\'; // change category to your custom page slug
$categories = get_categories();
foreach ($categories as $category) {
$option .= \'<option value="\'.get_option(\'home\').\'/category/\'.$category->slug.\'">\';
$option .= $category->cat_name;
$option .= \' (\'.$category->category_count.\')\';
$option .= \'</option>\';
}
echo $option;
?>
</select>
EDIT
实际上,我有一个主意,会派上用场的。我最近回答了在一个列表中显示所有类别的问题,其中包含特定类别下的所有帖子标题。同样的想法也可以用于您的页面类别。php模板。
当用户选择All Categories
选项,他们将被带到此页面,该页面将列出所有类别和帖子标题。
以下是完整的代码:(有关代码的解释,请参阅我的帖子here)
在您的功能中。php
add_action( \'transition_post_status\', \'publish_new_post\', 10, 3 );
function publish_new_post() {
delete_transient( \'category_list\' );
}
在需要显示列表的模板中
<?php
if ( false === ( $q = get_transient( \'category_list\' ) ) ) {
$args = array(
\'posts_per_page\' => -1
);
$query = new WP_Query($args);
$q = array();
while ( $query->have_posts() ) {
$query->the_post();
$a = \'<a href="\'. get_permalink() .\'">\' . get_the_title() .\'</a>\';
$categories = get_the_category();
foreach ( $categories as $key=>$category ) {
$b = \'<a href="\' . get_category_link( $category ) . \'">\' . $category->name . \'</a>\';
}
$q[$b][] = $a; // Create an array with the category names and post titles
}
/* Restore original Post Data */
wp_reset_postdata();
set_transient( \'category_list\', $q, 12 * HOUR_IN_SECONDS );
}
foreach ($q as $key=>$values) {
echo $key;
echo \'<ul>\';
foreach ($values as $value){
echo \'<li>\' . $value . \'</li>\';
}
echo \'</ul>\';
}
?>