我遇到了一个问题,即使该页面最初使用" All"在下拉菜单中选择,如果你去一个类别(呈现罚款),然后回到"全部"在下拉列表中,您会看到一个帖子。这不是最初显示的具有所有类别的页面。我需要页面基本上为" All"呈现相同的页面。而不管。有什么想法吗?
wp_dropdown_categories('show_option_all=All&hide_empty=0&show_count=0&orderby=name&echo=0');
答案 0 :(得分:0)
上周我在WPSE上做了一个类似的帖子,似乎这两个可能是相关的。为方便起见,这里是帖子
以下是您使用的代码的变体。我在这里使用get_categories()
来实现相同的目标。我不得不稍微调整我的代码以使其符合您的需要。
您必须进行其他修改才能实现此目的。当您选择All Categories
选项时,您将进入一个页面,显示您需要显示的内容。您必须在此页面手动创建
您可能知道Wordpress中没有索引存档页面。 (查看this post我在同一主题上完成了)。这意味着,domain.com/category/
返回404.
因此,要使这一切正常运行,您必须制作page.php的副本,将其重命名为page-category.php(有关如何创建自定义页面,请参阅codex模板),打开它,创建custom query以显示访问此页面时要显示的内容
您现在需要在后端创建页面。我建议您使用slu 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>';
}
?>