今は $eki にカテゴリーのスラッグをひとつだけ入れてあるのですよね。
それをカテゴリーIDの配列に変えればよいと思います。
9つの渋谷駅はIDがぜんぶ異なるはずですから。
gblsmさま、回答ありがとうございます。
$eki には、カテゴリーのスラッグではなくカテゴリー名なのです。
またカテゴリー名といっても、カテゴリーから取得したものではなく、元のデータは、カスタムフィールドに入力されている駅名から取得した値が$ekiとなっています。
全カテゴリーから$ekiの値と一致するカテゴリーを抜き出してIDを取得しなければならないのでしょうか?
全カテゴリーから$ekiの値と一致するカテゴリーを抜き出してIDを取得しなければならないのでしょうか?
そうするしかないと思いますよ。
全カテゴリーを取得するには get_categories() が使えます。カテゴリーオブジェクトの配列が返されるのでオブジェクトのnameが$ekiに一致するものを探します。みつけたオブジェクトのterm_idを別の配列へ入れればよいでしょう。
関数リファレンス/get categories
返事が遅くなり申し訳ありません。
やっと解決したのでご報告です。
$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() について別な問題が出てきたので、これは改めて質問させていただきます。よろしくお願いします。