次のようなハードコードを使用している場合は、カスタムサブメニューページから。
$post_id = 111;
$flightCategory = array( 25 );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
ページを更新すると、希望のカスタム分類法の用語がCPTに割り当てられます。しかし、<form>
から値を取得している次のコードに進むと、以前のようには動作しません。
if( $flightID !== NULL && $flightCat !== '-1' && !empty( $flightCat ) ) {
$flightCount = count( $flightID );
foreach ( $flightID as $post_id ) {
$flightCategory = array( $flightCat ); //inactive = 25, active = 26
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
}
$success = sprintf( __('<strong>SUCCESS:</strong> %d Flight information has been affected', 'textdomain'), $flightCount);
} else {
$error = __('<strong>ERROR:</strong> You can\'t pass any empty field', 'textdomain');
}
このコードブロックが実行していること、それはスラッグ '25'を持つ '25'という名前の新しいTermを単に追加します。以下のような配列を渡さないようにしました。
$flightCategory = $flightCat;
しかし、結果は同じです。何がおかしいのですか?
どちらの場合も問題は他にはありませんが、2番目のパラメータに送信している主な値、あなたの場合は$flightCategory
です。
$flightCategory = array( 25 );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
しかし、後のバージョンではどういうわけか、文字通りあなたは実際に以下のようなものを渡しています。
$flightCategory = array( '25' );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
25
に関するSINGLE QUOTEに注意しましたか?それが実際に問題を引き起こしています。最初のコードダンプであなたが見るでしょうので:
array(1) { [0]=> int(25) }
そして二番目に:
array(1) { [0]=> string(2) "25" }
あなたは実際に文字列を渡しています、そして関数はそれを理解しています、さて、私は 用語名 を得たので、それで。しかし、整数を使ってあなたが実際に言っているのは、{ちょっと関数、Term IDを取得しました。IDだけを追加/更新してください} _です。
問題を解決するためには、簡単なことをしなければなりません:
$flightCategory = (int)$flightCat; //make it integer whatever you get
または、
$flightCategory = array( (int)$flightCat ); //make the array value integer whatever you get