Закрепить в верху блога специфическую заметку

Слов в тексте – 258, время чтения в минутах – 2



Данный фрагмент кода для размещения с помощью плагина Code Snippets закрепит/прилепит любую заметку в верху вашего блога и отменит привилегии “прилепленных” записей, т.е. они займут место в соответствии с датой и временем публикации.

Иными словами, все прилепленные заметки останутся “прилепленными”, хотя и не будут находиться в топе.

Ниже находится этот сниппет.

Его можно скопировать здесь:


function custom_post_ordering($query) {
    // Only modify the main query on the home page
    if ($query->is_home() && $query->is_main_query()) {
        // ID of the post you want to show first
        $featured_post_id = 123; // Замените на свой пост с ID
        
        // Remove all sticky post functionality
        $query->set('ignore_sticky_posts', 1);
        
        // Set posts per page
        $posts_per_page = get_option('posts_per_page');
        $query->set('posts_per_page', $posts_per_page);
        
        // Get the current page number
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $query->set('paged', $paged);
        
        // Modify the query only on the first page
        if ($paged === 1) {
            add_filter('the_posts', function($posts, $q) use ($featured_post_id, $posts_per_page) {
                if (!$q->is_main_query() || !$q->is_home()) {
                    return $posts;
                }
                
                // Get the featured post
                $featured_post = get_post($featured_post_id);
                
                if (!$featured_post || $featured_post->post_status !== 'publish') {
                    return $posts;
                }
                
                // Remove featured post if it's already in the results
                $filtered_posts = array_filter($posts, function($post) use ($featured_post_id) {
                    return $post->ID !== $featured_post_id;
                });
                
                // Add featured post at the beginning
                array_unshift($filtered_posts, $featured_post);
                
                // Ensure we maintain the correct number of posts per page
                return array_slice($filtered_posts, 0, $posts_per_page);
                
            }, 10, 2);
        }
    }
}
add_action('pre_get_posts', 'custom_post_ordering');

/**
 * Optional: Remove all sticky post functionality globally
 */
function remove_sticky_posts() {
    remove_filter('the_posts', '_wp_rearrange_sticky_posts');
}
add_action('init', 'remove_sticky_posts');

Не благодарите!


 ⬇ Поделиться в соцсетях и мессенджерах



Популярные записи

Рубрики блога




newsbee Media