Usando categorias e “adesividade” juntas

2

Eu tenho uma consulta personalizada na minha página inicial mostrando todas as postagens em uma determinada categoria. Preciso que essa consulta respeite as postagens fixas, mas parece que, da minha pesquisa, as consultas de categoria ignoram a rigidez. Minha pergunta é duas (e meia) dobra:

  1. Alguém pode me dizer onde / como na aderência do banco de dados é aplicado a um post? Eu não vejo isso em wp_postmeta ou wp_posts . Este é o mais importante e provavelmente será o suficiente para que você receba a vitória da resposta aceita.
  2. Existe alguma maneira simples e elegante de pegar posts apenas de uma determinada categoria?
  3. Se não, então que tal uma maneira feia de fazer isso?

Só para isso, aqui está minha consulta, embora eu ache que não fará diferença na resposta.

$getHighlights = array(
    'posts_per_page' => 7,
    'post_type' => array('post','Event'),
    'category_name' => 'Highlights', 
);

Desculpe pelo longo título, mas eu queria deixar claro o que eu estava pedindo.

    
por JakeParis 07.01.2011 / 00:15

2 respostas

8

Basta adicionar 'post__in' => get_option('sticky_posts') à sua consulta para restringir sua consulta a apenas postagens fixas. Então,

$getHighlights = array(
    'numberposts' => 7,
    'post_type' => array('post','Event'),
    'post__in' => get_option('sticky_posts'),
    'category_name' => 'Highlights'
);

deve funcionar para você.

Edit: É assim que você pode mesclar dois arrays para obter as postagens fixas no topo da sua consulta:

$getHighlights_sticky = get_posts( array(
        'numberposts' => 7,
        'post_type' => array('post','Event'),
        'post__in' => get_option('sticky_posts'),//it should be post__in but not posts__in
        'category_name' => 'Highlights'
    ));
$getHighlights_other = get_posts( array(
        'numberposts' => 7 - count( $getHighlights_sticky ),
        'post_type' => array('post','Event'),
        'post__not_in' => get_option('sticky_posts'),//it should be post__not_in but not posts__not_in
        'category_name' => 'Highlights'
    ));
foreach ( array_merge( $getHighlights_sticky, $getHighlights_other ) as $post ) {
    setup_postdata( $post );

    // your display loop

}

Isto irá mostrar 7 posts, com os stickies no topo (claro, isto assumindo que você não tem mais do que 7 stickies, caso contrário, tudo estará desarrumado ...) (editado para use numberposts conforme o comentário do OP abaixo ...)

    
por goldenapples 07.01.2011 / 02:10
2

O Sticky não é salvo por postagem, há sticky_posts opção que contém uma matriz dessas. Então você pode buscar isso com $sticky_posts = get_option('sticky_posts');

Veja Sticky Post Parameters no Codex para detalhes sobre como consultar stickies.

Não sei ao certo qual seria a melhor abordagem para fazer com que sua consulta respeitasse os detalhes. A partir da rápida olhada no código, é provável que is_home condicional seja substituído e que seja desativado. Pode ser capaz de ligar em algum lugar e fingir que condicional, mas isso pode quebrar algo mais no processamento.

    
por Rarst 07.01.2011 / 00:35