質問: ### 目的 タグをフロントエンドで選択保存すべく、後述のように`wp_set_object_terms`を使っています。 機能の実装はできたのですが、**タグ数が多いので保存の関数を一括させたい**と考えています。 ### 現状のコード 現状は1つず保存しています。 ``` // 選択 one two three // 保存(1つずつ) if (isset($_POST) && $_POST['one']!='') { wp_set_object_terms( $topic_id, 'one', 'custom-tag', true ); } if (isset($_POST) && $_POST['two']!='') { wp_set_object_terms( $topic_id, 'two', 'custom-tag', true ); } if (isset($_POST) && $_POST['three']!='') { wp_set_object_terms( $topic_id, 'three', 'custom-tag', true ); } ``` しかしタグは`one`と`two`と`three`だけでなくたくさんあるので、上の保存を一括させたいです。 ### 目的のためのコード そこで保存の部分を配列で一括させるべく、次のようなコードに挑戦してみました。 ``` // 選択 one two three // 保存(一括) if (isset($_POST) && $_POST['custom-tag']!='') { wp_set_object_terms( $post_id, 'custom-tag[]', 'custom-tag', true ); } ``` しかしこれではうまくいきませんでした。 たとえば`one`と`two`にチェックして保存しても、`custom-tag[]`という文字がそのまま、`custom-tag`のタグとして保存されてしまいます。 言うまでもなく保存したいのは`one`と`two`で、`custom-tag[]`という文字列ではありません...。 そのためにどこを書き直せばいいか、もしお分かりになる方がいらっしゃいましたらご教示頂けましたら幸いです。 宜しくお願い致します。
回答: > > wp_set_object_terms( $post_id, 'custom-tag[]', 'custom-tag', true ); > > > は、'custom-tag[]' という文字列を渡しているので、そのまま登録されてしまいます。 まとめて渡すのであれば、配列を渡す必要があります。 $_POST['custom-tag'] に入っているのが、custom-tag タームの ID かスラッグであれば、試していませんが、こんな感じでどでしょうか? ``` if (isset($_POST) && $_POST['custom-tag']!='') { wp_set_object_terms( $post_id, $_POST['custom-tag'], 'custom-tag', true ); } ``` 関数リファレンス/wp_set_object_terms 参照