WordPress.org

Make WordPress Core

Ticket #43517: 43517.6.patch

File 43517.6.patch, 4.1 KB (added by enrico.sorcinelli, 17 months ago)
  • src/wp-includes/post.php

    diff --git src/wp-includes/post.php src/wp-includes/post.php
    index 65c7b6c15c..2e472e40c1 100644
    function wp_insert_post( $postarr, $wp_error = false ) { 
    40364036        // Add default term for all associated custom taxonomies.
    40374037        if ( 'auto-draft' !== $post_status ) {
    40384038                foreach ( get_object_taxonomies( $post_type, 'object' ) as $taxonomy => $tax_object ) {
    4039                         if ( ! empty( $tax_object->default_term ) && ( empty( $postarr['tax_input'] ) || ! isset( $postarr['tax_input'][ $taxonomy ] ) ) ) {
    4040                                 $postarr['tax_input'][ $taxonomy ] = array();
     4039
     4040                        if ( ! empty( $tax_object->default_term ) ) {
     4041
     4042                                // Filter out empty terms.
     4043                                if ( isset( $postarr['tax_input'] ) && is_array( $postarr['tax_input'][ $taxonomy ] ) ) {
     4044                                        $postarr['tax_input'][ $taxonomy ] = array_filter( $postarr['tax_input'][ $taxonomy ] );
     4045                                }
     4046
     4047                                // Passed custom taxonomy list overwrites existing list if not empty.
     4048                                $terms = wp_get_object_terms( $post_ID, $taxonomy, array( 'fields' => 'ids' ) );
     4049                                if ( ! empty( $terms) && empty( $postarr['tax_input'][ $taxonomy ] ) ){
     4050                                        $postarr['tax_input'][ $taxonomy ] = $terms;
     4051                                }
     4052
     4053                                if ( empty( $postarr['tax_input'][ $taxonomy ] ) ) {
     4054                                        $default_term_id = get_option( 'default_taxonomy_' . $taxonomy );
     4055                                        if ( ! empty( $default_term_id ) ) {
     4056                                                $postarr['tax_input'][ $taxonomy ] = array( (int) $default_term_id );
     4057                                        }
     4058                                }
    40414059                        }
    40424060                }
    40434061        }
  • src/wp-includes/taxonomy.php

    diff --git src/wp-includes/taxonomy.php src/wp-includes/taxonomy.php
    index e0acadcf87..aa2b757bbe 100644
    function unregister_taxonomy( $taxonomy ) { 
    506506        $taxonomy_object->remove_rewrite_rules();
    507507        $taxonomy_object->remove_hooks();
    508508
     509        // Remove custom taxonomy default term option.
     510        if ( ! empty( $taxonomy_object->default_term ) ) {
     511                delete_option( 'default_taxonomy_' . $taxonomy_object->name );
     512        }
     513
    509514        // Remove the taxonomy.
    510515        unset( $wp_taxonomies[ $taxonomy ] );
    511516
    function wp_delete_term( $term, $taxonomy, $args = array() ) { 
    18241829                }
    18251830        }
    18261831
     1832        // Don't delete the default custom taxonomy term.
     1833        $taxonomy_object = get_taxonomy( $taxonomy );
     1834        if ( ! empty( $taxonomy_object->default_term ) ) {
     1835                $defaults['default'] = (int) get_option( 'default_taxonomy_' . $taxonomy );
     1836                if ( $defaults['default'] === $term ) {
     1837                        return 0;
     1838                }
     1839        }
     1840
    18271841        $args = wp_parse_args( $args, $defaults );
    18281842
    18291843        if ( isset( $args['default'] ) ) {
    function wp_set_object_terms( $object_id, $terms, $taxonomy, $append = false ) { 
    25122526                $terms = array( $terms );
    25132527        }
    25142528
    2515         // Add default term.
    2516         $taxonomy_obj = get_taxonomy( $taxonomy );
    2517 
    2518         // Default term for this taxonomy.
    2519         $default_term_id = get_option( 'default_taxonomy_' . $taxonomy );
    2520         if ( empty( $terms ) && ! empty( $taxonomy_obj->default_term ) && ! empty( $default_term_id ) ) {
    2521                 $terms[] = (int) $default_term_id;
    2522         }
    2523 
    25242529        if ( ! $append ) {
    25252530                $old_tt_ids = wp_get_object_terms(
    25262531                        $object_id,
  • tests/phpunit/tests/taxonomy.php

    diff --git tests/phpunit/tests/taxonomy.php tests/phpunit/tests/taxonomy.php
    index 7a5a065be1..cd87415b65 100644
    class Tests_Taxonomy extends WP_UnitTestCase { 
    999999                        )
    10001000                );
    10011001
     1002                // Test default category.
    10021003                $term = wp_get_post_terms( $post_id, $tax );
    10031004                $this->assertSame( get_option( 'default_taxonomy_' . $tax ), $term[0]->term_id );
    10041005
     1006                // Test default term deletion.
     1007                $this->assertSame( wp_delete_term( $term[0]->term_id, $tax ), 0 );
     1008
    10051009                // Add custom post type.
    10061010                register_post_type(
    10071011                        'post-custom-tax',
    class Tests_Taxonomy extends WP_UnitTestCase { 
    10171021                );
    10181022                $term    = wp_get_post_terms( $post_id, $tax );
    10191023                $this->assertSame( get_option( 'default_taxonomy_' . $tax ), $term[0]->term_id );
     1024
     1025                // wp_set_object_terms shouldn't assign default category.
     1026                wp_set_object_terms( $post_id, array(), $tax );
     1027                $term = wp_get_post_terms( $post_id, $tax );
     1028                $this->assertSame( array(), $term );
     1029
     1030                unregister_taxonomy( $tax );
     1031                $this->assertSame( get_option( 'default_taxonomy_' . $tax ), false );
    10201032        }
    10211033}