WordPress.org

Make WordPress Core

Changeset 33041


Ignore:
Timestamp:
07/02/15 00:21:28 (3 years ago)
Author:
obenland
Message:

Turn of comments for pages by default.

Pages are static content, for which comments are not expected out of the box.

Props valendesigns, rachelbaker.
Fixes #31168.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r32881 r33041  
    31283128    $user_id = get_current_user_id(); 
    31293129 
    3130     $defaults = array('post_status' => 'draft', 'post_type' => 'post', 'post_author' => $user_id, 
    3131         'ping_status' => get_option('default_ping_status'), 'post_parent' => 0, 
    3132         'menu_order' => 0, 'to_ping' =>  '', 'pinged' => '', 'post_password' => '', 
    3133         'guid' => '', 'post_content_filtered' => '', 'post_excerpt' => '', 'import_id' => 0, 
    3134         'post_content' => '', 'post_title' => '', 'context' => ''); 
     3130    $defaults = array( 
     3131        'post_author' => $user_id, 
     3132        'post_content' => '', 
     3133        'post_content_filtered' => '', 
     3134        'post_title' => '', 
     3135        'post_excerpt' => '', 
     3136        'post_status' => 'draft', 
     3137        'post_type' => 'post', 
     3138        'comment_status' => '', 
     3139        'ping_status' => '', 
     3140        'post_password' => '', 
     3141        'to_ping' =>  '', 
     3142        'pinged' => '', 
     3143        'post_parent' => 0, 
     3144        'menu_order' => 0, 
     3145        'guid' => '', 
     3146        'import_id' => 0, 
     3147        'context' => '', 
     3148    ); 
    31353149 
    31363150    $postarr = wp_parse_args($postarr, $defaults); 
     
    33033317    } 
    33043318 
     3319    // Comment status. 
    33053320    if ( empty( $postarr['comment_status'] ) ) { 
    33063321        if ( $update ) { 
    33073322            $comment_status = 'closed'; 
    33083323        } else { 
    3309             $comment_status = get_option('default_comment_status'); 
     3324            $comment_status = get_default_comment_status( $post_type ); 
    33103325        } 
    33113326    } else { 
     
    33163331    $post_content_filtered = $postarr['post_content_filtered']; 
    33173332    $post_author = empty( $postarr['post_author'] ) ? $user_id : $postarr['post_author']; 
    3318     $ping_status = empty( $postarr['ping_status'] ) ? get_option( 'default_ping_status' ) : $postarr['ping_status']; 
     3333    $ping_status = empty( $postarr['ping_status'] ) ? get_default_comment_status( $post_type, 'pingback' ) : $postarr['ping_status']; 
    33193334    $to_ping = isset( $postarr['to_ping'] ) ? sanitize_trackback_urls( $postarr['to_ping'] ) : ''; 
    33203335    $pinged = isset( $postarr['pinged'] ) ? $postarr['pinged'] : ''; 
     
    40574072 
    40584073// 
    4059 // Trackback and ping functions 
     4074// Comment, trackback, and pingback functions. 
    40604075// 
     4076 
     4077/** 
     4078 * Get the default comment status for a post type. 
     4079 * 
     4080 * @since 4.3.0 
     4081 * 
     4082 * @param  string $post_type    Optional. Post type. Default 'post'. 
     4083 * @param  string $comment_type Optional. Comment type. Default 'comment'. 
     4084 * @return string Expected return value is 'open' or 'closed'. 
     4085 */ 
     4086function get_default_comment_status( $post_type = 'post', $comment_type = 'comment' ) { 
     4087    switch ( $comment_type ) { 
     4088        case 'pingback' : 
     4089        case 'trackback' : 
     4090            $supports = 'trackbacks'; 
     4091            $option = 'ping'; 
     4092            break; 
     4093        default : 
     4094            $supports = 'comments'; 
     4095            $option = 'comment'; 
     4096    } 
     4097 
     4098    // Set the status. 
     4099    if ( 'page' === $post_type ) { 
     4100        $status = 'closed'; 
     4101    } elseif ( post_type_supports( $post_type, $supports ) ) { 
     4102        $status = get_option( "default_{$option}_status" ); 
     4103    } else { 
     4104        $status = 'closed'; 
     4105    } 
     4106 
     4107    /** 
     4108     * Filter the default comment status for the given post type. 
     4109     * 
     4110     * @since 4.3.0 
     4111     * 
     4112     * @param string $status       Default status for the given post type, 
     4113     *                             either 'open' or 'closed'. 
     4114     * @param string $comment_type Type of comment. Default is `comment`. 
     4115     */ 
     4116    return apply_filters( "get_{$post_type}_default_comment_status", $status, $comment_type ); 
     4117} 
    40614118 
    40624119/** 
  • trunk/tests/phpunit/tests/post.php

    r32604 r33041  
    951951        } 
    952952    } 
     953 
     954    /** 
     955     * @ticket 31168 
     956     */ 
     957    function test_wp_insert_post_default_comment_ping_status_open() { 
     958        $post_id = $this->factory->post->create( array( 
     959            'post_author' => $this->author_id, 
     960            'post_status' => 'public', 
     961            'post_content' => rand_str(), 
     962            'post_title' => rand_str(), 
     963        ) ); 
     964        $post = get_post( $post_id ); 
     965 
     966        $this->assertEquals( 'open', $post->comment_status ); 
     967        $this->assertEquals( 'open', $post->ping_status ); 
     968    } 
     969 
     970    /** 
     971     * @ticket 31168 
     972     */ 
     973    function test_wp_insert_post_page_default_comment_ping_status_closed() { 
     974        $post_id = $this->factory->post->create( array( 
     975            'post_author' => $this->author_id, 
     976            'post_status' => 'public', 
     977            'post_content' => rand_str(), 
     978            'post_title' => rand_str(), 
     979            'post_type' => 'page', 
     980        ) ); 
     981        $post = get_post( $post_id ); 
     982 
     983        $this->assertEquals( 'closed', $post->comment_status ); 
     984        $this->assertEquals( 'closed', $post->ping_status ); 
     985    } 
     986 
     987    /** 
     988     * @ticket 31168 
     989     */ 
     990    function test_wp_insert_post_cpt_default_comment_ping_status_open() { 
     991        $post_type = rand_str(20); 
     992        register_post_type( $post_type, array( 'supports' => array( 'comments', 'trackbacks' ) ) ); 
     993        $post_id = $this->factory->post->create( array( 
     994            'post_author' => $this->author_id, 
     995            'post_status' => 'public', 
     996            'post_content' => rand_str(), 
     997            'post_title' => rand_str(), 
     998            'post_type' => $post_type, 
     999        ) ); 
     1000        $post = get_post( $post_id ); 
     1001 
     1002        $this->assertEquals( 'open', $post->comment_status ); 
     1003        $this->assertEquals( 'open', $post->ping_status ); 
     1004        _unregister_post_type( $post_type ); 
     1005    } 
     1006 
     1007    /** 
     1008     * @ticket 31168 
     1009     */ 
     1010    function test_wp_insert_post_cpt_default_comment_ping_status_closed() { 
     1011        $post_type = rand_str(20); 
     1012        register_post_type( $post_type ); 
     1013        $post_id = $this->factory->post->create( array( 
     1014            'post_author' => $this->author_id, 
     1015            'post_status' => 'public', 
     1016            'post_content' => rand_str(), 
     1017            'post_title' => rand_str(), 
     1018            'post_type' => $post_type, 
     1019        ) ); 
     1020        $post = get_post( $post_id ); 
     1021 
     1022        $this->assertEquals( 'closed', $post->comment_status ); 
     1023        $this->assertEquals( 'closed', $post->ping_status ); 
     1024        _unregister_post_type( $post_type ); 
     1025    } 
    9531026} 
Note: See TracChangeset for help on using the changeset viewer.