Posts, Post Types: Ensure default terms are added by `wp_publish_post()`.
Transitioning posts from `auto-draft` to `publish` via `wp_publish_post()` could result in published posts without the default category or custom taxonomy default terms. Props frank-klein, TimothyBlynJacobs, peterwilsoncc. Fixes #51292. Built from https://develop.svn.wordpress.org/trunk@49000 git-svn-id: http://core.svn.wordpress.org/trunk@48762 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
88ea2929b7
commit
b1505c2d9c
|
@ -4375,6 +4375,33 @@ function wp_publish_post( $post ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure at least one term is applied for taxonomies with a default term.
|
||||||
|
foreach ( get_object_taxonomies( $post->post_type, 'object' ) as $taxonomy => $tax_object ) {
|
||||||
|
// Skip taxonomy if no default term is set.
|
||||||
|
if (
|
||||||
|
'category' !== $taxonomy &&
|
||||||
|
empty( $tax_object->default_term )
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not modify previously set terms.
|
||||||
|
if ( ! empty( get_the_terms( $post, $taxonomy ) ) ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'category' === $taxonomy ) {
|
||||||
|
$default_term_id = (int) get_option( 'default_category', 0 );
|
||||||
|
} else {
|
||||||
|
$default_term_id = (int) get_option( 'default_term_' . $taxonomy, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $default_term_id ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
wp_set_post_terms( $post->ID, array( $default_term_id ), $taxonomy );
|
||||||
|
}
|
||||||
|
|
||||||
$wpdb->update( $wpdb->posts, array( 'post_status' => 'publish' ), array( 'ID' => $post->ID ) );
|
$wpdb->update( $wpdb->posts, array( 'post_status' => 'publish' ), array( 'ID' => $post->ID ) );
|
||||||
|
|
||||||
clean_post_cache( $post->ID );
|
clean_post_cache( $post->ID );
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '5.6-alpha-48999';
|
$wp_version = '5.6-alpha-49000';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue