"Stores" http://example.com/stores/
という名前のテンプレートを使ったカスタムページがあります。このページにはカテゴリとして州や会社のリストが表示されます。このシステムでは、私は単一のカテゴリ(州または会社)に割り当てることができるカスタム投稿タイプ "store"を持っています。
各店舗は特定のページではなく、州/会社用の一種の電話帳スタイルのレイアウトで表示される連絡先情報です。
私が今抱えている問題は、どのようにして私の "Stores"テンプレートがhttp://example.com/stores/california/
からのURLリクエストを受け付けることができるようにすることができるか(404エラーを投げずに)?
この意味でのCalifornia
はページではなくクエリです。私はまた、手動でこれらの各カテゴリのページを作成したくありません(データベースから取得されるので、自動)。私はこの目的のために?state=california
を使うことができました、しかし私はwordpressの中でこのURLを許可するための正しい方法を学びたいと思います。
Htaccessファイルを手動で編集する正しい方法はありますか?パーマリンク構造を編集しても上書きされないでしょうか。 htaccessをどのようにフォーマットしますか?
新しいページを追加してスラッグを付けるstores
add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars){
$vars[] = 'state';
return $vars;
}
これはあなたの要求をあなたのstores
ページに向けるでしょう。
add_rewrite_rule('^stores/([^/]*)/?','index.php?post_type=page&name=stores&state=$matches[1]','top');
次のようにして状態変数にアクセスできます。
$state = get_query_var('state');
[設定] - > [パーマリンク]にアクセスしてパーマリンクをフラッシュし、書き換え規則をスタックに追加します。
私はWordpressのウェブサイトで答えを見つけて、ソリューションをテストしました: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule#Using_Custom_Templates_with_custom_querystring
店舗用のページテンプレートを作成し、ページに適用します。
$stores = get_query_var('stores');
Functions.phpに書き換えタグを追加し、Wordpressに特定のタグを探すことを知らせます
function custom_rewrite_tag() {
add_rewrite_tag('%stores%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
URLをフォーマットし、varsを使用してindex.phpを指すようにするには、functions.phpに次のように入力します。 注:page_idを店舗ページのpage_idに更新する必要があります(この例では12です)。
function custom_rewrite_rule() {
add_rewrite_rule('^stores/([^/]*)/?','index.php?page_id=12&stores=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
そこから/ stores/south-dakota /を参照すると、ページテンプレートの$ stores変数は「south-dakota」になります。
私も同じことをやろうとしていて、ついに次のようにしました。
テーマ内のfunctions.phpに次のコードを追加します。
add_filter('query_vars', 'add_state_var', 0, 1);
function add_state_var($vars){
$vars[] = 'state';
return $vars;
}
add_rewrite_rule('^stores/([^/]+)/?$','index.php?pagename=stores&state=$matches[1]','top');
テンプレートの中で、これを使ってクエリ変数を取得します。
$state = get_query_var('state');