I wish to change the custom taxonomy for the custom post type after a certain time similar to post expiration.
Custom taxonomy: current-status
term-id: 368
post-type: job
I have created the function wp_set_post_categories
and wish to include it in the post-job template in the generatepress child theme after generate_do_template_part( \'page\' );
.
Does this create any issues?
$nvs_taxonomy = \'custom-status\';
//expiration time
$expirationtime = get_post_meta($post->ID, \'expiration\', false);
if( count( $expirationtime ) != \'\' ) {
if (is_array($expirationtime)) {
$expirestring = implode($expirationtime);
}
$secondsbetween = strtotime($expirestring)-time();
if ( $secondsbetween >= 0 ) {
echo \'This post will expire on \' .$expirestring.\'\';
the_content();
} else {
function set_new_category( $post_id ) {
//Define new category by ID
$new_category = array( 368 );
$old_term = wp_get_post_terms( $post_id, $nvs_taxonomy );
if( is_array( $old_term ) && ! empty( $old_term ) ) {
if ( in_array( \'custom-status\', $old_term ) {
wp_set_post_categories( $post_id, $new_category, $append = true );
}
}
}
}
}
Following the advice of Mr. @Buttered_Toast I have modified the code little bit to use timestamp data directly. However, in that, I have noticed a "PHP Warning: A non-numeric value encountered in /single-job.php on line 34"
if ( generate_has_default_loop() ) {
while ( have_posts() ) :
the_post();
$expire_timestamp = rwmb_meta( \'j_post_expire\' );// line 31
$current_time = time(); // line 32
// Ensure the timestamp parsed correctly.
if ( $expire_timestamp ) {
$seconds_between = $expire_timestamp - $current_time; //line 34
if ( $seconds_between >= 0 ) {
generate_do_template_part( \'single\' );
} else {
wp_set_post_terms( $post->ID, array ( 368 ), \'current-status\', true );
wp_remove_object_terms( $post->ID, array ( 367 ), \'current-status\' );
generate_do_template_part( \'single\' );
}
} else {
generate_do_template_part( \'single\' );
}
endwhile;
}
To overcome the non-numeric error, I have initialized the variable ($seconds_between) as an integer.
$seconds_between = 0; //intialize as integer after line 32
In other way, we can define other variables ($current_time and $expire_timestamp) with (int)
$seconds_between = (int)$expire_timestamp - (int)$current_time;//declaring variables as integer
- If there is any better way, please share to correct it