在使用ADD_REWRITE_RULE()更改url后更改常规URL

时间:2020-09-24 作者:Miguel Vieira

因此,我正在为我的客户制作一个小应用程序插件,它涉及一个包含数据的表,我在插件中创建了一个页面,以显示有关表行的更深入信息。

这就是我重写的方式:

function mytableplugin_page_rewrite(){
 $page_slug = \'mytablepluginpage\';

 // urls will be in the form
 // /your-page/42/

 add_rewrite_rule(
     \'mytableplugin/([0-9a-zA-Z_-]+)/?$\',
     \'index.php?pagename=\' . $page_slug . \'&tid=$matches[1]\',
     \'top\'
 );
}
但是重定向不会影响规范URL,因此"mytableplugin" 页面具有相同的"mytablepluginpage" 标准网址

我没有使用Yoast SEO插件,我也不想让我的插件依赖它,所以,如何更改页面的规范链接?我想要自定义名称(mytableplugin != mytablepluginpage) 要保留的URL和要保留在规范URL上的参数

这是一个问题,因为TranslatePress插件在切换语言时使用了错误的URL,这让我又回到了"mytablepluginpage" 没有查询的内容的页面。

编辑:我尝试了更多的东西,劫持rel\\u canonical函数确实可以更改规范URL,但并不能解决translatepress插件在语言切换时URL错误的问题,下面是我使用的代码:

remove_action(\'wp_head\', \'rel_canonical\');
add_action(\'wp_head\', \'my_rel_canonical\');

function my_rel_canonical() {
    if (is_page(\'mytablepluginpage\')) {
        
        global $wp;
        echo "<link rel=\'canonical\' href=\'".home_url( $wp->request )."\'/>\\n";
        
    } else {
        rel_canonical();
    }
}
(最后一个代码来自this StackOverflow question)

提前感谢!

1 个回复
SO网友:Miguel Vieira

好的,我找到了一种方法,如果有人需要创建永久链接或更改虚拟页面或动态页面的永久链接,下面是方法:

这个get_permalink(), the_permalink()get_the_permalink() 可以使用post_type_link, page_link 和/或post_link 过滤器,每一个都是针对一种帖子的。

这就是我最终得到的函数:

function mytableplugin_rename_permalink($url, $post) {
    
    $table = get_page_by_path(\'mytablepluginpage\');
    global $wp;
    
    if ( \'integer\' === gettype( $post ) ) {
        $post_id = $post;
    } else {
        $post_id = $post->ID;
    }

    
    // check if we are targetting the plugin page
    if (  $table->ID == $post_id ) {
        $url = home_url( $wp->request );
    }
    
    apply_filters( \'mytableplugin\', home_url( $wp->request ), get_the_ID(), false );

    // Return the value of the URL
    return $url;
}

add_filter( \'post_type_link\', \'mytableplugin_rename_permalink\', 10, 2 );
add_filter( \'page_link\', \'mytableplugin_rename_permalink\', 10, 2 );
add_filter( \'post_link\', \'mytableplugin_rename_permalink\', 10, 2 );
我不必添加所有三个过滤器,但我这样做是为了避免在插件中更改页面的帖子类型时出现任何问题。

我从this pagethis question

它修复了规范URL、永久链接和translatePress问题。

相关推荐