Wordpress:如何从 URL 中提取类别中的帖子

问题描述 投票:0回答:1

我正在进行我的第一个 Wordpress 项目,具有一点 PHP 背景。

我想从帖子中提取内容,其类别与 URL 中的关键字匹配,以避免创建所有页面。

例如:我有一个嵌套类别,该类别为商店-区域-类型-商店。所以我将帖子 URL 设置为 /SHOPS/REGION/TYPE/shop。当我转到 /SHOPS/REGION/TYPE 时,我基本上想为所有商店创建一个存档页面。目前,该 URL 会生成 404 搜索页面。我只能通过转到/category/SHOPS/REGION/TYPE 来实现此目的。有没有办法去掉 URL 中的 /category/ 并仍然达到相同的目标?

我最初考虑创建一个 php 页面来执行此操作,但我不想为所有不同类型创建页面。如果我走这条路线,是否有一种方法可以创建一个运行相同查询的页面来匹配 URL 中 /TYPE/ 中的字段?

提前谢谢您。

wordpress url post categories archive
1个回答
0
投票

您可以在 WordPress 中通过使用自定义重写规则和自定义模板来根据

URL structure
显示所需的内容来实现此目的。

以下是如何实现这一目标的总体概述:

自定义重写规则:您可以使用WordPress的

add_rewrite_rule()
功能添加自定义重写规则来处理您想要的URL。例如,您可以添加规则来处理类似
/SHOPS/REGION/TYPE
的 URL,并将它们重写为自定义查询。

自定义查询处理:重写 URL 后,您可以创建自定义模板文件(例如,

archive-shops.php
),该文件将处理自定义查询并根据匹配的类别关键字显示帖子。

以下是如何设置自定义重写规则和处理自定义查询的示例:

// Add custom rewrite rules
function custom_rewrite_rules() {
    add_rewrite_rule('^SHOPS/([^/]+)/([^/]+)/?$', 'index.php?shops_region=$matches[1]&shops_type=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rules');

// Add query vars
function custom_query_vars($vars) {
    $vars[] = 'shops_region';
    $vars[] = 'shops_type';
    return $vars;
}
add_filter('query_vars', 'custom_query_vars');

// Custom query handling
function custom_shop_query($query) {
    if (!is_admin() && $query->is_main_query() && $query->is_archive()) {
        $shops_region = get_query_var('shops_region');
        $shops_type = get_query_var('shops_type');
        
        if ($shops_region && $shops_type) {
            $query->set('category_name', "SHOPS/$shops_region/$shops_type");
        }
    }
}
add_action('pre_get_posts', 'custom_shop_query');
© www.soinside.com 2019 - 2024. All rights reserved.