wp_set_object_terms() nu înlocuiește termenul, ci creează unul nou
Dintr-o Pagină Submeniu personalizată, dacă folosesc un cod direct precum:
$post_id = 111;
$flightCategory = array( 25 );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
Și reîmprospătez pagina, acesta pur și simplu atribuie Termenii de Taxonomie Personalizați doriți către CPT. Dar dacă procedez cu următorul cod, unde preiau valorile dintr-un <form>
, nu funcționează ca mai sus.
if( $flightID !== NULL && $flightCat !== '-1' && !empty( $flightCat ) ) {
$flightCount = count( $flightID );
foreach ( $flightID as $post_id ) {
$flightCategory = array( $flightCat ); //inactiv = 25, activ = 26
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
}
$success = sprintf( __('<strong>SUCCES:</strong> %d Informații despre zbor au fost afectate', 'textdomain'), $flightCount);
} else {
$error = __('<strong>EROARE:</strong> Nu poți transmite niciun câmp gol', 'textdomain');
}
Ce face acest bloc de cod, pur și simplu adaugă un nou Termen numit '25' cu slug-ul '25'. Am încercat să nu transmit un array precum mai jos:
$flightCategory = $flightCat;
Dar rezultatul este același. Ce fac greșit?

În ambele cazuri, problema nu este legată de alte aspecte, ci de valoarea principală pe care o transmiți celui de-al doilea parametru, în cazul tău $flightCategory
:
$flightCategory = array( 25 );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
Dar în versiunea ulterioară, cumva sau literal, tu transmiți ceva de genul următor:
$flightCategory = array( '25' );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
Ai observat GHILIMELELE SIMPLE în jurul lui 25
? Aceasta este de fapt cauza problemei. Pentru că în primul dump de cod vei vedea:
array(1) { [0]=> int(25) }
Iar în al doilea:
array(1) { [0]=> string(2) "25" }
De fapt, tu transmiți un șir de caractere, iar funcția înțelege asta: Bine, am primit Numele termenului, așa să fie. Dar cu un întreg, tu spui de fapt: Hei funcție, am primit acum ID-ul termenului, adaugă/actualizează doar ID-ul.
SOLUȚIE
Pentru a rezolva problema, trebuie să faci un lucru simplu:
$flightCategory = (int)$flightCat; //converteste-l la întreg orice ai primi
sau,
$flightCategory = array( (int)$flightCat ); //convertește valoarea din array la întreg orice ai primi
Află mai multe despre Conversia de tip în PHP.
