Changeset 22136
- Timestamp:
- 10/08/2012 09:25:13 PM (12 years ago)
- Location:
- trunk/wp-admin
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/post.php
r22129 r22136 1338 1338 * @access private 1339 1339 */ 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; 1340 function _show_on_front_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; 1344 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 } 1344 1350 1345 1351 // 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. 1347 1355 if ( ! current_user_can( 'create_posts', 'page' ) ) { 1348 $_POST['page_on_front'] = 0; 1349 $_POST['show_on_front'] = 'posts'; 1350 add_settings_error( 'page_on_front', __( 'You are not allowed to create pages on this site.' ) ); 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; 1351 1366 } 1352 1367 1353 1368 $existing_page = get_page_by_title( stripslashes( $_POST['page_on_front_title'] ) ); 1354 1369 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. 1356 1371 if ( $existing_page && 'publish' == $existing_page->post_status ) { 1357 1372 $page_id = $existing_page->ID; … … 1365 1380 // @todo Create some sort of a 'context' in postmeta so we know we created a page through these means. 1366 1381 // Consider then showing that context in the list table as a good-first-step. 1367 ), true ); 1368 } 1369 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; 1382 ) ); 1383 } 1384 1385 if ( $page_id ) { 1386 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'; 1391 } 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; 1396 } 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; 1375 1406 } 1376 1407 1377 1408 // If a page for posts was meant to be specified, update/create it. 1378 if ( ! isset( $_POST['page_for_posts'] ) ) 1379 return; 1409 if ( ! isset( $_POST['page_for_posts'] ) ) { 1410 update_option( 'page_for_posts', 0 ); 1411 return $show_on_front_value; 1412 } 1380 1413 1381 1414 $page_for_posts = (int) $_POST['page_for_posts']; 1415 1382 1416 if ( ! $page_for_posts || ! $page = get_post( $page_for_posts, ARRAY_A ) ) { 1383 $_POST['page_for_posts'] = 0; 1384 return; 1385 } 1386 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). 1417 update_option( 'page_for_posts', 0 ); 1418 return $show_on_front_value; 1419 } 1420 1391 1421 if ( 'page' != $page['post_type'] || ! current_user_can( 'edit_post', $page_for_posts ) ) { 1392 $_POST['page_for_posts'] = 0;1393 return ;1422 update_option( 'page_for_posts', 0 ); 1423 return $show_on_front_value; 1394 1424 } 1395 1425 1396 1426 if ( 'publish' != $page['post_status'] && ! current_user_can( 'publish_post', $page_for_posts ) ) { 1397 $_POST['page_for_posts'] = 0;1398 return ;1427 update_option( 'page_for_posts', 0 ); 1428 return $show_on_front_value; 1399 1429 } 1400 1430 … … 1408 1438 } 1409 1439 1410 $page_id = wp_insert_post( $args, true ); 1411 if ( is_wp_error( $page_id ) ) 1412 $_POST['page_for_posts'] = 0; 1413 } 1414 add_filter( 'admin_init', '_create_pages_for_reading_settings' ); 1440 $page_id = wp_insert_post( $args ); 1441 update_option( 'page_for_posts', $page_id ); 1442 1443 return $show_on_front_value; 1444 } 1445 add_filter( 'sanitize_option_show_on_front', '_show_on_front_reading_settings' ); -
trunk/wp-admin/options-reading.php
r22127 r22136 33 33 if ( checked ) 34 34 $('#page_for_posts').prop('checked', true).change(); 35 else 36 section.removeClass('page-for-posts'); 35 37 }); 36 38 $('#page_for_posts').change( function() { … … 117 119 // Otherwise, we must assume they cannot create pages (throughout), and thus 118 120 // should fall back to the dropdown. 119 if ( ! $page_for_posts = get_page_by_path( sanitize_title( $title ) ) ) { 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' ) ) { 120 123 $page_for_posts = get_default_post_to_edit( 'page', true ); 121 124 $page_for_posts->post_title = $title; -
trunk/wp-admin/options.php
r22006 r22136 63 63 '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' ), 64 64 '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' ), 66 66 'writing' => array( 'use_smilies', 'default_category', 'default_email_category', 'use_balanceTags', 'default_link_category', 'default_post_format' ) 67 67 );
Note: See TracChangeset
for help on using the changeset viewer.