Ticket #16379: 16379.6.diff

File 16379.6.diff, 6.2 KB (added by nacin, 8 months ago)
  • wp-admin/options.php

     
    6262        'general' => array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string' ), 
    6363        'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ), 
    6464        'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ), 
    65         'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'page_on_front', 'page_for_posts', 'blog_public' ), 
     65        'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'blog_public' ), 
    6666        'writing' => array( 'use_smilies', 'default_category', 'default_email_category', 'use_balanceTags', 'default_link_category', 'default_post_format' ) 
    6767); 
    6868$whitelist_options['misc'] = $whitelist_options['options'] = $whitelist_options['privacy'] = array(); 
  • wp-admin/includes/post.php

     
    13371337 * @since 3.5.0 
    13381338 * @access private 
    13391339 */ 
    1340 function _create_pages_for_reading_settings() { 
    1341         // If we're saving the Reading Settings screen, intercept. 
    1342         if ( ! isset( $_POST['show_on_front'] ) ) 
    1343                 return; 
     1340function _create_pages_for_reading_settings( $show_on_front_value ) { 
     1341        // If we're not saving the Reading Settings screen, don't intercept. 
     1342        if ( ! $_POST || ! strpos( wp_get_referer(), 'options-reading.php' ) ) 
     1343                return $show_on_front_value; 
    13441344 
     1345        if ( 'posts' == $show_on_front_value ) { 
     1346                update_option( 'page_on_front', 0 ); 
     1347                update_option( 'page_for_posts', 0 ); 
     1348                return $show_on_front_value; 
     1349        } 
     1350 
    13451351        // If a new front page was meant to be created, go forth and create it. 
    1346         if ( isset( $_POST['page_on_front'] ) && 'new' == $_POST['page_on_front'] ) { 
     1352        if ( 'new' == $_POST['page_on_front'] ) { 
     1353 
     1354                // If the user can't create pages, revert. 
    13471355                if ( ! current_user_can( 'create_posts', 'page' ) ) { 
    1348                         $_POST['page_on_front'] = 0; 
    1349                         $_POST['show_on_front'] = 'posts'; 
     1356                        // If an existing page is set, keep things as is, rather than reverting to showing posts. 
     1357                        if ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_on_front' ) ) { 
     1358                                $show_on_front_value = 'page'; 
     1359                        } else { 
     1360                                $show_on_front_value = 'posts'; 
     1361                                update_option( 'page_on_front', 0 ); 
     1362                                update_option( 'page_for_posts', 0 ); 
     1363                        } 
    13501364                        add_settings_error( 'page_on_front', __( 'You are not allowed to create pages on this site.' ) ); 
     1365                        return $show_on_front_value; 
    13511366                } 
    13521367 
    13531368                $existing_page = get_page_by_title( stripslashes( $_POST['page_on_front_title'] ) ); 
    13541369 
    1355                 // If page already exists and it's public, there's no need to create a new page 
     1370                // If page already exists and it's public, there's no need to create a new page. 
    13561371                if ( $existing_page && 'publish' == $existing_page->post_status ) { 
    13571372                        $page_id = $existing_page->ID; 
    13581373                } else { 
     
    13641379                                'ping_status' => 'closed', 
    13651380                                // @todo Create some sort of a 'context' in postmeta so we know we created a page through these means. 
    13661381                                //       Consider then showing that context in the list table as a good-first-step. 
    1367                         ), true ); 
     1382                        ) ); 
    13681383                } 
    13691384 
    1370                 // Make sure page_on_front is properly saved by options.php. 
    1371                 if ( is_wp_error( $page_id ) ) 
    1372                         $_POST['page_on_front'] = 0; 
    1373                 else 
    1374                         $_POST['page_on_front'] = $page_id; 
     1385                if ( $page_id ) { 
     1386                        update_option( 'page_on_front', $page_id ); 
     1387                // If we can't save it, revert. 
     1388                } elseif ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_on_front' ) ) { 
     1389                        $show_on_front_value = 'page'; 
     1390                } else { 
     1391                        $show_on_front_value = 'posts'; 
     1392                        update_option( 'page_on_front', 0 ); 
     1393                        update_option( 'page_for_posts', 0 ); 
     1394                        return $show_on_front_value; 
     1395                } 
     1396        } else { 
     1397                update_option( 'page_on_front', $_POST['page_on_front'] ); 
    13751398        } 
    13761399 
    13771400        // If a page for posts was meant to be specified, update/create it. 
    1378         if ( ! isset( $_POST['page_for_posts'] ) ) 
    1379                 return; 
     1401        if ( ! isset( $_POST['page_for_posts'] ) ) { 
     1402                update_option( 'page_for_posts', 0 ); 
     1403                return $show_on_front_value; 
     1404        } 
    13801405 
    13811406        $page_for_posts = (int) $_POST['page_for_posts']; 
     1407 
    13821408        if ( ! $page_for_posts || ! $page = get_post( $page_for_posts, ARRAY_A ) ) { 
    1383                 $_POST['page_for_posts'] = 0; 
    1384                 return; 
     1409                update_option( 'page_for_posts', 0 ); 
     1410                return $show_on_front_value; 
    13851411        } 
    13861412 
    1387         // @todo The UI (see @todo's in options-reading) should cover the next 3 conditionals, 
    1388         //       which means we shouldn't need to bother with setting a settings error here. 
    1389         //       However, we may wish to restore settings before bailing, beyond setting 
    1390         //       page_for_posts to 0 (which we then expect to get cleaned up by options.php). 
    13911413        if ( 'page' != $page['post_type'] || ! current_user_can( 'edit_post', $page_for_posts ) ) { 
    1392                 $_POST['page_for_posts'] = 0; 
    1393                 return; 
     1414                update_option( 'page_for_posts', 0 ); 
     1415                return $show_on_front_value; 
    13941416        } 
    13951417 
    13961418        if ( 'publish' != $page['post_status'] && ! current_user_can( 'publish_post', $page_for_posts ) ) { 
    1397                 $_POST['page_for_posts'] = 0; 
    1398                 return; 
     1419                update_option( 'page_for_posts', 0 ); 
     1420                return $show_on_front_value; 
    13991421        } 
    14001422 
    14011423        $args = add_magic_quotes( $page ); 
     
    14071429                $args['ping_status'] = 'closed'; 
    14081430        } 
    14091431 
    1410         $page_id = wp_insert_post( $args, true ); 
    1411         if ( is_wp_error( $page_id ) ) 
    1412                 $_POST['page_for_posts'] = 0; 
     1432        $page_id = wp_insert_post( $args ); 
     1433        update_option( 'page_for_posts', $page_id ); 
     1434 
     1435        return $show_on_front_value; 
    14131436} 
    1414 add_filter( 'admin_init', '_create_pages_for_reading_settings' ); 
     1437add_filter( 'sanitize_option_show_on_front', '_create_pages_for_reading_settings' );