Como consultar_posts usando meta_query para orderby meta_key E tem um tipo secundário por data?

Estive solucionando um problema nos últimos dias e continuando em círculos. Poderia realmente usar um novo par de olhos para me ajudar a responder a esta pergunta …

Então eu estou trabalhando com um site wordpress onde as postagens têm alguns campos personalizados relevantes para a consulta que eu preciso executar: “pós-expirado” e “meu-ordenar”. Quando eu executo minhas opções de consulta, quero que os resultados sejam postagens onde o “pós-expirado” NÃO é “sim” (esta parte funciona no meu código). Eu também quero que os resultados sejam ordenados pelo valor do número DESC de “my-sort-order” (também funciona) E se houver um empate em “my-sort-order”, gostaria de um tipo secundário por data com as postagens mais recentes primeiro.

O tipo secundário por data é onde eu estou tendo problemas.

Aqui está o código que tenho agora:

 $paged, 'meta_query'=> array( array( 'key'=>'post-expired', 'value'=> 'yes', 'compare' => '!=' ) ), 'meta_key'=>'my-sort-order', 'orderby'=>'meta_value_num', 'order'=>'DESC' ); $args = array_merge( $args , $wp_query->query ); query_posts( $args ); ?> 

Usando o código acima, eu recuperei corretamente as postagens não expiradas e elas são ordenadas por ordem de ordem de ordenação (ou seja, 100 aparece antes de 99, etc.). Mas se ambas as postagens tiverem o mesmo valor de ordem de sorting, há algum tipo de tipo secundário que aconteceu, eu não consigo controlar (e não consigo descobrir o que realmente está sendo ordenado).

Minha primeira idéia para resolver isso foi apenas adicionar valores ao “meu-ordenar”, se eu quisesse definir uma ordem de sorting específica para essa publicação. Eu pensei que se o valor para este campo fosse deixado em branco para o resto das postagens, eles simplesmente seriam devolvidos no tipo padrão pela data DESC (após as postagens com uma ordem de sorting definida). No entanto, o que realmente aconteceu foi que todas as postagens que não possuíam um conjunto de valores de ordenação não foram retornadas …

Em seguida, tentei adicionar vários valores no campo orderby como este:

 ('orderby'=>'meta_value_num date') 

Isso explodiu completamente as duas ordens de sorting que eu estava indo e devolvi as mensagens de uma maneira inesperada. Tinha a impressão de que vários valores de ordem eram permitidos, mas por algum motivo não está funcionando aqui.

Neste ponto, não tenho certeza de como fazer uma dessas soluções potenciais funcionar. Alguém sabe como eu posso 1) Classifique as postagens do campo “meu-ordenação” primeiro, então as postagens restantes sem valor nesse campo retornaram com o tipo de data padrão; ou 2) Descobre como controlar o tipo de ordenação secundária para que quaisquer postagens que tenham um empate no “meu-ordenar” serão ordenadas por data (a mais nova primeiro)?

Solutions Collecting From Web of "Como consultar_posts usando meta_query para orderby meta_key E tem um tipo secundário por data?"

Espero que você tenha descoberto isso agora, mas se você não tiver podido usar o filtro “posts_orderby” para marcar em uma ordem específica para sua consulta. Eu não vou dar uma solução completa aqui, mas você pode se referir a esta publicação para mais: http://mitcho.com/blog/how-to/external-orders-in-wordpress-queries/

EDITAR:

Aqui está a Documentação – basicamente você pode simplesmente replace a cláusula ORDER BY do SQL: http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_orderby

E aqui está o código de exemplo dos documentos:

 add_filter('posts_orderby', 'edit_posts_orderby'); add_filter('posts_join_paged','edit_posts_join_paged'); function edit_posts_join_paged($join_paged_statement) { $join_paged_statement = "LEFT JOIN wp_gdsr_data_article gdsra ON gdsra.post_id = wp_posts.ID"; return $join_paged_statement; } function edit_posts_orderby($orderby_statement) { $orderby_statement = "(gdsra.user_votes_total_sum/gdsra.user_votes_count) DESC"; return $orderby_statement; }