Como ordenar posts por campo personalizado no WordPress

27 de junho de 201411 Comentários

Para ordenar posts por um campo personalizado, basta criar a query com os argumentos ‘orderby’ => ‘meta_value’, ‘meta_key’ => ‘wpcf-data-evento’como no exemplo abaixo:

Comentários

  • Aquiles

    Boa tarde.

    Qual o formato da data?

    Obrigado!

    • Bom dia Aquiles.

      Não entendi sua pergunta. Pode ser mais específico?

      Beijos!

  • José Ricardo

    Bom dia, Fiz isso que você mostrou acima, mais só mostra um determinado tipo de post. Ele não ordena os posts. O que eu estou tentando montar é uma lista de pagantes em primeiro e os não pagantes por último.

    • Vanessa Maia

      Olá, José Ricardo. Obrigada pelo comentário!
      Para te ajudar eu teria que entender melhor como está a sua estrutura. Pagantes e não pagantes são o mesmo tipo de conteúdo? Ou esse status é um campo personalizado?

    • Olá José Ricardo! Para te ajudar eu teria que entender melhor como está a sua estrutura. Pagantes e não pagantes são o mesmo tipo de conteúdo? Ou esse status é um campo personalizado?

  • Thiago Guedes

    É exatamente oq procuro, mas n estou conseguindo fazer. Cada post meu será um evento, com um campo personalizado contendo a data do evento “wpcf-data-evento” como no seu exemplo. Dai queria que o wordpress listasse nao por data de postagem, e sim por ordem crescente de data do evento.

    • Vanessa Maia

      Olá Thiago, tudo bem? Você pode mostrar o seu código aqui?

    • Olá Thiago, tudo bem? Você pode mostrar como está o seu código?

      • Julie Maciel

        Oi, eu também gostaria de saber o meu caso é igual ao do Thiago, como não fui eu que construí e o código é usado para a parte de notícias (onde deve ser listado por data de postagem), eu pensei em colocar uma condição para cada caso. Tentei usar o plugin Post Types Order, porém não resolveu. Acredito que seja pelo modo que foi construído no código.

        O código está dessa forma:


        class Noticias {
        public function shortcode($attr){
        date_default_timezone_set('America/Sao_Paulo');
        $dataAtual = date('Y-m-d');
        switch_to_blog(isset($attr['blog_id']) && !empty($attr['blog_id']) ? (int) $attr['blog_id'] : 1);
        $posts = new UnicesumarUtilsPosts();
        $field = 'ID';
        $slider = isset($attr['slider']) && $attr['slider'];
        $categorias = isset($attr['categorias']) && !empty($attr['categorias']) ? $attr['categorias'] : null;
        $blank = isset($attr['blank']) && $attr['blank'] ? ' target="_blank"':null;
        $noticias = $posts->getAllPostsStickyFirst(
        $field,
        get_option('sticky_posts'),
        $categorias,
        isset($attr['posttype']) && !empty($attr['posttype']) ? $attr['posttype'] : 'post',
        isset($attr['blog_id']) && !empty($attr['blog_id']) ? (int) $attr['blog_id'] : 1,
        isset($attr['quantidade']) && !empty($attr['quantidade']) ? (int) trim($attr['quantidade']) : 4
        );
        if(!empty($noticias)):
        global $fora;
        $return = '

        ';
        if(isset($attr['quebra']) && !empty($attr['quebra'])):
        $quebra = (int) trim($attr['quebra']) == 0 || count($noticias) < (int) trim($attr['quebra']) ? count($noticias) : (int) trim($attr['quebra']) ;
        else:
        $quebra = count($noticias);
        endif;
        $colSize = ceil(12/$quebra);
        $q = 0;
        if($slider):
        $return .= ' ';
        endif;
        foreach($noticias as $i => $noticia):
        if(($attr['posttype']=='evento' && (date('Y-m-d', strtotime($noticia->metas['data_de_encerramento'])) > $dataAtual)) || $attr['posttype'] !='evento'):
        if(!$slider && $q==0):
        $return .= '';
        endif;
        $q++;
        //$link = home_url(($noticia->post_type!='post' && $noticia->post_type!='page' ? $noticia->post_type.'/' : '').$noticia->post_name);
        $link = get_permalink($noticia->ID);
        $imagem = !empty($noticia->imagem_destaque)
        ? '
        imagem_destaque.'" alt="'.$noticia->post_title.'" title="'.$noticia->post_title.'" class="">
        '
        : '
        post_title.'" title="'.$noticia->post_title.'" class="">
        ';
        if($slider):
        $return .= '';
        else:
        $return .= '';
        endif;
        $description = $attr['posttype']=='evento' && isset($noticia->metas['descricao1']) && !empty($noticia->metas['descricao1'])
        ? ''.$noticia->metas['descricao1'].''
        : null;

        if(end( explode('/',$fora)) == 'english' ):
        $saibaMais = $attr['posttype']!='evento' ? 'More ' : null;
        else:
        $saibaMais = $attr['posttype']!='evento' ? 'Saiba mais ' : null;
        endif;
        $titulo_noticia = ''.$noticia->post_title.'';
        $return .= <<<HTML

        $imagem
        $description
        $titulo_noticia
        $saibaMais

        HTML;
        if($slider):
        $return .= '';
        else:
        $return .= '';
        endif;
        if((!$slider && $q==$quebra) || end($noticias)==$noticias[$i]):
        $return .= '';
        $q = 0;
        endif;
        endif;
        endforeach;
        if($slider):
        $return .= '';
        endif;
        if(!$slider):
        $return .= '
        ';
        else:
        $return .= '';
        endif;
        restore_current_blog();
        return $return;
        endif;
        restore_current_blog();
        return null;
        }

  • Thiago Sousa

    Seu post salvou minha vida, obrigado por compartilhar.

  • Andrew Walmir

    2020 e seu post me salvou demais. Parabéns pelo conteúdo!!