Aktualisieren Sie alle Posts in benutzerdefinierten Post-Typen mit wp_cron ()?

Ich habe eine function erstellt, um einen Taxonomiebegriff auf Post anzuwenden, wenn ein Post-Meta-Wert auf True gesetzt ist. Dies funktioniert wie es sollte. Das Problem, mit dem ich konfrontiert bin, ist, dass es nur aktualisiert wird, nachdem ich den Post manuell gespeichert / aktualisiert habe. Gibt es eine Möglichkeit, dies zu planen oder dynamisch für alle Posts innerhalb des benutzerdefinierten Post-Typs zu tun? Mein Code für die Taxonomie-Term-function:

function save_cp_term_meta( $post_id, $post, $update ) { $termshouldbe='new'; $meta_value = get_post_meta( $post->ID, 'new_used_cat', true ); if (!empty( $meta_value )) {$termshouldbe='used';} else {} wp_set_object_terms($post_id,$termshouldbe,'vehicle_condition',false); } add_action( 'save_post', 'save_cp_term_meta', 10, 3 ); 

Solutions Collecting From Web of "Aktualisieren Sie alle Posts in benutzerdefinierten Post-Typen mit wp_cron ()?"

Ja, Sie können einen WP-Cron-Job so planen, dass er alle Posts eines Post-Typs durchläuft und die Überprüfung durchführt / den Term hinzufügt. Ich würde das nicht für eine sehr große Seite mit tausenden von Posts empfehlen.

Im Beispiel unten würde der geplante Job ungefähr einmal pro Tag ausgeführt werden – denken Sie daran, dass wp cron nicht sehr genau ist, er plant die nächste Aufgabe nur, wenn Ihre Site besucht wurde (mehr dazu in dieser Frage )

 // Scheduled job callback function run_update_tax_cron_job( ) { $posts = get_posts( [ 'post_type' => 'your-post-type-slug', 'posts_per_page' => -1, // getting all posts of a post type 'no_found_rows' => true, //speeds up a query significantly and can be set to 'true' if we don't use pagination 'fields' => 'ids', //again, for performance ] ); //now check meta and update taxonomy for every post foreach( $posts as $post_id ){ $meta_value = get_post_meta( $post->ID, 'new_used_cat', true ); $new_term = ! empty( $meta_value ) ? 'used' : 'new'; wp_set_object_terms( $post_id, $new_term ,'vehicle_condition', false); } } // Schedule Cron Job Event function udpdate_taxonomy_cron_job() { if ( ! wp_next_scheduled( 'run_update_tax_cron_job' ) ) { wp_schedule_event( current_time( 'timestamp' ), 'daily', 'run_update_tax_cron_job' ); } } add_action( 'wp', 'udpdate_taxonomy_cron_job' );