サポート » 使い方全般 » カテゴリーを自動でチェックしたいが・・・

  • wildpiyo

    (@wildpiyo)


    カテゴリーが1000個近くあり、手動でカテゴリーをチェックしていくとどうしてもチェック漏れが出るので、自動でカテゴリーをチェックするスクリプトを考えています。
    チェックを入れたいカテゴリーは変数($eki)として取得済なので、それと一致するカテゴリー名にチェックが入れれば良いだけなのですが、

    wp_set_object_terms( $post_id, $eki, 'category', true );

    とすると最初に見つかった?カテゴリーにしかチェックが入りません。
    例えば、$eki が “渋谷駅” だとして渋谷駅には9路線が通っているので、9つの同名カテゴリーが存在しており、その全部にチェックを入れたいのです。
    また、実際には $eki1、$eki2、$eki3 と3つの変数があり、値が重複している場合には、処理をパスしたいのと、1つ上の親カテゴリー(路線名)にもチェックを入れたいです(プラグインを使わず)。まぁ、これは何とか自力で解決できるかも知れないので、取りあえず、同名カテゴリーが存在する場合にその全部にチェックが入るのが目標です。
    自分なりに調べてはいるのですが、解決の糸口も見つからず自力では不可能な気がしています^^;
    何かヒントでもご教授していただければ幸いです。

    補足事項
    ※カスタム投稿タイプでやってます。
    ※add_action( ‘edit_post’, ‘ファンクション名’ )で実行するようにしています。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • gblsm

    (@gblsm)

    今は $eki にカテゴリーのスラッグをひとつだけ入れてあるのですよね。
    それをカテゴリーIDの配列に変えればよいと思います。
    9つの渋谷駅はIDがぜんぶ異なるはずですから。

    トピック投稿者 wildpiyo

    (@wildpiyo)

    gblsmさま、回答ありがとうございます。

    $eki には、カテゴリーのスラッグではなくカテゴリー名なのです。
    またカテゴリー名といっても、カテゴリーから取得したものではなく、元のデータは、カスタムフィールドに入力されている駅名から取得した値が$ekiとなっています。
    全カテゴリーから$ekiの値と一致するカテゴリーを抜き出してIDを取得しなければならないのでしょうか?

    gblsm

    (@gblsm)

    全カテゴリーから$ekiの値と一致するカテゴリーを抜き出してIDを取得しなければならないのでしょうか?

    そうするしかないと思いますよ。

    全カテゴリーを取得するには get_categories() が使えます。カテゴリーオブジェクトの配列が返されるのでオブジェクトのnameが$ekiに一致するものを探します。みつけたオブジェクトのterm_idを別の配列へ入れればよいでしょう。
    関数リファレンス/get categories

    トピック投稿者 wildpiyo

    (@wildpiyo)

    返事が遅くなり申し訳ありません。
    やっと解決したのでご報告です。

    $eki1、$eki2、$eki3 にはそれぞれ駅名が入ってます。
    $eki1 は無条件で実行、あと2つの駅名は、同じ駅名がある場合には、if分でその処理をパスしてます。
    カテゴリーIDは配列にしないで処理しました。
    これで駅名に一致するカテゴリーとそのすぐ上のカテゴリーにチェックを入れることができました!

    $category_option = array(
            'type'        => 'post',
            'child_of'    => 路線カテゴリーID,
            'orderby'     => 'slug',
            'order'       => 'ASC',
            'hide_empty'  => false
        );
        $categories = get_categories( $category_option );
        foreach($categories as $category) {
            if( $category->name == $eki1 ) {
                wp_set_object_terms( $post_id, $category->cat_ID, 'category', true );
                wp_set_object_terms( $post_id, $category->parent, 'category', true );
            }
            if( $eki1 != $eki2 ) {
                if( $category->name == $eki2 ) {
                    wp_set_object_terms( $post_id, $category->cat_ID, 'category', true );
                    wp_set_object_terms( $post_id, $category->parent, 'category', true );
                }
            }
            if( $eki1 != $eki3 and $eki2 != $eki3 ) {
                if( $category->name == $eki3 ) {
                    wp_set_object_terms( $post_id, $category->cat_ID, 'category', true );
                    wp_set_object_terms( $post_id, $category->parent, 'category', true );
                }
            }
        }

    結局、上記のようなコードでやりたいことは解決したのですが、何かすごく無駄な処理をしているように感じます^^;
    もしこれに手を加えて少ないコードにするには、どのようになるでしょうか?

    また、add_action() について別な問題が出てきたので、これは改めて質問させていただきます。よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カテゴリーを自動でチェックしたいが・・・」には新たに返信することはできません。