Wordpress下拉类别所有链接到单一

时间:2014-10-29 05:59:01

标签: php wordpress drop-down-menu categories

我遇到了一个问题,即使该页面最初使用" All"在下拉菜单中选择,如果你去一个类别(呈现罚款),然后回到"全部"在下拉列表中,您会看到一个帖子。这不是最初显示的具有所有类别的页面。我需要页面基本上为" All"呈现相同的页面。而不管。有什么想法吗?

wp_dropdown_categories('show_option_all=All&hide_empty=0&show_count=0&orderby=name&echo=0');

1 个答案:

答案 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>';
    }


?>