0

WordPressをベースにしたクライアント向けのウェブサイトを作成しています。私のクライアントは、ホームページにカテゴリの下にグループ化された記事を表示したいと考えています。

たとえば、カテゴリが「猫A」、「猫B」、「猫C」であるとします。私のクライアントは、ホームページに「猫B」、「猫A」、「車C」のようにカテゴリの順序を表示してから、ホームページに各カテゴリから6つの投稿をリストしたいと考えています。

これが私が表示したい結果であるとしましょう:

Cat B
---------------------------
Cat B - Article #1
Cat B - Article #2
Cat B - Article #3
Cat B - Article #4
Cat B - Article #5
Cat B - Article #6

Cat A
---------------------------
Cat A - Article #1
Cat A - Article #2
Cat A - Article #3
Cat A - Article #4
Cat A - Article #5
Cat A - Article #6

Cat C
---------------------------
Cat C - Article #1
Cat C - Article #2
Cat C - Article #3
Cat C - Article #4
Cat C - Article #5
Cat C - Article #6

私が探しているのは、ホームページに表示されるカテゴリを並べ替える方法です。

今のところ、WordPressダッシュボードにページを作成し、そこから好きなようにカテゴリを並べ替えて、wpオプションページに注文オプションを保存できます。問題は、バックエンドの順序に基づいてフロントエンドのカテゴリをどのように順序付けるかです。

カテゴリが次のようになっているとしましょう。

Categories
-----------------
Name   |  ID
-----------------
Cat A  |  100
Cat B  |  101
Cat C  |  102

私のwp_optionsテーブルには、次の配列を格納できます。

array(
    1 => 101,
    2 => 100,
    3 => 102
)

配列キーは、注文シーケンスと値をカテゴリIDにすることができます。

さて、シーケンスが何であるかを知ることによって、どのようにして単一のMySQLクエリでその結果を得ることができますか?

4

1 に答える 1

2

分類法(カテゴリやタグなど)の各アイテム(カテゴリやタグなど)には、名前、スラッグ(URLに入れることができる短い名前)、および説明があります。

カテゴリアイテムの注文に説明を捧げる場合は、そのフィールドにCat Bに1つ、Cat Aに2つ、CatCに3つを入力できます。これはダッシュボードから実行できます。

次に、用語を取得するときに、このクエリを使用してカテゴリIDを適切な順序で取得できます。

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
 WHERE tt.taxonomy = 'category'
 ORDER BY tt.description, t.term_id

しかし、それはあなたの説明フィールドを拘束するか、少なくともいくつかの(しかし多くではない)テーマが表示目的で使用するフィールドにいくつかの内部ジャンクを入れます。

この注文の目的でスラッグを使用することもできます。スラッグの「catb」の代わりに、たとえば「1catb」を指定できます(他のスラッグの場合は「2cata」と「3catc」を使用)。繰り返しになりますが、これはディスプレイに何らかの影響を及ぼします。今回は、サイト内のいくつかのURLの形式に影響を与えます。その場合に使用する可能性のあるクエリは次のとおりです/

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
 WHERE tt.taxonomy = 'category'
 ORDER BY t.slug, t.term_id

単一のwp_options行を結合可能なテーブルに変換することは、特に頻繁に表示されるWebサイトの正面玄関のページでは、あまりにも毛深いので、私の意見では問題を起こす価値はありません。ただし、これには複数のwp_options行を使用できます。wp_optionsの名前と値を次のように指定します。

   option_name       option_value
   mycat_order_001       2
   mycat_order_002       1 
   mycat_order_003       3

次に、このようなクエリを使用して、カテゴリ名を順番に取得します。

SELECT t.term_id, t.name, t.slug
  FROM wp_terms t
  JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
  JOIN wp_options o ON (    o.option_name LIKE 'mycat_order_%'
                        AND o.option_value = t.term_id)
 WHERE tt.taxonomy = 'category'
 ORDER BY o.option_name, t.term_id

それはあなたの条件を正しい順序で引き出します。ここでのコストは、ユーザーが目的の順序を指定したときにwp_optionsテーブルを更新するためのより複雑なコードです。

したがって、いくつかの選択肢があります。シンプルが良いことを覚えておいてください。

于 2013-02-27T18:57:04.567 に答える