web-dev-qa-db-ja.com

マルチサイトネットワーク:新しいブログでプログラム的にパーマリンク構造を変更する方法

サブドメインのマルチサイトネットワークがあります。私はプログラムで新しいサブドメインを作成するためにシステムを実装しました。

新しいブログが作成されたら、そのパーマリンク構造を/ postname /に設定したいと思います。

私はこれらの解決策を試してみました:

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');

このスニペットをメインサイトで使われているテーマのfunctions.phpに追加しました。それは単に機能しません。

テーマを使用してカスタムパーマリンクをプログラム的に強制する方法

function change_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}
add_action('init', 'change_permalinks');

私はこのスニペットにいくつかの懸念を抱いています。すべての "init"で書き換えを実行するのは良い考えではないと思います(他の誰かがコメントでこれについて疑いを表明しました)。第2に、このスニペットは新しいブログのデフォルトテーマに配置する必要があります - しかし、将来デフォルトテーマを変更したい場合はどうすればよいですか?

ご提案ありがとうございます。

マルコ

1
Marco Panichi

"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 );
3
José Machado

activate_blogフックで起動するmu-plugin(必須のプラグイン)を作成できるはずです。このようなことであなたは正しい方向から始められるでしょう:

<?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上での実行に関連するパフォーマンスの問題を防ぎ、テーマに依存しません。もちろん理論的には、サイト管理者は後でパーマリンク構造を変更することができますが、これを邪魔しない限り、あなたが望むパーマリンク構造を使ってクリーンインストールすることができます。

このファイルを/wp-content/mu-plugins/(通常のプラグインのようなサブフォルダはありません)の中に直接配置して、ファイルが削除されない限り自動的に実行されるようにします。

1
WebElaine