上周我在 WPSE 上发表了类似的帖子,似乎两者可能相关。为方便起见,这里是帖子
这是您使用的代码的变体。我在这里使用get_categories() 来实现相同的目标。我不得不稍微调整我的代码以使其能够满足您的需要。
但是,您必须进行其他修改才能使其正常工作。当您选择All Categories 选项时,您将被带到一个页面,该页面将显示您需要显示的内容。您必须手动创建此页面
您可能知道,Wordpress 中没有索引存档页面。 (查看 this post 我已经完成了相同的主题)。这意味着,domain.com/category/ 返回 404。
因此,要使这一切正常工作,您必须复制 page.php,将其重命名为 page-category.php(请参阅codex,了解如何创建自定义页面模板),打开好了,创建您的custom query 以显示您在访问此页面时想要显示的内容
您现在需要在后端创建您的页面。我建议你使用 slug category 这样当你访问 domain.com/category/ 时,就会显示这个页面。 (请记住,您不能为此页面创建子页面,这会破坏层次结构)。我还将代码转到 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>
编辑
我实际上有一个想法会派上用场。我最近做了一个关于在列表中显示所有类别以及特定类别下的所有帖子标题的答案。同样的想法也可以用在你的 page-category.php 模板中。
当用户选择All Categories 选项时,他们将被带到此页面,该页面将列出所有类别和帖子标题。
这里是完整的代码:(代码解释见我的帖子here)
在你的functions.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->cat_ID ) . '">' . $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>';
}
?>