web-dev-qa-db-ja.com

1つのURLに複数の分類法を組み合わせる

私は、2つのカスタム分類法を使用した製品カタログで複雑なサイトを作成しています。彼らはブランドとタイプです。

ブランド - キヤノン - 東芝 - HP

タイプ - プリンター - スキャナー - 多機能

1つのブランドと1つのタイプの任意の組み合わせであるすべての製品を見つけるページが必要です。ブランドは2つの中でより重要である、それでそれはブランド - >タイプとしてフィルタされるべきです(これが交換可能であるならそれは理想的です)。

URLの最後に追加したパラメータに基づいてクエリを変更することでこれを実行できます。たとえば、このURLは次のいずれかになります。

しかし、これはSEOの目的には適していないと言われました。理想的には、URLを http://www.example.com/brand/type/ のように構成します。これにより、URLは次のようになります。

はい、各ブランドの各商品タイプにサブカテゴリを設定できますが、ブランドに関係なく各商品タイプのすべての商品を表示できるようにする必要があります。

ちなみに、URLをもう少し複雑にする必要がある場合(つまり、/ brand/hp/type/multifunction /)、それは何もないよりはましです。

必要な方法でリンクを構造化するためにできる、パーマリンクに関するトリックはありますか?

UPDATE 10/23/15: 私が作ったサイトでなぜこれがうまくいかなくなったのかを診断するのに1時間費やしました。デフォルトのクエリを、分類アーカイブテンプレートの1つのカスタムクエリで上書きしていたことがわかりました。これに対抗するには、次のようにします。

<?php $tax_query = $wp_query->query_vars; ?>
<?php
if ($tax_query["types"] && $tax_query["brands"]) {
    // default query stuff here
} else {
    // custom query stuff here
}
?>
6
JacobTheDev

この書き換え規則はうまくいきます( "brand"と "type"が分類法の登録名であると仮定)。

function custom_rewrite_rules() {
    add_rewrite_rule('^brand/(.*)/type/(.*)?', 'index.php?brand=$matches[1]&type=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rules');

あなたのサイトにこのコードを保存した後にrewirteルールをフラッシュすることを忘れないでください。

それなら fix にいくつかの場所でフックする必要があるでしょう。たとえば、WordPressでは自動的に処理されないため、ドキュメントの正しいタイトルを生成するにはwp_titleをフックする必要があります。たとえば、代わりに "HP Printers"、単に "HP"などです。私があなたが fix にする必要があるものの完全なリストを与えることはできません。

8
cybmeta

this one に答えるために掘り下げながら、私は here を次の書き換え関数に見つけました:

function eg_add_rewrite_rules() {
  global $wp_rewrite;
  $new_rules = array(
      'user/(profession|city)/(.+?)/(profession|city)/(.+?)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4),
      'user/(profession|city)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2)
  );
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' );

この関数はexample.com/user/profession/designer,knight/city/athens,gotham /のようなURLを取り、それを変数に変換します。

$proffession = "designer,knight";
$city = "athens,gotham";

taxonomy.phpで使用できます

詳細情報: https://stackoverflow.com/a/34624138/5594521

実用的なデモ: http://playground.georgemanousarides.com/

それが役に立てば幸い!

2
gmanou