多站点网络:如何以编程方式更改新博客上的固定链接结构

时间:2017-06-28 作者:Marco Panichi

我有一个子域多站点网络。为了以编程方式创建新的子域,我实现了一个系统,只需填写一个表单。

现在我有一个需求:创建新博客时,我想将其永久链接结构设置为/postname/。

我尝试过以下解决方案:

How to set permalink structure via functions.php

function set_default_permalink_for_new_blogs($blog_id) 
{
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( \'/%year%/%monthnum%/%postname%/\' );
}
add_action(\'wpmu_activate_blog\', \'set_default_permalink_for_new_blogs\');
我在函数中添加了这个片段。php的主题用于主站点,上面提到的系统就在这里。这根本不起作用。

How Do I Programmatically Force Custom Permalinks with My Theme?

function change_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure(\'/%postname%/\');
    $wp_rewrite->flush_rules();
}
add_action(\'init\', \'change_permalinks\');
我对这段代码有一些担忧:我不认为对每个“init”都进行重写是个好主意(还有人在评论中对此表示怀疑);其次,这个片段必须放在新博客的默认主题上——但是如果我想在将来更改默认主题呢?

非常感谢您的建议,

马可

2 个回复
最合适的回答,由SO网友:José Machado 整理而成

有了“mu插件”,解决方案是。。。

add_action( \'wpmu_new_blog\', function( $blog_id ){

switch_to_blog( $blog_id );
global $wp_rewrite;
$wp_rewrite->set_permalink_structure(\'/%postname%/\');
$wp_rewrite->flush_rules();
restore_current_blog();

}, 10 );

SO网友:WebElaine

您应该能够创建一个在activate_blog 钩像这样的事情应该会让你朝着正确的方向开始:

<?php
/* Plugin name: WPSE Permalink Setter
Description: Sets permalink structure for each blog activation
*/
add_action(\'activate_blog\', \'wpse_271662_set_permalinks\');
function wpse_271662_set_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure(\'/%postname%/\');
    $wp_rewrite->flush_rules();
}
?>
因为代码仅在创建新站点时运行(activate_blog), 这可以防止与在每个init, 而且它不依赖于主题。当然,从理论上讲,站点管理员可以稍后更改permalink结构,但这将为他们提供一个干净的permalink结构安装,除非他们胡闹。

将此文件直接放在内部/wp-content/mu-plugins/ (没有像普通插件那样的子文件夹),因此除非删除文件,否则它将自动运行。

结束

相关推荐

Permalinks - .htaccess

根据WordPress官方文档,当你保存永久链接时,它会更新你的。htaccess文件(https://codex.wordpress.org/Settings_Permalinks_Screen).然而,当我进行永久链接更改并保存它们时,我看不到任何更改。htaccess更新。有人能澄清一下WordPress文档是否不准确,或者我是否遗漏了什么。