View difference between Paste ID: zDJ5nsEr and
SHOW: | | - or go back to the newest paste.
1-
1+
function my_post_queries( $query ) {
2
  // not an admin page and it is the main query
3
  if (!is_admin() && $query->is_main_query()){
4
    if(is_home()){
5
      $query->set('posts_per_page', 1);
6
      if ( get_option( 'sticky_posts' ) ) {
7
         $post_ids = merge_sticky_posts(); 
8
         $query->set('ignore_sticky_posts', 1);
9
         $query->set('post__in', $post_ids);
10
         $query->set('orderby', 'post__in');
11
      }
12
    }
13
  }
14
}
15
add_action( 'pre_get_posts', 'my_post_queries' );
16
17
function merge_sticky_posts() {
18
  if ( false === ( $post_ids = get_transient( 'all_post_ids' ) ) ) {
19
  
20
    $sticky_posts = get_option( 'sticky_posts' );
21
  
22
    $args = array(
23
       'posts_per_page' => -1,
24
       'ignore_sticky_posts' => 1,
25
       'post_status'   => 'publish',
26
       'no_found_rows' => true,
27
    );
28
     
29
    $posts = get_posts($args);
30
    if($posts) {
31
      $post_ids = array();
32
      foreach ($posts as $post) {
33
        $post_ids[] = $post->ID;
34
      }
35
    }
36
    
37
    $post_ids = array_merge($sticky_posts, $post_ids);
38
    set_transient('all_post_ids', $post_ids);
39
     
40
  }
41
  
42
  return $post_ids;
43
}
44
45
46
// altered version of the sort-query-by-post-in plugin
47
// http://wordpress.org/extend/plugins/sort-query-by-post-in/
48
add_filter( 'posts_orderby', 'merged_post_orderby', 10, 2 );
49
function merged_post_orderby( $sortby, $thequery ) {
50
51
if ( !empty($thequery->query_vars['post__in']) && isset($thequery->query_vars['orderby']) && $thequery->query_vars['orderby'] == 'post__in' ) { 
52
    $sortby = "find_in_set(ID, '" . implode( ',', $thequery->query_vars['post__in'] ) . "')";
53
}
54
    
55
  return $sortby;
56
}
57
58
// delete transient when updating a post
59
add_action( 'save_post', 'update_all_ids' );
60
add_action( 'delete_post', 'update_all_ids' );
61
62
function update_all_ids( $post_id ) {
63
  //verify post is not a revision
64
  if ( !wp_is_post_revision( $post_id ) ) {
65
    delete_transient( 'all_post_ids' );
66
  }
67
  
68
}