À partir d'une page de sous-menu personnalisée si j'utilise un code dur tel que:
$post_id = 111;
$flightCategory = array( 25 );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
Et actualisez la page, il affecte simplement les termes de taxonomie personnalisée souhaités au CPT. Mais si je continue avec le code suivant, où je prends les valeurs d'un <form>
, il ne fonctionnera pas comme auparavant.
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');
}
Ce que fait ce bloc de code, il ajoute simplement un nouveau terme nommé "25" avec un slug "25". J'ai essayé de ne pas passer un tableau comme ci-dessous:
$flightCategory = $flightCat;
Mais le résultat est identique. Qu'est-ce que je fais mal?
Dans les deux cas, le problème n'est pas les autres choses, mais la valeur principale de ce que vous envoyez au deuxième paramètre, dans votre cas, $flightCategory
:
$flightCategory = array( 25 );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
Mais sur la version ultérieure, vous passez littéralement quelque chose comme ci-dessous:
$flightCategory = array( '25' );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );
Avez-vous noté le DEVIS UNIQUE autour de 25
? C'est en fait la cause du problème. Parce que sur le premier dump de code, vous verrez:
array(1) { [0]=> int(25) }
Et sur le second:
array(1) { [0]=> string(2) "25" }
Vous passez en fait une chaîne, et la fonction comprend que, OK, j'ai le Nom du terme , ainsi soit-il. Mais avec un entier que vous dites réellement, Hey, vous avez maintenant l’identifiant du terme, ajoutez/mettez à jour l’ID uniquement}.
Pour résoudre le problème, vous devez faire une chose simple:
$flightCategory = (int)$flightCat; //make it integer whatever you get
ou,
$flightCategory = array( (int)$flightCat ); //make the array value integer whatever you get
En savoir plus sur PHP Transtypage de types .