Как изменить запрос, чтобы исключить сообщения от slug?


Как я могу изменить свой запрос, чтобы исключить определенные сообщения от slug? Возможно ли это?

query_posts(array('category_name' => 'Mycat', 'posts_per_page' => -1));

Ты

Author: Chip Bennett, 2012-07-25

2 answers

Вы можете получить идентификатор сообщения от слизняка с помощью url_to_postid() функция:

$ID = url_to_postid(slug);

Затем просто исключите идентификатор из вашего запроса:

query_posts(array('category_name' => 'Mycat', 'posts_per_page' => -1, 'post__not_in' => $ID ));

Вы можете создать массив идентификаторов записей, если вам нужно исключить несколько страниц.

 2
Author: Dalton Rooney, 2012-07-25 14:00:01

Не используйте query_posts()!. Фильтр pre_get_posts вместо *.

<?php
function wpse59617_filter_pre_get_posts( $query ) {
    // Only modify the main query
    if ( ! $query->is_main_query() ) { return $query; }
    // Get the ID of the post to exclude
    $slug = 'some-post-slug';
    $post_id = url_to_postid( $slug );
    // Modify the query
    $query->set( 'category_name', 'Mycat' );
    $query->set( 'post__not_in', $post_id );
    $query->set( 'posts_per_page', '-1' );
    // Return the modified query
    return $query;    
}
add_filter( 'pre_get_posts', 'wpse59617_filter_pre_get_posts' );
?>

* Нет, правда: не используйте query_posts(). Вот почему.

 5
Author: Chip Bennett, 2012-07-25 13:58:07