WordPress.org

Make WordPress Core

Ticket #16379: 16379.12.diff

File 16379.12.diff, 24.2 KB (added by DrewAPicture, 18 months ago)
  • wp-includes/default-filters.php

     
    258258add_action( 'importer_scheduled_cleanup', 'wp_delete_attachment'                           ); 
    259259add_action( 'upgrader_scheduled_cleanup', 'wp_delete_attachment'                           ); 
    260260add_action( 'welcome_panel',              'wp_welcome_panel'                               ); 
     261add_action( 'page_for_posts_message',     'display_page_for_posts_message'                 ); 
    261262 
    262263// Navigation menu actions 
    263264add_action( 'delete_post',                '_wp_delete_post_menu_item'         ); 
  • wp-admin/includes/post.php

     
    13301330} 
    13311331 
    13321332/** 
     1333 * Checks if page on front is set, else shows latests posts 
     1334 * 
     1335 * @since 3.5.0 
     1336 * @access private 
     1337 */ 
     1338 
     1339function _show_on_front_cant_create_pages () { 
     1340         
     1341        // If an existing page is set, keep things as is, rather than reverting to showing posts. 
     1342        if ( get_option( 'page_on_front' ) ) { 
     1343                $show_on_front_value = 'page'; 
     1344        } else { 
     1345                $show_on_front_value = 'posts'; 
     1346                update_option( 'page_on_front', 0 ); 
     1347                update_option( 'page_for_posts', 0 ); 
     1348        } 
     1349        add_settings_error( 'page_on_front', 'create_pages', __( 'You are not allowed to create pages on this site.' ) ); 
     1350        return $show_on_front_value; 
     1351} 
     1352 
     1353/** 
    13331354 * Creates new pages to be set as a front page or a page for posts in Reading Settings. 
    13341355 * 
    13351356 * @todo Make sure we are doing adequate sanitization on success, and cleanup/reset on failure. 
     
    13381359 * @access private 
    13391360 */ 
    13401361function _show_on_front_reading_settings( $show_on_front_value ) { 
     1362         
    13411363        // If we're not saving the Reading Settings screen, don't intercept. 
    13421364        if ( ! $_POST || ! strpos( wp_get_referer(), 'options-reading.php' ) ) 
    13431365                return $show_on_front_value; 
    1344  
     1366                 
     1367        // If 'latest posts' is set, stop here 
    13451368        if ( 'posts' == $show_on_front_value ) { 
    13461369                update_option( 'page_on_front', 0 ); 
    13471370                update_option( 'page_for_posts', 0 ); 
     1371 
    13481372                return $show_on_front_value; 
    13491373        } 
     1374         
     1375        // They didn't select a page at all. Sad face. 
     1376        if ( ! $_POST['page_on_front_title'] ) { 
     1377                $show_on_front_value = 'posts'; 
     1378                update_option( 'page_on_front', 0 ); 
     1379                update_option( 'page_for_posts', 0 ); 
     1380                add_settings_error( 'page_on_front', 'no_page_selected', __( 'You must select a page to set a static front page.' ) ); 
     1381                return $show_on_front_value; 
     1382        } 
     1383         
     1384        // PAGE_ON_FRONT 
     1385        $existing_page_on_front = get_page_by_title( stripslashes( $_POST['page_on_front_title'] ) ); 
    13501386 
    1351         // If a new front page was meant to be created, go forth and create it. 
    1352         if ( 'new' == $_POST['page_on_front'] ) { 
    1353  
     1387        if ( $existing_page_on_front && $existing_page_on_front->ID && 'publish' == $existing_page_on_front->post_status && 'page' == $existing_page_on_front->post_type ) { 
     1388                 
     1389                // If a page exists with this same title, use it 
     1390                update_option( 'page_on_front', (int) $existing_page_on_front->ID ); 
     1391        } else { 
     1392                 
    13541393                // If the user can't create pages, revert. 
    13551394                if ( ! current_user_can( 'create_posts', 'page' ) ) { 
    1356                         // If an existing page is set, keep things as is, rather than reverting to showing posts. 
    1357                         if ( 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                         } 
    1364                         add_settings_error( 'page_on_front', 'create_pages', __( 'You are not allowed to create pages on this site.' ) ); 
    1365                         return $show_on_front_value; 
     1395                        return _show_on_front_cant_create_pages(); 
    13661396                } 
    1367  
    1368                 $existing_page = get_page_by_title( stripslashes( $_POST['page_on_front_title'] ) ); 
    1369  
    1370                 // If page already exists and it's public, there's no need to create a new page. 
    1371                 if ( $existing_page && 'publish' == $existing_page->post_status ) { 
    1372                         $page_id = $existing_page->ID; 
    1373                 } else { 
    1374                         $page_id = wp_insert_post( array( 
    1375                                 'post_title' => $_POST['page_on_front_title'], 
    1376                                 'post_type' => 'page', 
    1377                                 'post_status' => 'publish', 
    1378                                 'comment_status' => 'closed', 
    1379                                 'ping_status' => 'closed', 
    1380                                 // @todo Create some sort of a 'context' in postmeta so we know we created a page through these means. 
    1381                                 //       Consider then showing that context in the list table as a good-first-step. 
    1382                         ) ); 
    1383                 } 
    1384  
     1397                 
     1398                // Create new page 
     1399                $page_id = wp_insert_post( array( 
     1400                        'post_title' => wp_strip_all_tags( $_POST['page_on_front_title'] ), 
     1401                        'post_type' => 'page', 
     1402                        'post_status' => 'publish', 
     1403                        'comment_status' => 'closed', 
     1404                        'ping_status' => 'closed' 
     1405                        // @todo Create some sort of a 'context' in postmeta so we know we created a page through these means. 
     1406                        //       Consider then showing that context in the list table as a good-first-step. 
     1407                ) ); 
     1408                 
    13851409                if ( $page_id ) { 
    13861410                        update_option( 'page_on_front', $page_id ); 
    1387                 // If we can't save it, revert. 
    1388                 } elseif ( get_option( 'page_on_front' ) ) { 
    1389                         // If an existing page is set, keep things as is, rather than reverting to showing posts. 
    1390                         $show_on_front_value = 'page'; 
    13911411                } else { 
    1392                         $show_on_front_value = 'posts'; 
    1393                         update_option( 'page_on_front', 0 ); 
    1394                         update_option( 'page_for_posts', 0 ); 
    1395                         return $show_on_front_value; 
     1412                 
     1413                        // If we can't save it, revert. 
     1414                        return _show_on_front_cant_create_pages(); 
    13961415                } 
    1397         } elseif ( $_POST['page_on_front'] ) { 
    1398                 update_option( 'page_on_front', $_POST['page_on_front'] ); 
    1399         } else { 
    1400                 // They didn't select a page at all. Sad face. 
    1401                 $show_on_front_value = 'posts'; 
    1402                 update_option( 'page_on_front', 0 ); 
    1403                 update_option( 'page_for_posts', 0 ); 
    1404                 add_settings_error( 'page_on_front', 'no_page_selected', __( 'You must select a page to set a static front page.' ) ); 
    1405                 return $show_on_front_value; 
    14061416        } 
    1407  
    1408         // If a page for posts was meant to be specified, update/create it. 
    1409         if ( ! isset( $_POST['page_for_posts'] ) ) { 
    1410                 update_option( 'page_for_posts', 0 ); 
     1417         
     1418        // PAGE_FOR_POSTS 
     1419        if ( ! isset( $_POST['page_for_posts_name'] ) ) { 
    14111420                return $show_on_front_value; 
    14121421        } 
    1413  
    1414         $page_for_posts = (int) $_POST['page_for_posts']; 
    1415  
    1416         if ( ! $page_for_posts || ! $page = get_post( $page_for_posts, ARRAY_A ) ) { 
    1417                 update_option( 'page_for_posts', 0 ); 
    1418                 return $show_on_front_value; 
     1422         
     1423        $existing_page_for_posts = get_page_by_path( stripslashes( $_POST['page_for_posts_name'] ) ); 
     1424         
     1425        if ( $existing_page_for_posts && $existing_page_for_posts->ID && 'publish' == $existing_page_for_posts->post_status && 'page' == $existing_page_for_posts->post_type ) { 
     1426                 
     1427                // If a page exists with this same name, use it 
     1428                update_option( 'page_for_posts', (int) $existing_page_for_posts->ID ); 
     1429        } else { 
     1430                 
     1431                // If the user can't create pages, revert. 
     1432                if ( ! current_user_can( 'create_posts', 'page' ) ) { 
     1433                        return _show_on_front_cant_create_pages(); 
     1434                } 
     1435                 
     1436                // Create new page 
     1437                $page_id = wp_insert_post( array( 
     1438                        'post_title' => 'Latest posts', 
     1439                        'post_name' => wp_strip_all_tags( $_POST['page_for_posts_name'] ), 
     1440                        'post_type' => 'page', 
     1441                        'post_status' => 'publish', 
     1442                        'comment_status' => 'closed', 
     1443                        'ping_status' => 'closed' 
     1444                ) ); 
     1445                 
     1446                if ( $page_id ) { 
     1447                        update_option( 'page_for_posts', $page_id ); 
     1448                } else { 
     1449                 
     1450                        // If we can't save it, revert. 
     1451                        return _show_on_front_cant_create_pages(); 
     1452                } 
    14191453        } 
    14201454 
    1421         if ( 'page' != $page['post_type'] || ! current_user_can( 'edit_post', $page_for_posts ) ) { 
    1422                 update_option( 'page_for_posts', 0 ); 
    1423                 return $show_on_front_value; 
    1424         } 
    1425  
    1426         if ( 'publish' != $page['post_status'] && ! current_user_can( 'publish_post', $page_for_posts ) ) { 
    1427                 update_option( 'page_for_posts', 0 ); 
    1428                 return $show_on_front_value; 
    1429         } 
    1430  
    1431         $args = add_magic_quotes( $page ); 
    1432         $args['post_title']  = $_POST['page_for_posts_title']; 
    1433         $args['post_name']   = $_POST['post_name']; 
    1434         $args['post_status'] = 'publish'; 
    1435         if ( 'auto-draft' == $page['post_status'] ) { 
    1436                 $args['comment_status'] = 'closed'; 
    1437                 $args['ping_status'] = 'closed'; 
    1438         } 
    1439  
    1440         $page_id = wp_insert_post( $args ); 
    1441         update_option( 'page_for_posts', $page_id ); 
    1442  
    14431455        return $show_on_front_value; 
    14441456} 
    1445 add_filter( 'sanitize_option_show_on_front', '_show_on_front_reading_settings' ); 
     1457add_filter( 'sanitize_option_show_on_front', '_show_on_front_reading_settings' ); 
     1458 No newline at end of file 
  • wp-admin/edit-form-advanced.php

     
    306306wp_nonce_field( 'autosave', 'autosavenonce', false ); 
    307307wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); 
    308308wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); 
    309 ?> 
    310309 
     310do_action( 'page_for_posts_message' ); 
     311 
     312function display_page_for_posts_message () {  
     313        global $post; 
     314         
     315        if ( $post->ID == get_option( 'page_for_posts' ) ) { ?> 
     316                <div class="updated message">  
     317                        <p><?php echo sprintf( __( 'This page is set to display your <a href="%s">latest posts</a>. As a result, the main content for this page (as seen in the editor below) will not be displayed. Visit your <a href="%s">reading settings</a> to change the \'front page displays\' option.' ), 'options-reading.php', 'options-reading.php' ); ?></p> 
     318                </div> 
     319<?php  
     320        } 
     321} ?> 
     322 
    311323<div id="poststuff"> 
    312324 
    313325<div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>"> 
  • wp-admin/css/ie.css

     
    601601 
    602602* html #adminmenu div.wp-menu-image { 
    603603        height: 29px; 
    604 } 
     604} 
     605 No newline at end of file 
  • wp-admin/css/wp-admin.css

     
    43434343        margin-top: 12px; 
    43444344} 
    43454345 
    4346 .form-table input.tog { 
    4347         margin-top: 2px; 
    4348         margin-right: 2px; 
    4349         float: left; 
    4350 } 
    4351  
    43524346.form-table td p { 
    43534347        margin-top: 4px; 
    43544348} 
     
    50405034        margin: -3px 3px; 
    50415035} 
    50425036 
    5043 .js.options-reading-php .if-page-on-front, 
    5044 .js.options-reading-php .if-page-for-posts, 
    5045 .options-reading-php .if-new-front-page { 
     5037#front-static-pages .pfp-wrapper { 
     5038        display: inline-block; 
     5039        position: relative; 
     5040} 
     5041 
     5042#front-static-pages .pfp-wrapper .description { 
     5043        white-space: nowrap; 
     5044} 
     5045 
     5046#front-static-pages .pfp-slash { 
     5047        left: 6px; 
     5048        position: absolute; 
     5049        top: 1px; 
     5050} 
     5051 
     5052#page_for_posts_name { 
     5053        margin: 0; 
     5054        padding-left: 8px; 
     5055        width: 170px; 
     5056} 
     5057 
     5058#page_on_front_title { 
     5059        margin: 0; 
     5060        width: 170px; 
     5061} 
     5062 
     5063#front-static-pages .page-options { 
    50465064        display: none; 
     5065        margin-top: 8px; 
    50475066} 
    5048 .options-reading-php .page-on-front .if-page-on-front, 
    5049 .options-reading-php .page-for-posts .if-page-for-posts { 
     5067 
     5068.page-options .sample-url { 
     5069        color: #888; 
     5070        font-size: 11px; 
     5071} 
     5072 
     5073.static-front-page #front-static-pages .page-options { 
    50505074        display: block; 
    50515075} 
    5052 .options-reading-php .new-front-page .if-new-front-page { 
    5053         display: inline; 
    5054 } 
    50555076 
    50565077/*------------------------------------------------------------------------------ 
    50575078  21.0 - Admin Footer 
  • wp-admin/options-reading.php

     
    1616$parent_file = 'options-general.php'; 
    1717 
    1818wp_enqueue_script( 'sample-permalink' ); 
     19wp_enqueue_script( 'jquery-ui-core' ); 
     20wp_enqueue_script( 'jquery-ui-autocomplete' ); 
    1921 
    2022/** 
    2123 * Display JavaScript on the page. 
     
    2325 * @since 3.5.0 
    2426 */ 
    2527function options_reading_add_js() { 
     28 
     29$all_pages = get_pages(); 
     30 
     31// Populate autocomplete options 
     32$page_titles_json = $page_names_json = array(); 
     33 
     34foreach ( $all_pages as $page ) { 
     35        array_push( $page_titles_json, array(  
     36                'id' => $page->ID, 
     37                'label' => $page->post_title, 
     38                'post_name' => $page->post_name 
     39        ) ); 
     40         
     41        array_push( $page_names_json, array(  
     42                'id' => $page->ID, 
     43                'label' => $page->post_name, 
     44                'post_title' => $page->post_title 
     45        ) ); 
     46} 
    2647?> 
    2748<script> 
    28 jQuery(document).ready( function($) { 
    29         var section = $('#front-static-pages'); 
    30         $('#show_on_front').change( function() { 
    31                 var checked = $(this).prop('checked'); 
    32                 section.toggleClass('page-on-front', checked); 
    33                 if ( checked ) 
    34                         $('#page_for_posts').prop('checked', true).change(); 
    35                 else 
    36                         section.removeClass('page-for-posts'); 
    37         }); 
    38         $('#page_for_posts').change( function() { 
    39                 section.toggleClass('page-for-posts', $(this).prop('checked')); 
    40         }); 
    41         $('#page_on_front').change( function() { 
    42                 section.toggleClass('new-front-page', 'new' === $(this).val()); 
    43         }); 
    44 }); 
     49    jQuery( function( $ ) { 
     50                var pageTitles = <?php echo json_encode( $page_titles_json ); ?>, 
     51                        pageNames = <?php echo json_encode( $page_names_json ); ?>; 
     52                         
     53                $( document ).ready( function () { 
     54                        $( '.tog' ).change( function () { 
     55                                if ( 'page' === $( this ).val() ) { 
     56                                        $( '.form-table' ).addClass( 'static-front-page' ); 
     57                                } else { 
     58                                        $( '.form-table' ).removeClass( 'static-front-page' ); 
     59                                } 
     60                        }); 
     61                        $( '#page_on_front_title' ).keyup( function () { 
     62                                 
     63                                // Hide edit link 
     64                                $( this ).parent().find( '.description' ).hide(); 
     65                        }); 
     66                        $( '#page_for_posts_name' ).keyup( function () { 
     67                                thisVal = $( this ).val(); 
     68                                 
     69                                // Update example URL 
     70                                $( '.page_for_posts_url' ).html( thisVal ); 
     71                                 
     72                                // Hide edit link 
     73                                $( this ).parent().find( '.description' ).hide(); 
     74                        }); 
     75                }); 
     76                         
     77                addAutocomplete( 'page_on_front_title', pageTitles, 'page_on_front' ); 
     78                addAutocomplete( 'page_for_posts_name', pageNames, 'page_for_posts' ); 
     79                 
     80                function addAutocomplete ( textbox, source, hidden ) { 
     81                $( '#' + textbox ).autocomplete( { 
     82                                source: source, 
     83                                minLength: 1, 
     84                                delay: 0, 
     85                                autoFocus: true, 
     86                                response: function( event, ui ) { 
     87                                         
     88                                        // If this value doesn't exist in dropdown, show 'add new page' option at top 
     89                                        if ( ! isNewPage( source, $( this ).val() ) ) { 
     90                                                ui.content.unshift( { 
     91                                                        'id': 0, 
     92                                                        'label': '-- Add new page --', 
     93                                                        'post_name': null 
     94                                                } ); 
     95                                        } 
     96                                }, 
     97                                select: function( event, ui ) { 
     98                                        var thisVal = $( this ).val(); 
     99                                         
     100                                        // Update example URL on click 
     101                                        if ( 'page_for_posts_name' === textbox ) 
     102                                                $( '.page_for_posts_url' ).html( ui.item.label ); 
     103                                         
     104                                        if ( 0 === ui.item.id ){ 
     105                                                setTimeout( function () { 
     106                                                        $( '#' + textbox ).val( thisVal ).focus(); 
     107                                                }, 30); 
     108                                        } 
     109                                         
     110                                        if ( ui.item.id ) { 
     111                                                var thisId = ui.item.id; 
     112                                        } else { 
     113                                                var thisId = 'new'; 
     114                                        } 
     115                                        $( '#' + hidden ).val( thisId ); 
     116                                } 
     117                        } ); 
     118            } 
     119            function isNewPage ( source, label ) { 
     120 
     121                        for ( i=0; i<source.length; i++ ) { 
     122                                if ( label === source[i].label ) 
     123                                        return true; 
     124                        } 
     125 
     126                        return false; 
     127                } 
     128    } ); 
    45129</script> 
    46130<?php 
    47131} 
     
    90174<?php 
    91175settings_fields( 'reading' ); 
    92176wp_nonce_field( 'samplepermalink', 'samplepermalinknonce', false ); 
    93 ?> 
    94 <table class="form-table"> 
    95 <?php 
    96 if ( ! in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) ) 
    97         add_settings_field( 'blog_charset', __( 'Encoding for pages and feeds' ), 'options_reading_blog_charset', 'reading', 'default', array( 'label_for' => 'blog_charset' ) ); 
    98177 
    99178$classes = ''; 
    100179if ( 'page' == get_option( 'show_on_front' ) ) { 
    101         if ( ! get_pages() || ! get_option( 'page_on_front' ) && ! get_option( 'page_for_posts' ) ) { 
     180        $classes = 'static-front-page'; 
     181        /*if ( ! get_pages() || ! get_option( 'page_on_front' ) && ! get_option( 'page_for_posts' ) ) { 
    102182                update_option( 'show_on_front', 'posts' ); 
    103183        } else { 
    104                 $classes = 'page-on-front'; 
    105                 if ( get_option( 'page_for_posts' ) ) 
    106                         $classes .= ' page-for-posts'; 
    107         } 
     184                $classes = 'static-front-page'; 
     185        }*/ 
    108186} 
     187?> 
     188<table class="form-table <?php echo $classes; ?>"> 
     189<?php 
     190if ( ! in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) ) 
     191        add_settings_field( 'blog_charset', __( 'Encoding for pages and feeds' ), 'options_reading_blog_charset', 'reading', 'default', array( 'label_for' => 'blog_charset' ) ); 
    109192 
    110 $all_pages = get_pages(); 
    111 $new_front_page_only = ! get_option( 'page_on_front' ) && ( ! $all_pages || ( 1 == count( $all_pages ) && __( 'sample-page' ) == $all_pages[0]->post_name ) ); 
     193$page_on_front = get_post( get_option( 'page_on_front' ) ); 
     194$page_for_posts = get_post( get_option( 'page_for_posts' ) ); 
    112195 
    113 if ( current_user_can( 'create_posts', 'page' ) && ! ( get_option( 'page_for_posts' ) && $page_for_posts = get_post( get_option( 'page_for_posts' ) ) ) ) { 
    114         $title = _x( 'Blog', 'default page for posts title' ); 
    115         // @todo What if the found page is post_type = attachment or post_status != publish? 
    116         //       We could go ahead and create a new one, but we would not be able to take over 
    117         //       the slug from another page. (We could for an attachment.) 
    118         //       We must also check that the user can edit this page and publish a page. 
    119         //       Otherwise, we must assume they cannot create pages (throughout), and thus 
    120         //       should fall back to the dropdown. 
    121         $page_for_posts = get_page_by_path( sanitize_title( $title ) ); 
    122         if ( ! $page_for_posts || $page_for_posts->ID == get_option( 'page_on_front' ) ) { 
    123                 $page_for_posts = get_default_post_to_edit( 'page', true ); 
    124                 $page_for_posts->post_title = $title; 
    125                 $page_for_posts->post_name = sanitize_title( $title ); 
    126         } 
     196// Setup empty vars 
     197$page_on_front_helper_text = $page_for_posts_helper_text = ''; 
     198 
     199if ( ! isset( $page_on_front ) ) { 
     200        // Default for page_on_front 
     201        $page_on_front->post_title = 'Home'; 
     202} else { 
     203        // Show link to edit page if it exists 
     204        $page_on_front_helper_text = sprintf( __( '<span class="description"> (<a href="%s">Edit</a>)</span>' ), 'post.php?post=' . $page_on_front->ID . '&action=edit' ); 
    127205} 
    128206 
    129 if ( ! $new_front_page_only || current_user_can( 'create_posts', 'page' ) ) : ?> 
    130 <tr valign="top"> 
    131 <th scope="row"><?php _e( 'Enable a static front page' ); ?></th> 
    132 <td id="front-static-pages" class="<?php echo $classes; ?>"> 
    133         <fieldset><legend class="screen-reader-text"><span><?php _e( 'Enable a static front page' ); ?></span></legend> 
    134         <p><label for="show_on_front"> 
    135                 <input id="show_on_front" name="show_on_front" type="checkbox" value="page" <?php checked( 'page', get_option( 'show_on_front' ) ); ?> /> 
    136                 <?php printf( __( 'Show a <a href="%s">page</a> instead of your latest posts' ), 'edit.php?post_type=page' ); ?> 
    137         </label></p> 
    138         <p class="if-page-on-front sub-option"> 
    139         <?php if ( $new_front_page_only ) : // If no pages, or only sample page, only allow a new page to be added ?> 
    140                 <label for="page_on_front_title"><?php _e( 'Add new page titled:' ); ?> 
    141         <?php else : ?> 
    142                 <label for="page_on_front"> 
    143                         <select name="page_on_front" id="page_on_front"> 
    144                                 <option value="0"><?php _e( '&mdash; Select &mdash;' ); ?></option> 
    145                                 <?php if ( current_user_can( 'create_posts', 'page' ) ) : ?> 
    146                                 <option value="new" id="new-page"><?php _e( '&mdash; Add new page &mdash;' ); ?></option> 
    147                                 <?php endif; ?> 
    148                                 <?php echo walk_page_dropdown_tree( $all_pages, 0, array( 'selected' => get_option( 'page_on_front' ) ) ); ?> 
    149                         </select> 
    150                 </label> 
    151                 <?php if ( current_user_can( 'create_posts', 'page' ) ) : ?> 
    152                 <label for="page_on_front_title" class="if-new-front-page"><?php _e( 'titled:' ); ?> 
    153                 <?php endif; ?> 
    154         <?php endif; ?> 
    155         <?php if ( current_user_can( 'create_posts', 'page' ) ) : ?> 
    156                         <input name="page_on_front_title" type="text" id="page_on_front_title" value="<?php echo esc_attr_x( 'Home', 'default page on front title' ); ?>" /> 
    157                 </label> 
    158         <?php endif; ?> 
    159         </p> 
    160         <p class="if-page-on-front"><label for="page_for_posts"> 
    161                 <input id="page_for_posts" name="page_for_posts" type="checkbox" value="<?php echo $page_for_posts->ID; ?>" <?php checked( (bool) get_option( 'page_for_posts' ) ); ?> /> 
    162                 <?php _e( 'Show latest posts on a separate page' ); ?> 
    163         </label></p> 
    164         <?php if ( current_user_can( 'create_posts', 'page' ) ) : ?> 
    165         <p class="if-page-for-posts sub-option"><label for="page_for_posts_title"><?php _e( 'Page title:' ); ?> 
    166                 <input name="page_for_posts_title" type="text" id="page_for_posts_title" value="<?php echo esc_attr( htmlspecialchars( $page_for_posts->post_title ) ); ?>" /> 
    167         </label></p> 
    168         <p class="if-page-for-posts sub-option" id="edit-slug-box"> 
    169                 <?php echo get_sample_permalink_html( $page_for_posts->ID, $page_for_posts->post_title, $page_for_posts->post_name ); ?> 
    170         </p> 
    171         <input name="post_name" type="hidden" id="post_name" value="<?php echo esc_attr( apply_filters( 'editable_slug', $page_for_posts->post_name ) ); ?>" /> 
    172         <?php if ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) == get_option( 'page_on_front' ) ) : ?> 
    173         <div class="error inline"><p><strong><?php _e( 'ERROR:' ); ?></strong> <?php _e( 'These pages should not be the same!' ); ?></p></div> 
    174         <?php endif; ?> 
    175         </fieldset> 
    176         <?php else : // cannot create pages, so fall back to a selector of existing pages ?> 
    177         <p class="if-page-for-posts sub-option"><label for="page_for_posts"> 
    178                 <?php wp_dropdown_pages( array( 
    179                         'name' => 'page_for_posts', 'show_option_none' => __( '&mdash; Select &mdash;' ), 
    180                         'option_none_value' => '0', 'selected' => get_option( 'page_for_posts' ) 
    181                 ) ); ?> 
    182         <?php endif; // create pages ?> 
    183 </td> 
     207if ( ! isset( $page_for_posts ) ) { 
     208        // Default for page_for_posts 
     209        $page_for_posts->post_name = 'blog'; 
     210} else { 
     211        // Show link to edit page if it exists 
     212        $page_for_posts_helper_text = sprintf( __( '<span class="description"> (<a href="%s">Edit</a>)</span>' ), 'post.php?post=' . $page_for_posts->ID . '&action=edit' ); 
     213} 
     214?> 
     215 
     216<tr> 
     217        <th scope="row"><?php _e( 'Front page displays' ); ?></th> 
     218        <td id="front-static-pages" class="<?php echo $classes; ?>"> 
     219                <fieldset> 
     220                        <legend class="screen-reader-text"> 
     221                                <span><?php _e( 'Front page displays' ); ?></span> 
     222                        </legend> 
     223                        <label>  
     224                                <input name="show_on_front" type="radio" value="posts" class="tog" <?php checked( 'posts', get_option( 'show_on_front' ) ); ?> />  
     225                                <span class="radio-label"><?php _e( 'Your latest posts' ); ?></span> 
     226                        </label> 
     227                        <br /> 
     228                        <label>  
     229                                <input name="show_on_front" type="radio" value="page" class="tog" <?php checked( 'page', get_option( 'show_on_front' ) ); ?> />  
     230                                <span class="radio-label"><?php _e( 'A static page' ); ?></span> 
     231                        </label> 
     232                        <div class="page-options"> 
     233                                <label>  
     234                                        <?php _e( 'Enter a title for your static front page.' ); ?><br /> 
     235                                        <?php if ( current_user_can( 'create_posts', 'page' ) ) : ?> 
     236                                        <input name="page_on_front_title" type="text" id="page_on_front_title" value="<?php echo esc_attr_x( $page_on_front->post_title, 'default page on front title' ); ?>" /> 
     237                                        <?php echo $page_on_front_helper_text; ?> 
     238                                        <?php else : // cannot create pages, so fall back to a selector of existing pages ?> 
     239                                        <?php wp_dropdown_pages( array( 
     240                                                'name' => 'page_on_front', 'show_option_none' => __( '&mdash; Select &mdash;' ), 
     241                                                'option_none_value' => '0', 'selected' => get_option( 'page_on_front' ) 
     242                                        ) ); ?> 
     243                                        <?php endif; // cannot create pages ?> 
     244                                </label> 
     245                        </div> 
     246                        <div class="page-options"> 
     247                                <label>  
     248                                        <?php _e( 'Choose a URL for your latests posts.' ); ?><br /> 
     249                                        <div class="pfp-wrapper"> 
     250                                                <?php if ( current_user_can( 'create_posts', 'page' ) ) : ?> 
     251                                                <div class="pfp-slash">/</div> 
     252                                                <input name="page_for_posts_name" type="text" id="page_for_posts_name" value="<?php echo esc_attr_x( $page_for_posts->post_name, 'default page for posts name' ); ?>" /> 
     253                                                <?php echo $page_for_posts_helper_text; ?> 
     254                                                <br /> 
     255                                                <span class="sample-url"><?php echo get_site_url(); ?>/<strong class="page_for_posts_url"><?php echo $page_for_posts->post_name; ?></strong></span> 
     256                                                <?php else : // cannot create pages, so fall back to a selector of existing pages ?> 
     257                                                <?php wp_dropdown_pages( array( 
     258                                                        'name' => 'page_for_posts', 'show_option_none' => __( '&mdash; Select &mdash;' ), 
     259                                                        'option_none_value' => '0', 'selected' => get_option( 'page_for_posts' ) 
     260                                                ) ); ?> 
     261                                                <?php endif; // cannot create pages ?> 
     262                                        </div> 
     263                                </label> 
     264                        </div> 
     265                </fieldset> 
     266        </td> 
    184267</tr> 
    185 <?php endif; // if no pages to choose from and can't create pages ?> 
    186268 
    187269<tr valign="top"> 
    188270<th scope="row"><label for="posts_per_page"><?php _e( 'Blog pages show at most' ); ?></label></th>