我正在进行我的第一个 Wordpress 项目,具有一点 PHP 背景。
我想从帖子中提取内容,其类别与 URL 中的关键字匹配,以避免创建所有页面。
例如:我有一个嵌套类别,该类别为商店-区域-类型-商店。所以我将帖子 URL 设置为 /SHOPS/REGION/TYPE/shop。当我转到 /SHOPS/REGION/TYPE 时,我基本上想为所有商店创建一个存档页面。目前,该 URL 会生成 404 搜索页面。我只能通过转到/category/SHOPS/REGION/TYPE 来实现此目的。有没有办法去掉 URL 中的 /category/ 并仍然达到相同的目标?
我最初考虑创建一个 php 页面来执行此操作,但我不想为所有不同类型创建页面。如果我走这条路线,是否有一种方法可以创建一个运行相同查询的页面来匹配 URL 中 /TYPE/ 中的字段?
提前谢谢您。
您可以在 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');