对于我正在处理的项目,我希望为我的帖子实现以下永久链接结构:
domain.com/special/my-post-slug
其中special是自定义分类。
我做了什么:
<?php
// in functions.php
add_filter('post_link', 'specials_permalink', 10, 3);
add_filter('post_type_link', 'specials_permalink', 10, 3);
function specials_permalink($permalink, $post_id, $leavename) {
if (strpos($permalink, '%specials%') === FALSE) {
return $permalink;
}
$post = get_post($post_id);
if (!$post) {
return $permalink;
}
$terms = wp_get_object_terms($post->ID, 'specials');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) {
$taxonomy_slug = $terms[0]->slug;
} else {
$categories = wp_get_post_categories($post_id->ID, array('fields' => 'all'));
if(isset($categories[0])) {
$taxonomy_slug = $categories[0]->slug;
} else {
$taxonomy_slug = 'general';
}
}
$permalink = str_replace('%specials%', $taxonomy_slug, $permalink);
return $permalink;
}
这段代码工作得很好,但是因为我将特价添加到帖子的永久链接结构中,我的页面不再加载。它们都会产生404.只要我从永久链接结构中删除%specials%,它们就会再次运行。
调试时我发现Wordpress与我的网址匹配如下:
请求:
FR /我的段塞
查询字符串:
LANG = FR&安培;特别=我的段塞
匹配重写规则:
?(FR | NL |烯)/([^ /] +)/ $
匹配重写查询:
LANG = FR&安培;特别=我的段塞
但它必须是&#39; pagename&#39;特别的&#39;。我已经尝试重新映射一些网址并添加自定义重写规则和类似的东西,但我找不到任何解决方案。最奇怪的部分是,根据WP Codex,永久链接结构仅适用于帖子和档案页面,而不适用于页面。链接到链接的我的函数在加载页面时不会被触发。但由于某些原因,Wordpress认为我的网页是特殊的。
我试图尽可能多地添加信息,但是如果缺少请求请求。
答案 0 :(得分:-1)
如果您更改“设置”下的永久链接结构 - &gt;固定链接,你为所有帖子类型改变它(我认为)。
我的建议:默认情况下保留永久链接结构(/%postname%/
)并在过滤器功能中添加帖子类型检查:
function specials_permalink($permalink, $post_id, $leavename) {
if ( 'post' != get_post_type( $post_id ) ) {
return $permalink;
}
// rest of your code
}