From a custom Submenu Page if I use a hard code like:

$post_id = 111;
$flightCategory = array( 25 );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );

And refresh the page, it simply assigns the desired Custom Taxonomy Terms to the CPT. But if I proceed with the following code, where I’m taking the values from a <form>, it’s not working as previous.

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');
}

What this code block is doing, it simply adds new Term named ’25’ with slug ’25’. I tried to not passing an array like below:

$flightCategory = $flightCat;

But the result is same. What am I doing wrong?

1 Answer
1

In both the cases issue is not the other things, but the main value what you are sending to the second parameter, in your case $flightCategory:

$flightCategory = array( 25 );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );

But on the later version somehow, or literally you are actually passing something like below:

$flightCategory = array( '25' );
var_dump( $flightCategory );
wp_set_object_terms( $post_id, $flightCategory, 'flight_categories' );

Did you note the SINGLE QUOTE around 25? That’s actually causing the issue. Because on the first code dump you will see:

array(1) { [0]=> int(25) }

And on second one:

array(1) { [0]=> string(2) "25" }

You are actually passing a string, and the function understands that, Okay, I got the Term name, so be it. But with an integer you are actually saying, Hey function, now got the Term ID, add/update the ID only.

SOLUTION

To solve the problem you have to do a simple thing:

$flightCategory = (int)$flightCat; //make it integer whatever you get

or,

$flightCategory = array( (int)$flightCat );  //make the array value integer whatever you get

Learn more about PHP Type casting.

Leave a Reply

Your email address will not be published. Required fields are marked *