Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function get_term_sticky_posts()
- {
- // First check if we are on a category page, if not, return false
- if ( !is_category() )
- return false;
- // Secondly, check if we have stickies, return false on failure
- $stickies = get_option( 'sticky_posts' );
- if ( !$stickies )
- return false;
- // OK, we have stickies and we are on a category page, continue to execute. Get current object (category) ID
- $current_object = get_queried_object_id();
- // Create the query to get category specific stickies, just get post ID's though
- $args = [
- 'nopaging' => true,
- 'post__in' => $stickies,
- 'cat' => $current_object,
- 'ignore_sticky_posts' => 1,
- 'fields' => 'ids',
- 'post_status' => 'publish'
- ];
- $q = get_posts( $args );
- return $q;
- }
- add_action( 'pre_get_posts', function ( $q )
- {
- if ( !is_admin() // IMPORTANT, make sure to target front end only
- && $q->is_main_query() // IMPORTANT, make sure we only target the main query
- && $q->is_category() // Only target category archives
- ) {
- // Check if our function to get term related stickies exists to avoid fatal errors
- if ( function_exists( 'get_term_sticky_posts' ) ) {
- // check if we have stickies
- $stickies = get_term_sticky_posts();
- if ( $stickies ) {
- // Remove stickies from the main query to avoid duplicates
- $q->set( 'post__not_in', $stickies );
- // Check that we add stickies on the first page only, remove this check if you need stickies on all paged pages
- if ( !$q->is_paged() ) {
- // Add stickies via the the_posts filter
- add_filter( 'the_posts', function ( $posts ) use ( $stickies )
- {
- $term_stickies = get_posts( ['post__in' => $stickies, 'nopaging' => true] );
- $posts = array_merge( $term_stickies, $posts );
- return $posts;
- }, 10, 1 );
- }
- }
- }
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement