Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function my_post_queries( $query ) {
- // not an admin page and it is the main query
- if (!is_admin() && $query->is_main_query()){
- if(is_home()){
- $query->set('posts_per_page', 1);
- if ( get_option( 'sticky_posts' ) ) {
- $post_ids = merge_sticky_posts();
- $query->set('ignore_sticky_posts', 1);
- $query->set('post__in', $post_ids);
- $query->set('orderby', 'post__in');
- }
- }
- }
- }
- add_action( 'pre_get_posts', 'my_post_queries' );
- function merge_sticky_posts() {
- if ( false === ( $post_ids = get_transient( 'all_post_ids' ) ) ) {
- $sticky_posts = get_option( 'sticky_posts' );
- $args = array(
- 'posts_per_page' => -1,
- 'ignore_sticky_posts' => 1,
- 'post_status' => 'publish',
- 'no_found_rows' => true,
- );
- $posts = get_posts($args);
- if($posts) {
- $post_ids = array();
- foreach ($posts as $post) {
- $post_ids[] = $post->ID;
- }
- }
- $post_ids = array_merge($sticky_posts, $post_ids);
- set_transient('all_post_ids', $post_ids);
- }
- return $post_ids;
- }
- // altered version of the sort-query-by-post-in plugin
- // http://wordpress.org/extend/plugins/sort-query-by-post-in/
- add_filter( 'posts_orderby', 'merged_post_orderby', 10, 2 );
- function merged_post_orderby( $sortby, $thequery ) {
- if ( !empty($thequery->query_vars['post__in']) && isset($thequery->query_vars['orderby']) && $thequery->query_vars['orderby'] == 'post__in' ) {
- $sortby = "find_in_set(ID, '" . implode( ',', $thequery->query_vars['post__in'] ) . "')";
- }
- return $sortby;
- }
- // delete transient when updating a post
- add_action( 'save_post', 'update_all_ids' );
- add_action( 'delete_post', 'update_all_ids' );
- function update_all_ids( $post_id ) {
- //verify post is not a revision
- if ( !wp_is_post_revision( $post_id ) ) {
- delete_transient( 'all_post_ids' );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement