我正在开发一个有展厅的汽车网站。每个展厅都需要基于其位置的自定义URL。位置(城市和县/州)已作为两个自定义字段插入。例如,如果是位于默西塞德郡利物浦的“展厅A”,其URL如下:-
http://www.domain.com/location/merseyside/liverpool/showroom-a/
我有一个自定义的post类型“Showroom”,它的重写规则设置为false(尽管之前在测试中设置为true)。然而,当我创建有问题的帖子时,出现了一个问题。permalink是指除展厅名称以外的所有内容(即。
http://www.domain.com/location/merseyside/liverpool/). 访问此URL会导致404错误,甚至会在代码末尾添加“showroom-a”(例如)(
http://www.domain.com/location/merseyside/liverpool/showroom-a/), 也会导致404错误。这是我的密码。
function add_rewrite_rules()
{
// Register custom rewrite rules
global $wp_rewrite;
$wp_rewrite->add_rewrite_tag(\'%showroom%\', \'([^/]+)\', \'showroom=\');
$wp_rewrite->add_rewrite_tag(\'%post_custom_data%\', \'([^/]+)\', \'post_custom_data=\');
$wp_rewrite->add_permastruct(\'showroom\', \'location/%post_custom_data%\', false);
}
function permalinks($permalink, $post, $leavename)
{
$no_data = \'no-data\';
$post_id = $post->ID;
if($post->post_type != \'showroom\' || empty($permalink) || in_array($post->post_status, array(\'draft\', \'pending\', \'auto-draft\'))) {
return $permalink;
}
$state = sanitize_title_with_dashes(get_post_meta($post_id, \'state\', true));
$city = sanitize_title_with_dashes(get_post_meta($post_id, \'city\', true));
$data = $state . "/" . $city;
if (!$data) {
$data = $no_data;
}
$permalink = str_replace(\'%post_custom_data%\', $data, $permalink);
return $permalink;
}
add_action(\'init\', \'add_rewrite_rules\');
add_filter(\'post_type_link\', \'permalinks\', 10, 3);
任何想法或帮助都将不胜感激:)
SO网友:Rhys Wynne
我设法解决了这个问题。
基本上,我将permastruct改为:
$wp_rewrite->add_permastruct(\'showroom\', \'location/%state%/%city%/%showroom%\', false);
然后我抓住了state&;城市作为两个独立的变量,使用以下行将其替换为永久性链接结构:
$permalink = str_replace(\'%state%\', $state, $permalink);
$permalink = str_replace(\'%city%\', $city, $permalink);
使用
$state
&;
$city
使用抓取
get_post_meta
从邮局。