カスタム分類

2013 年 2 月 19 日

ホーム フォーラム その他 カスタム分類

このトピックには4件の返信が含まれ、2人の参加者がいます。4 年、 9 ヶ月前 uishi さんが最後の更新を行いました。

5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • 投稿者
    投稿
  • #52286

    uishi
    参加者

    商品の種類とブランドがあるとき、

    2種類のカスタム分類で管理できると便利ではないでしょうか。

    例えば、種類がバッグと腕時計、ブランドがAとBのような前提で、

    バッグ-A、バッグ-B、腕時計-A、腕時計-Bすべてに該当する商品があり、

    種類メインのメニューのサブカテゴリーにブランドを、

    ブランドメインのサブカテゴリーに種類を見たいな感じで。

    とりあえずメニューのウィジット作りたいのですが、

    どうしたものでしょうか。

    あとそれぞれのリンクはどうするのが良いのでしょうか。

    開発上の示唆やご指導ございましたらお願いします。

    #66192

    nanbu
    参加者

    こんにちは。

    カテゴリーリンクの考え方ですが、素直にWordPressの機能を使おうとした時、カテゴリーページは1つカテゴリーに対しての絞込みになると思います。つまり、バッグ且つAの商品を集めたカテゴリーページはすんなりとは行かない気がします。

    やはりカテゴリー構成として、

    バッグ

     ┣A

     ┗B

    腕時計

     ┣A

     ┗B

    というものが必要になってくるかと思います。

    さらに、

    A

    ┣バッグ

    ┗腕時計

    B

    ┣バッグ

    ┗腕時計

    という構成も必要になってくるので、商品管理としてはとても効率がいいとは言えませんね。

    もし、

    種類

    ┣バッグ

    ┗腕時計

    ブランド

    ┣A

    ┗B

    のカテゴリー構成で、バッグ且つAの商品を集めたカテゴリーページを作ろうとする場合、カテゴリーページのクエリーに対して条件を追加してやるか、もしくは固定ページでquery_postsして作ることになるでしょうか。

    どうでしょう。ご質問の主旨に沿っていますでしょうか。

    #66193

    uishi
    参加者

    nanbu様、レスありがとうございます。

    (1)

    バッグ

     ┣A

     ┗B

    腕時計

     ┣A

     ┗B

    (2)

    A

    ┣バッグ

    ┗腕時計

    B

    ┣バッグ

    ┗腕時計

    の両方のウィジットを各々設置したいのです。

    有名ブランドだと幅広い商品を扱っているので、

    商品からさがすと、ブランドからさがすの2通りあったほうがいいと思うのです。

    でリンク先の問題はおいておいて、ウィジットに親子関係のないカスタム分類を階層的に表示するのに

    function my_get_sub_tax_post($tax_one,$tax_two,$cat,$sub_cat){
    $args = array(
    'posts_per_page'=>1,
    'tax_query' => array(
    array(
    'taxonomy' => $tax_one,
    'terms' => array($cat->term_taxonomy_id),
    'field' => 'term_taxonomy_id',
    'operator' => 'AND'
    ),
    array(
    'taxonomy' => $tax_two,
    'terms' => array($sub_cat->term_taxonomy_id),
    'field' => 'term_taxonomy_id',
    'operator' => 'IN'
    ),
    ),
    );
    query_posts($args);
    if(have_posts()){
    echo '<li><a href="'.esc_html(get_bloginfo('url')).'/?'.esc_html($tax_one).'='.esc_html($cat->slug).'&'.esc_html($tax_two).'='.esc_html($sub_cat->slug).'" />' . esc_html($sub_cat->name) . '</a></li>';
    }
    }

    ウィジットの本体に

    $categories = get_terms($tax_one);
    foreach ( $categories as $cat ) {
    echo '<li>' . esc_html($cat->name) . '<ul>';
    $sub_cats = get_terms($tax_two);

    foreach ( $sub_cats as $sub_cat ) {
    my_get_sub_tax_post($tax_one,$tax_two,$cat,$sub_cat);
    }
    echo '</ul></li>';
    }

    として一応

    表示するんじゃないかと思うんですが、

    もっとスマートな方法がないかなと思うのと、

    絞り込んだ件数をゲットで出来るような関数はないものかと思って

    投稿してみました。

    #66194

    nanbu
    参加者

    カスタムタクソノミーを利用してのことですね。

    そうですね別のタクソノミー間を関連付けるものが無いので、その様にやるしかないのではと思いますがどうでしょう。

    #66195

    uishi
    参加者

    改訂版

    $categories = get_terms($tax_one);
    foreach ( $categories as $cat ) {
    echo '<li>' . esc_html($cat->name) ;
    echo '<ul><li><a href="'.get_bloginfo('url').'/?'.esc_html($tax_one).'='.esc_html($cat->slug).'">'. esc_html($cat->name).'一覧</a></li>';
    $sub_cats = get_terms($tax_two);

    foreach ( $sub_cats as $sub_cat ) {
    my_get_custom_terms_num($tax_one,$tax_two,$cat,$sub_cat);
    }
    echo '</ul></li>';
    }

    function my_get_custom_terms_num($tax_one,$tax_two,$cat,$sub_cat){
    global $wpdb;
    $query = $wpdb->prepare("SELECT object_id,COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id IN (%d,%d) GROUP BY object_id HAVING COUNT(*) > 1 ",$cat->term_taxonomy_id,$sub_cat->term_taxonomy_id);
    $outputs = $wpdb->get_results( $query );
    foreach($outputs as $output){
    echo '<li><a href="'.get_bloginfo('url').'/?'.esc_html($tax_one).'='.esc_html($cat->slug).'&taxtwo='.esc_html($sub_cat->slug).'" />' . esc_html($sub_cat->name) . '</a></li>';
    //print_r($output);
    }
    }

    taxonomy-第一カスタム分類名.phpとtaxonomy-第二カスタム分類名.phpをつくって、第二カスタム分類を$_GETで受け取ってquery_postsする。

    どちら様でもセキュリティ的な示唆やスピードアップにこうしたほうがいいというがありましたらお教えいただけると幸いです。

    変数名のつけ方も教えていただけると幸いです。

5件の投稿を表示中 - 1 - 5件目 (全5件中)

このトピックに返信するにはログインが必要です。