在Wordpress的后端中, 我使用默认的http:// localhost / sitename / example-post /值创建永久链接。
对于自定义帖子类型, 我以这种方式定义了一个自定义子句, 以下是服务示例:
register_post_type( 'service', array(
'labels'=>
array(
'name'=>
__( 'Services' ), 'singular_name' =>
__( 'Service' )
), 'public'=>
true, 'has_archive' =>
true, 'rewrite'=>
array(
'slug'=>
'services', 'with_front' =>
true
), 'supports'=>
array(
'title', 'editor', 'excerpt', 'thumbnail'
), 'taxonomies'=>
array( 'category' ), )
);
它创建服务/职位名称。
我还使用此钩子来创建自定义页面, 以创建自定义页面永久链接:
function custom_base_rules() {
global $wp_rewrite;
$wp_rewrite->
page_structure = $wp_rewrite->
root . '/page/%pagename%/';
}add_action( 'init', 'custom_base_rules' );
它创建页面/职位名称
现在, 我唯一需要做的就是为普通的Wordpress帖子创建另一个自定义的永久链接路径。
因此, 结果世界应该是职位的职位类型:
职位/职位名称
我不能为此使用支持, 因为我已经定义了处理永久链接的默认方法。我已经设法重写了自定义帖子类型和页面的路径…
如何以编程方式在Wordpress中重写普通的帖子类型永久链接路径?
#1你需要分两个步骤进行操作。
首先启用’ with_front’ => true进行内建后注册重写
add_filter(
'register_post_type_args', function ($args, $post_type) {
if ($post_type !== 'post') {
return $args;
}$args['rewrite'] = [
'slug' =>
'posts', 'with_front' =>
true, ];
return $args;
}, 10, 2
);
这样, 像http://foo.example/posts/a-title这样的url起作用, 但是其中生成的链接现在是错误的。
可以通过对内置帖子强制使用自定义永久链接结构来固定链接
add_filter(
'pre_post_link', function ($permalink, $post) {
if ($post->
post_type !== 'post') {
return $permalink;
}return '/posts/%postname%/';
}, 10, 2
);
参见https://github.com/WordPress/WordPress/blob/d46f9b4fb8fdf64e02a4a995c0c2ce9f014b9cb7/wp-includes/link-template.php#L166
#2帖子必须使用默认的永久链接结构, 它们在重写对象中没有与页面或自定义帖子类型相同的特殊条目。如果要以编程方式更改默认结构, 则可以在挂钩中添加类似的内容。
$wp_rewrite->
permalink_structure = '/post/%postname%';
我不清楚你说的是什么意思
我不能为此使用支持, 因为我已经定义了处理永久链接的默认方法。我已经设法重写了自定义帖子类型和页面的路径…听起来好像你在覆盖除帖子以外的所有永久链接的默认行为, 因此, 如果更改默认设置, 则无论如何都可能仅影响帖子。
#3【如何以编程方式更改WordPress的默认帖子永久链接()】GentlemanMax建议的permalink_structure属性对我不起作用。但是我找到了一个有效的方法set_permalink_structure()。请参见下面的代码示例。
function custom_permalinks() {
global $wp_rewrite;
$wp_rewrite->
page_structure = $wp_rewrite->
root . '/page/%pagename%/';
// custom page permalinks
$wp_rewrite->
set_permalink_structure( $wp_rewrite->
root . '/post/%postname%/' );
// custom post permalinks
}add_action( 'init', 'custom_permalinks' );
推荐阅读
- 如何检查当前帖子或类别是否是某个类别的后代()
- 页面加载后如何更改输入值()
- 如何更改Woocommerce购物车图标
- 如何将结帐页面中显示的”下订单”文本更改为”预订”( [关闭])
- 如何使用wp_enqueue_script在foreach中更改顺序()
- 如何使用WordPress Avada子主题将主logo的链接更改为自定义URL而不是首页()
- 如何在WordPress帖子中更改h2,h3,h4的颜色
- 如何在WordPress中居中滑动条
- 如何避免在看起来有效的数组上出现php Countable错误