web-dev-qa-db-ja.com

WordPressのカスタムURLを書き換える

_ id _ によって生成されたカスタムWordPressのURLがあります。このURLのhttps://example.com/account/customer-bookings/?view-booking=4https://example.com/account/customer-bookings/view-booking/4に書き換える必要があります。寄付するにはどうすればいいですか。

私の現在の.htaccessコードは以下の通りです。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php56” package as the default “PHP” programming language.
<IfModule mime_module>
  AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
2
Sonjoy Datta

WordPressはリダイレクトやページルートを管理する独自のシステムを持っているので、.htaccessファイルを編集する必要はありません。あなたは関数 add_rewrite_rule() から始めたいでしょう。

これは3つの引数を取ります。

  1. ルート(正規表現として)
  2. クエリ変数
  3. 優先度

だから最初に、あなたはaccount/customer-bookings/のクエリ変数を見つける必要があります。それがページであれば、それはpage_idである可能性があります。 WordPressがすでに行っていることを再現するには、それが可能です(XXXが特定のpage_idです)。

add_rewrite_rule(
    '^account/customer-bookings/?$',
    'index.php?page_id=XXX'
);

これを拡張する必要があります。( このコードを追加した後に書き換えルールをフラッシュすることを忘れないでください!

add_action('init', 'wpse_view_booking_rewrite');
function wpse_view_booking_rewrite() {
    add_rewrite_rule(
        '^account/customer-bookings/view-booking/([^/]+)/?$',
        'index.php?page_id=XXX&view-booking=$matches[1]',
        'top'
    );
}

これですでに正しいページが表示されているはずです。ただし、get_query_var('view-booking')はデフォルト変数ではないため、使用することはできません。これを解決するには、単にWPにそのように気を付けるように伝えます。

add_filter('query_vars', 'wpse_view_bookings_filter');
function wpse_view_bookings_filter($vars) {
    $vars[] = 'view-booking';
    return $vars;
}

この時点でWordPressは変数について知っています、そしてget_query_var('view-booking')を呼び出すことによってあなたは適切な変数を取得するでしょう。

3
kero