我想将永久链接从 更改/%postname%.html
为/%year%/%monthnum%/%postname%.html
。
我知道如何从 Worpdress 管理面板做到这一点。但是我收到了超过 20000 个帖子,所以我想知道是否有机会从 .htacess 重定向我的旧帖子并/%postname%.html
重定向到/%year%/%monthnum%/%postname%.html
我想将永久链接从 更改/%postname%.html
为/%year%/%monthnum%/%postname%.html
。
我知道如何从 Worpdress 管理面板做到这一点。但是我收到了超过 20000 个帖子,所以我想知道是否有机会从 .htacess 重定向我的旧帖子并/%postname%.html
重定向到/%year%/%monthnum%/%postname%.html
您应该在 WordPress 本身中执行此操作(与 相矛盾.htaccess
),因为您必须根据帖子名获取真正的永久链接。
请尝试将您的永久链接更新为新结构,并将以下代码添加到您的functions.php文件中。
<?php
function redirect_postname_to_date_structure($wp) {
$pattern = '#^([^/]+)\.html$#';
$matches = array();
if ( preg_match( $pattern, $wp->request, $matches ) ) {
$slug = $matches[1];
$args = array(
'name' => $slug,
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 1
);
// Try to retrieve post based on slug
$posts = get_posts( $args );
if ( $posts ) {
$permalink = get_permalink( $posts[0]->ID );
wp_redirect( $permalink, 301 );
exit;
}
}
}
add_action( 'parse_request', 'redirect_postname_to_date_structure' );
?>
PS:我建议您首先使用 302 状态码(in wp_redirect()
)进行测试。当您确信它有效时,您可以切换到 301。