我有一个名为Book的Custom Post Type
,链接为:mywebsite.com/book/mybookname
我想更改此内容,以便链接为mywebsite.com/mybookname
。
我添加了以下代码来更改链接,它按预期工作:
function books_theme_remove_slug( $post_link, $post, $leavename ) {
if ( 'book' != $post->post_type || 'publish' != $post->post_status ) {
return $post_link;
}
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
return $post_link;
}
add_filter( 'post_type_link', 'books_theme_remove_slug', 10, 3 );
function books_theme_parse_request( $query ) {
if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
return;
}
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'post', 'book', 'page' ) );
}
}
add_action( 'pre_get_posts', 'books_theme_parse_request' );
问题是旧链接(mywebsite.com/book/mybookname
)仍然有效。我想在不破坏当前链接的情况下将该链接转到404页面。
我尝试了以下但是它打破了一切:
function books_theme_parse_request( $query ) {
if(isset($query->query['post_type']) && $query->query['post_type'] == 'book'){
global $wp_query;
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 ); exit();
}
if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
return;
}
if ( ! empty( $query->query['name'] ) ) {
$query->set( 'post_type', array( 'post', 'book', 'page' ) );
}
}
add_action( 'pre_get_posts', 'books_theme_parse_request' );
如何删除旧网址?
答案 0 :(得分:3)
这不应该首先发生,所以你不应该尝试以编程方式修复它 - 而是你应该在源头修复它。尝试找出原因并修复它。否则你可能会引入其他问题。
一些可能的解决方案,具体取决于原因:
刷新重写缓存
Wordpress不会将重定向写入.htaccess,它使用rewrite rules来解析URL并找到重定向的匹配项。
这意味着如果您不刷新重写规则,旧链接仍然有效。
参考:SarahCoding's answer to 'Remove Old Permalinks?'
如何操作: 重新保存您的固定链接将刷新重写规则,但如果那里不起作用是Three Ways to Flush the Rewrite Cache in WordPress
清除缓存
如果安装了缓存插件,则需要清除它们。一些安全插件也使用缓存,例如SECURI。它也可以在您的浏览器中缓存。
如何操作:
请参阅How to Clear Your Cache in WordPress
删除旧的WP永久链接
更新slug时,旧的永久链接仍然存储在数据库中。如果您想使用之前使用的slug,这可能会导致问题。
如何操作:
旧的固定链接存储在表postmeta
中,meta_key
为_wp_old_slug
。要清除所有旧slugs,请在WP数据库中运行此查询:
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
参考Mark Dave Tumanda's answer to 'Remove Old Permalinks?'
检查重定向插件
如果您使用任何重定向插件,请检查重定向规则,以防有任何与您的新网址冲突的情况。
答案 1 :(得分:0)
根据您的评论,您只需要知道网址是否包含/预订...请参阅下面的添加片段:
extern "C"
{
const char * _importString()
{
UIPasteboard *result = [UIPasteboard generalPasteboard];
NSString * resultString = [result string];
return strdup([resultString UTF8String]);
}
}
正如人们提到reference
关于管理员使用的警告
此过滤器还可用于影响管理员屏幕查询。请务必检查您的修改是否会影响您的帖子编辑屏幕。例如,只检查is_main_query()和is_post_type_archive(' movie')也将更改edit.php?post_type = movie admin屏幕的查询,除非您还检查!is_admin()