web-dev-qa-db-ja.com

書き換えエンドポイントの書き換えルールを追加する

add_rewrite_endpoint 関数を使用して書き換えエンドポイントを作成しました…これが全体の構成です。

// Register to query vars

add_filter( 'query_vars', 'add_query_vars');


function add_query_vars( $vars ) {

    $vars[] = 'account';

    return $vars;

}


// Add rewrite endpoint


add_action( 'init', 'account_page_endpoint' );

function account_page_endpoint() {

    add_rewrite_endpoint( 'account', EP_ROOT );

}



// Account template

add_action( 'template_include', 'account_page_template' );

function account_page_template( $template ) {

    if( get_query_var( 'account', false ) !== false ) {

        return locate_template( array( 'account.php' ) );

    }

    return $template;

}

Example.com/account/username ...のようなURLを入力すると、これはこれまでのところうまく機能します。

どうやってパラメータのバージョンから書き換えられたバージョンにリダイレクトするのですか?追加の書き換え規則を追加する必要があるか、またはこれらのリンクを通過する必要がある機能はありますか?

サイト自体のアカウントリンクはこの関数によって作成されます。

function account_url( $user_id ) {

    $user = get_userdata( $user_id );

    return add_query_arg( 'account', strtolower( $user->user_login ), get_home_url() );

}
1
GDY

書き換えルールは着信要求を処理するだけで、リンク生成には関係しません。

WordPressの主な書き換えシステムはPHPで内部的に解析されます。エンドポイントを追加しても.htaccessファイルに変更はありません。基本的な.htaccess規則は、「これがサーバー上の物理ファイルまたはディレクトリに対する要求ではない場合、その要求をWordPressに引き渡す」と基本的に言っています。

account_url関数は、アカウントのURLを出力するときに、「醜い」と「かわいい」の両方のケースを処理する必要があります。 WordPressがこれをどのように処理するかを見るために、 get_permalink関数 に組み込まれているのを見ることができます。

$permalink = get_option('permalink_structure');
if ( '' != $permalink ) {
    // output a pretty permalink
} else {
    // output an ugly permalink
}

きれいなパーマリンクが有効になっている場合、permalink_structureオプションは選択したパターンを保持します。空の場合はきれいなパーマリンクが無効になっていることがわかります。

2
Milo

編集2

Example.com/account/johnのようなかなりパーマリンクを使用するには、あなたの管理領域、パーマリンク設定、そしてあなたのサーバー上で有効にする必要があります。あなたはnginxを使ったと私たちにコメントで言いました、私はより良いApacheを知っているのでここであなたを助けることができるチュートリアルです。

https://www.cyberciti.biz/faq/how-to-configure-nginx-for-wordpress-permalinks/ /

_編集_

私は早すぎる、add_rewrite_ruleの提案を忘れて、add_rewrite_endpointを使うには "template_include"フックの代わりに "template_redirect"フックを使わなければならないと思います。

編集終了

あなたが示すコードによると、私はあなたのaccount_page_endpoint関数にこれを追加します

add_rewrite_rule('^account/([a-z0-9]+)/?', 'index.php?account=$matches[1]', 'top');

.htaccessファイルは変更されませんが、規則を更新することはできます。

この変更後にルールを更新する必要があります。

2つの可能性

- 上記のコード行の直後に、次のようにflush rewrite関数の呼び出しを追加します。

flush_rewrite_rules();

- またはあなたは、パーマリンクの設定で、あなたの管理領域に移動し、あなたの現在の設定を再保存することができます。

4
Friss