functions.phpを介してパーマリンク構造を設定する方法


10

私はWordpressネットワークをセットアップしていて、すべての新しいサイトに同じパーマリンク構造(つまり、「/%year%/%monthnum%/%postname%/」)を持たせたいと思っていました。これは、ユーザーがその構造を選択することに頼る必要なく、functions.phpのフックまたはハックを介して実行できるかどうか疑問に思っています。

回答:


15

set_permalink_structure()グローバル$wp_rewriteオブジェクトのメソッドを呼び出すことにより、パーマリンク構造を設定できます。

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

エラーが発生した場合に備えて、PHPの5.3バージョン未満のコードを以下に示します。

function reset_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
}
add_action( 'init', 'reset_permalinks' );

コードをコピーして貼り付けるとエラーが発生しますが、その根拠はトリックです。私の質問/意図が良い習慣であるかどうかだけ私は疑問に思います...
Tomas Buteler

1
トーマス、答えを受け入れてくれてありがとう。お役に立てて嬉しいです。良い習慣については-あなたの目的がウェブサイト全体でそのようなパーマリンク構造を強制してロックすることであると私は思う-そしてそれは正当である。「ロック」とは、管理者がコードを使用して構造を変更できないことを意味します。問題がなければ、これを実行しても大丈夫だと思います。
soulseekah

1
機能しますが、管理者がパーマリンクページ(投稿の404)から保存すると、競合が発生します。次に、サイトが読み込まれると(プロセスのinitフック)、パーマリンク構造が再び変更されます(投稿の404が再び)。を使用$wp_rewrite->flush_rules();して問題を解決します。initで使用して毎回実行するのは悪い習慣です。パーマリンクページにアクセスするだけでトリックが行われます。
Sisir

1
パーマリンクのオプションページを無効にすることが全体の目的だったので、多分それを回避できますか?
Tomas Buteler 2012

3
「after_switch_theme」またはプラグインのアクティブ化時に呼び出され、「flush_rewrite_rules()」が後に続く必要があります
csstd

2

以前の回答が機能していません。私は純粋な解決策を得ました。このコードを使用できます。100%動作します。ありがとう

/**
 * Rewrite set up, when theme activate i mean
 */
if (isset($_GET['activated']) && is_admin()) {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure('/%postname%/');
    $wp_rewrite->flush_rules();
}

/**
* Redirect to Permalink setting Page.
* Otherwise Redirect rule will not work Properly.
*/
function redirect_to_permalink() {

    wp_redirect('options-permalink.php');
}
add_action( 'after_switch_theme', 'redirect_to_permalink' );

0
function setPermaLink(){
    $ps = '/%category%/%postname%/';
    $permalink_structure = sanitize_option( 'permalink_structure', $ps);
    $blog_prefix = '/blog';
    $prefix = '/index.php';

    if ( ! empty( $permalink_structure ) ) {
        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
        if ( $prefix && $blog_prefix ) {
            $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
        } else {
            $permalink_structure = $blog_prefix . $permalink_structure;
        }
    }

    $wp_rewrite->set_permalink_structure( $permalink_structure );
    flush_rewrite_rules();
}

setPermaLink();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.