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() );
}
書き換えルールは着信要求を処理するだけで、リンク生成には関係しません。
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
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();
- またはあなたは、パーマリンクの設定で、あなたの管理領域に移動し、あなたの現在の設定を再保存することができます。