WordPress show all category page using rewrite rules

WordPress 文章列表我找不到不分類網址耶,我不知道到底有沒有

工作需要,我必須解決它,於是我新增了一個虛擬的網址,用來顯示分類頁,所有類別文章

 https://www.example.com/category/all

用來顯示所有分類頁面,分類 category 的這個路徑支援 WordPress 原生地設定,可以修改它。

新增一個網址 rewrite 規則

/**
 * 新增一個網址 rewrite 規則
 * @author v123.tw <ann71727@email.com>
 * @link https://v123.tw/wordpress-get_posts-exclude-uncategorized/
 */
function rewrite_category_all_rule() {
    $category_base = get_option( 'category_base' ); // 尊重WordPress原生設定
    $category_base = (empty($category_base))?$category_base:'category';
	add_rewrite_rule('^(.*)'.$category_base.'/all?', 'index.php?category_name=all', 'top');
}
add_action('init', 'rewrite_category_all_rule',10);

這邊有個很重要的一點,建立完重寫規則,必須要到WordPress後台 設定 > 永久連結 > 儲存設定,重新建立重寫規則,如果是寫在插件上,可以使用另一種方式,在啟動插件的時候執行 flush_rewrite_rules() 重新建立重寫規則,但是請不要寫把 flush_rewrite_rules() 寫在新增重寫規則程式碼的後端,這樣會變成每刷新一次就重新建立一次重寫規則,這當然會影響效能

修改主題分類頁 main query

/**
 * 修改主題 main_query
 */
function v123_customize_category_all_query( $query ) {
    if( ! is_admin() && $query->is_main_query() && $query->get('category_name')=='all' ) {
        $query->set( 'category_name', '');
    }
}
add_action( 'pre_get_posts', 'v123_customize_category_all_query' );

設定分類對應模板

/**
 * 設定全部分類對應模板
 */
function v123_template_category_all( $original_template ) {
    global $wp_query;
    if(get_query_var('category_name')==="all"){
        $original_template = get_category_template();
    }
    return $original_template;
}
add_filter( 'template_include', 'v123_template_category_all' );

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料