我在一个站点上有各种定制的post类型,其中包含当前查询ID的URL,并且我试图重写这些URL,以使用相当好的permalink结构。一些示例post URL:
示例1:
电流:https://accountability-framework.org/core-principles/?core_principle=88
期望:https://accountability-framework.org/core-principles/2-respect-for-human-rights
示例2:
因此,所需的网址格式是:https://accountability-framework.org/name-of-post-type/name-of-post/name-of-topic-if-present
奇怪的是,当查看WP管理中的帖子时,permalink被正确列出:

但是,完整的页面内容无法正确加载。
在我们的post-types目录中,它位于principles.php (管理上面的第一个示例文章)中:
<?php
/**
* Principles
*/
namespace App;
add_action( 'init', '\App\principles_post_type' );
function principles_post_type() {
register_post_type(
'principle',
array(
'labels' => array(
'name' => __( 'Core Principles', TEXT_DOMAIN ),
'singular_name' => __( 'Core Principle', TEXT_DOMAIN ),
'add_new' => __( 'New Principle', TEXT_DOMAIN ),
'add_new_item' => __( 'Add New Principle', TEXT_DOMAIN ),
'new_item' => __( 'New Principle', TEXT_DOMAIN ),
'edit_item' => __( 'Edit Principle', TEXT_DOMAIN ),
'view_item' => __( 'View Principle', TEXT_DOMAIN ),
'all_items' => __( 'All Principles', TEXT_DOMAIN ),
'search_items' => __( 'Search Principles', TEXT_DOMAIN )
),
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'hierarchical' => false,
'rewrite' => array( 'slug' => __( 'core-principles', TEXT_DOMAIN ), 'with_front' => false ),
'show_in_menu' => true,
'show_in_admin_bar' => true,
'supports' => array( 'title', 'revisions' ),
'menu_position' => 6,
'menu_icon' => 'dashicons-thumbs-up'
)
);
}这是在guidance.php中(管理上面的第二篇示例文章):
<?php
/**
* Guidances
*/
namespace App;
add_action('init', '\App\guidance_post_type');
function guidance_post_type() {
register_post_type(
'guidance',
array(
'labels' => array(
'name' => __('Operational Guidance', TEXT_DOMAIN),
'singular_name' => __('Operational Guidance', TEXT_DOMAIN),
'add_new' => __('New Operational Guidance', TEXT_DOMAIN),
'add_new_item' => __('Add New Operational Guidance', TEXT_DOMAIN),
'new_item' => __('New Opertional Guidance', TEXT_DOMAIN),
'edit_item' => __('Edit Operational Guidance', TEXT_DOMAIN),
'view_item' => __('View Operational Guidance', TEXT_DOMAIN),
'all_items' => __('All Operational Guidance', TEXT_DOMAIN),
'search_items' => __('Search Operational Guidance', TEXT_DOMAIN)
),
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'hierarchical' => false,
'rewrite' => array('slug' => __('contents-of-the-framework', TEXT_DOMAIN ), 'with_front' => false),
'show_in_menu' => true,
'show_in_admin_bar' => true,
'supports' => array('title', 'revisions'),
'menu_position' => 5,
'menu_icon' => 'dashicons-analytics'
)
);
}permalinks被设置为"Post name":https://accountability-framework.org/sample-post/
关于上面的第一个例子,我还尝试在principles.php中添加一个重写规则
function core_principle_rewrite_tag_rule() {
add_rewrite_tag( '%core_principle%', '([^&]+)' );
add_rewrite_rule( '^core_principles/([^/]*)/?', 'index.php?core_principle=$matches[1]','top' );
}
add_action('init', 'core_principle_rewrite_tag_rule', 10, 0);但没有骰子。如何设置所有这些自定义post类型URL以遵循所需的格式?
我使用的是WordPress版本5.2.4和Sage主题:https://roots.io/sage/
谢谢。
发布于 2019-10-30 17:44:24
有些服务器(如果权限设置不正确)可能无法工作,您可能需要手动更新.htaccess文件。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress重要事项:如果您正在修改现有的.htaccess文件,请确保首先在计算机上备份该文件,以防您搞砸任何事情。
或
自动刷新重写规则
导致404错误的另一个原因是,每当注册新的post类型时,就必须在WordPress中“刷新”重写规则。这可以通过转到Settings > Permalinks并单击保存按钮(在本文的第一节中提到)来完成。
如果您正在处理带有注册帖子类型的自定义主题或插件,您可能需要考虑在最终用户激活主题或插件时自动刷新重写规则,以防止任何404错误。下面是您可以使用的代码示例:
// Code for themes
add_action( 'after_switch_theme', 'flush_rewrite_rules' );
// Code for plugins
register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );
register_activation_hook( __FILE__, 'myplugin_flush_rewrites' );
function myplugin_flush_rewrites() {
// call your CPT registration function here (it should also be hooked into 'init')
myplugin_custom_post_types_registration();
flush_rewrite_rules();
}https://stackoverflow.com/questions/58629040
复制相似问题