web-dev-qa-db-ja.com

ページにカスタム/動的「スラッグ」を使用する

"Stores" http://example.com/stores/という名前のテンプレートを使ったカスタムページがあります。このページにはカテゴリとして州や会社のリストが表示されます。このシステムでは、私は単一のカテゴリ(州または会社)に割り当てることができるカスタム投稿タイプ "store"を持っています。

各店舗は特定のページではなく、州/会社用の一種の電話帳スタイルのレイアウトで表示される連絡先情報です。

私が今抱えている問題は、どのようにして私の "Stores"テンプレートがhttp://example.com/stores/california/からのURLリクエストを受け付けることができるようにすることができるか(404エラーを投げずに)?

この意味でのCaliforniaはページではなくクエリです。私はまた、手動でこれらの各カテゴリのページを作成したくありません(データベースから取得されるので、自動)。私はこの目的のために?state=californiaを使うことができました、しかし私はwordpressの中でこのURLを許可するための正しい方法を学びたいと思います。

Htaccessファイルを手動で編集する正しい方法はありますか?パーマリンク構造を編集しても上書きされないでしょうか。 htaccessをどのようにフォーマットしますか?

4
Radley Sustaire

ページテンプレートを作成する

新しいページを追加してスラッグを付ける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');

パーマリンクをフラッシュする

[設定] - > [パーマリンク]にアクセスしてパーマリンクをフラッシュし、書き換え規則をスタックに追加します。

11
Brian Fegter

私は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」になります。

6
Jared Pomranky

私も同じことをやろうとしていて、ついに次のようにしました。

テーマ内の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');
1
Nayan