Oordenar posts através de campos personalizados
-
Gente,
Preciso de um help… Caiu na minha mao um WP jah todo instalado e configurado, mas que estava com problemas… O desenvolvedor pulou fora e pediram a minha ajuda…
Em algumas categorias, foram criados campos customizados pra alguns posts… Agora eh preciso apresentar estes posts, ordenados por um desses campos customizados…
Soh que tem que ser algo automatico (ou seja, nao posso usar um plugin do tipo “arrastar&soltar”…
Alguem pode me ajudar? Algum hackzinho no codigo?
Bye,
JM:.
-
Você conhece PHP? Se sim, vai conseguir utilizar o WP_Query. O WordPress precisa ter a versão mínima do 3.1 e você pode ordenar por custom fields (meta_key, meta_value).
No banco de dados, existe a tabela wp_postmeta onde ficam os custom fields. E eles são chamados de meta_key e o que você preenche é o meta_value.
Entendendo isso, você filtra os campos pelo array meta do WP_Query e a ordenação pode ser feita da seguinte maneira:
<?php $mais_lidos = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 4, //Se deixar em branco ele pega o default do Admin, Deixe -1 para ilimitado 'meta_key' => 'views', //Aqui fica o name do seu custom_field (é o que está no select dropdown) 'orderby' => 'meta_value', //Deixe assim 'order' => 'DESC', //Do maior para o menor, mude para ASC se quiser do menor para o maior. )); while ($mais_lidos->have_posts()): $mais_lidos->the_post(); the_title(); endwhile ?>
Obs: No exemplo usei um custom_field chamado “views” para exibir o post mais lidos.
meu problema eh que o antigo desenvolvedor usou um plugin chamado CUSTOM FIELDS TEMPLATE… Serah, Leo, que a sua dica funciona mesmo assim?
Valeu!
Bye,
JM:.
Olá Jefferson, eu não conheço este Plugin. Nunca usei porque achei que era tudo japonês rsrs….mas deve funcionar sim!
Dá uma olhada na tabela wp_postmeta, se os custom fields estiverem por lá, com certeza vai funcionar!
Vou dar uma olhada nesse plugin!
Posta aqui se resolver, ok?
Abs
pra complicar um pouco mais, as queries sao todas feitas com o “query_posts”, e nao com o WP_Query…
Jefferson, não tem problema. O query_posts é um atalho do WP_Query.
Tenta incluir o order e o meta_key conforme te falei que deve resolver!
Você pode fazer assim também:
query_posts('orderby=meta_value&order=DESC&meta_key=views');
Leo,
Desde jah, mais uma vez, obrigado… Suas dicas tem me ajudado muito e tenho caminhado em busca da solucao…
Mas nao briga comigo pela minha proxima pergunta, que eh uma pergunta que, eu assumo, eh meio idiota:
O campo personalizado que eu preciso ordenar eh um campo data, que estah no formato dd/mm/aaaa… Se eu altero o order para ASC ou DESC, eu vejo diferenca na resultado, mas nao ordena como deveria ser… Devo colocar um CONVERT, ou algo assim?
Voce pode me ajudar?
Bye,
JM:.
Olá Jefferson, não brigarei rsrs. Todos um dia já fomos iniciantes….
Então, à respeito de campos do tipo data, eu espero que o desenvolvedor tenha cadastrado os valores no Banco de Dados no formato yyyy-mm-dd, ou seja ano-mês-dia, que ficaria por exemplo assim: 2011-09-21 significando o dia de hoje (21/09/2011).
Se estiver assim, o ORDER ASC/DESC vai funcionar perfeitamente. Se não, eu acho melhor você alterar os campos datas desta maneira.
Até porque, fazendo isso você também vai conseguir fazer “queries” do tipo: (maior que) o dia de hoje ou (menor que) o dia de ontem. veja mais na documentação sobre os custom_fields(metas) http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
Para conferir como estão as datas, consulte a tabela wp_postmeta do seu banco de dados.
Faça uma query assim pelo phpmyadmin ou semelhante:SELECT * FROM wp_postmeta WHERE meta_key = 'nome_do_seu_custom_field'
E veja o que aparece no seu meta_value.
Eh, Leo… Nada na (minha) vida eh tao facil assim… Olha como estao os 67 registros do wp_postmeta:
meta_id post_id meta_key meta_value
769 272 Data 01/04/2004
778 275 Data 01/06/2004
786 278 Data 01/01/2005
800 282 Data 01/06/2005
809 288 Data 01/05/2005
817 291 Data 01/06/2006
825 294 Data 01/09/2006Agora eu vou ter que altera tudo pra yyyy-mm-dd??? Um por um, neh?
Bye,
JM:.
Eu recomendo você alterar sim, acho melhor para esse tipo de consulta.
Você pode utilizar expressões regulares ou usar o php para ajudar.
Poderia fazer um select no php e alterar um por um automaticamente.
Crie uma página customizada e tente colocar essa função:<?php $datas = $wpdb->get_results( " SELECT * FROM wp_postmeta WHERE meta_key = 'Data' " ); foreach ( $datas as $data ) { $data_errada = $data->meta_value; $data_array = explode('/',$data_errada); $data_nova = $data_array[2]."-".$data_array[1]."-".$data_array[0]; $wpdb->update( 'wp_postmeta', array( 'meta_value' => $data_nova ), array( 'meta_id' => $data->meta_id ) ); }
Por favor faça um BACKUP de tudo antes de executar isso, ok?
Se tiver alguma coisa errada, tente olhar as páginas de documentação abaixo do próprio WordPress:
http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates
http://codex.wordpress.org/Class_Reference/wpdbLeo,
Funcionou direitinho…
Valeu pela forca… To te devendo um chopp… Alias, ce tah em Sao Paulo?
Agora vou partir pra outra sessao do site, que tambem sobrou na minha mao! hauahauhauha
Bye,
JM:.
Jefferson, não precisa de Chopp não rsrs! Estou em São Paulo sim rs
Sou á favor de ajudar a Comunidade Open Source! Principalmente do WordPress.
Só coloca o tópico como resolvido por gentileza!
Precisando, posta ae e fique à vontade para me add no Twitter, Github, etc
Abs
- O tópico ‘Oordenar posts através de campos personalizados’ está fechado para novas respostas.