我有一个名为 location
的自定义帖子类型,我正在尝试将此类型的帖子设置为现有页面的子项,以实现这样的永久链接结构:
example.com/alabama <-- Page with generic content
example.com/alabama/locations <-- Another page, child of a state page
example.com/alabama/locations/location-name <- Custom type, child of alabama/locations seen above and titled `Location Name`
最接近我必须在两个不同的帖子类型之间创建层次关系是通过一个元框,我可以在保存它们时将帖子ID指定为我的自定义类型帖子的 post_parent
. 尽管页面ID确实保存在CPT post_parent
字段中,但它对永久链接没有影响 . 它们按照 rewrite
CPT选项中的定义进行 . 但我不知道如何使 ['rewrite']['slug']
选项动态化,或者甚至可能 .
这就是我的帖子类型的定义方式:
add_action( 'init', function() {
register_post_type( 'location', [
'label' => 'Location',
'menu_icon' => 'dashicons-location-alt',
'supports' => [ 'title', 'editor', 'custom-fields' ],
'public' => true,
'hierarchical' => false,
'has_archive' => false,
'rewrite' => false,
] );
} );
如何配置位置的重写规则以获得我需要的永久链接?
1 回答
我假设所有
location
帖子都有一个永久链接结构,如下所示:示例URL地址:
所以,如果这是正确的,那么:
•使用
add_rewrite_rule()
函数为这些永久链接添加自定义重写规则 .•您不需要
/locations/
Page .(您可以将
state_name
更改为其他名称;它会忘记刷新重写规则 - 转到“永久链接设置”页面并单击“保存更改”按钮,而不必进行任何更改 . )接下来,当您创建或编辑
location
帖子时,请将post_parent
自定义字段的值设置为'state Page'的ID - 例如/alabama/
页 .此代码将过滤
get_permalink()
输出,并返回location
帖子的相应永久链接:例如,
get_permalink( 123 )
将返回http://example.com/alabama/locations/location-1
,如果location
帖子的slug是location-1
,其'state Page'是/alabama/
.更新
当请求永久链接时(即用户访问
example.com/{STATE NAME}/locations/{CPT SLUG}
),并且您想确保'state Page'和location
帖子都存在,并且'state Page'确实与location
帖子相关联,那么此代码可以帮助您:更新#2
请参阅此图像下方代码中的
// Comment
- 请参阅_so51217355_admin_ajax_js()
功能 .