Ticket #7457: 7457.2.diff
| File 7457.2.diff, 5.1 KB (added by ryan, 4 years ago) |
|---|
-
wp-includes/post.php
482 482 } elseif ( ! empty($r['exclude']) ) 483 483 $r['post__not_in'] = preg_split('/[\s,]+/',$r['exclude']); 484 484 485 $r['caller_get_posts'] = true; 486 485 487 $get_posts = new WP_Query; 486 488 return $get_posts->query($r); 487 489 … … 750 752 } 751 753 752 754 /** 755 * is_sticky() - Check if post is sticky 756 * 757 * {@internal Missing Long Description}} 758 * 759 * @package WordPress 760 * @subpackage Post 761 * @since 2.7 762 * 763 * @param int $post_id A post ID 764 * @return bool 765 */ 766 function is_sticky($post_id) { 767 $stickies = get_option('sticky_posts'); 768 769 if ( !is_array($stickies) ) 770 return false; 771 772 if ( in_array($post_id, $stickies) ) 773 return true; 774 775 return false; 776 } 777 778 /** 753 779 * sanitize_post() - Sanitize every post field 754 780 * 755 781 * {@internal Missing Long Description}} … … 847 873 return $value; 848 874 } 849 875 876 function stick_post($post_id) { 877 $stickies = get_option('sticky_posts'); 878 879 if ( !is_array($stickies) ) 880 $stickies = array($post_id); 881 882 if ( ! in_array($post_id, $stickies) ) 883 $stickies[] = $post_id; 884 885 update_option('sticky_posts', $stickies); 886 } 887 888 function unstick_post($post_id) { 889 $stickies = get_option('sticky_posts'); 890 891 if ( !is_array($stickies) ) 892 return; 893 894 if ( ! in_array($post_id, $stickies) ) 895 return; 896 897 $offset = array_search($post_id, $stickies); 898 if ( false === $offset ) 899 return; 900 901 array_splice($stickies, $offset, 1); 902 903 update_option('sticky_posts', $stickies); 904 } 905 850 906 /** 851 907 * Count number of posts of a post type and is user has permissions to view. 852 908 * -
wp-includes/query.php
831 831 $groupby = ''; 832 832 $post_status_join = false; 833 833 834 if ( !isset($q['caller_get_posts']) ) 835 $q['caller_get_posts'] = false; 836 834 837 if ( !isset($q['post_type']) ) { 835 838 if ( $this->is_search ) 836 839 $q['post_type'] = 'any'; … … 1497 1500 } 1498 1501 } 1499 1502 1503 // Put sticky posts at the top of the posts array 1504 $sticky_posts = get_option('sticky_posts'); 1505 if ( $this->is_home && $page <= 1 && !empty($sticky_posts) && !$q['caller_get_posts'] ) { 1506 $num_posts = count($this->posts); 1507 $post_ids = array(); 1508 $sticky_offset = 0; 1509 // Loop over posts and relocate stickies to the front. 1510 for ( $i = 0; $i < $num_posts; $i++ ) { 1511 if ( in_array($this->posts[$i]->ID, $sticky_posts) ) { 1512 $sticky_post = $this->posts[$i]; 1513 // Remove sticky from current position 1514 array_splice($this->posts, $i, 1); 1515 // Move to front, after other stickies 1516 array_splice($this->posts, $sticky_offset, 0, array($sticky_post)); 1517 //Increment the sticky offset. The next sticky goes here. 1518 $sticky_offset++; 1519 // Remove post from sticky posts array 1520 $offset = array_search($sticky_post->ID, $sticky_posts); 1521 array_splice($sticky_posts, $offset, 1); 1522 } 1523 } 1524 1525 // Fetch sticky posts that weren't in the query results 1526 $stickies__in = implode(',', array_map( 'absint', $sticky_posts )); 1527 $stickies = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE $wpdb->posts.ID IN ($stickies__in)" ); 1528 // TODO Make sure post is published or viewable by the current user 1529 foreach ( $stickies as $sticky_post ) { 1530 if ( 'publish' != $sticky_post->post_status ) 1531 continue; 1532 array_splice($this->posts, $sticky_offset, 0, array($sticky_post)); 1533 $sticky_offset++; 1534 } 1535 } 1536 1500 1537 $this->posts = apply_filters('the_posts', $this->posts); 1501 1538 1502 1539 update_post_caches($this->posts); -
wp-admin/includes/post.php
161 161 162 162 wp_set_post_lock( $post_ID, $GLOBALS['current_user']->ID ); 163 163 164 if ( !empty($_POST['sticky']) ) 165 stick_post($post_ID); 166 else 167 unstick_post($post_ID); 168 164 169 return $post_ID; 165 170 } 166 171 -
wp-admin/edit-form-advanced.php
117 117 </p> 118 118 119 119 <?php if ( current_user_can( 'publish_posts' ) ) : ?> 120 <p><label for="post_status_private" class="selectit"><input id="post_status_private" name="post_status" type="checkbox" value="private" <?php checked($post->post_status, 'private'); ?> tabindex="4" /> <?php _e('Keep this post private') ?></label></p> 120 <p><label for="post_status_private" class="selectit"><input id="post_status_private" name="post_status" type="checkbox" value="private" <?php checked($post->post_status, 'private'); ?> tabindex="4" /> <?php _e('Keep this post private') ?></label><br /> 121 <label for="sticky" class="selectit"><input id="sticky" name="sticky" type="checkbox" value="sticky" <?php checked(is_sticky($post->ID), true); ?> tabindex="4" /> <?php _e('Stick this post to the front page') ?></label></p> 121 122 <?php endif; ?> 122 123 <?php 123 124 if ($post_ID) {
