wp consulta ordem personalizada não campo personalizado

Estou trabalhando em uma página de arquivo de produtos onde mostro 20 produtos em cada página com paginação.

O preço de cada produto é calculado por uma fórmula que obtém seus parâmetros por dados salvos no database. Funciona desta forma (e não é guardado em campos personalizados com cada produto) porque, então, podemos alterar alguns dados no nosso database e todos os preços dos produtos serão alterados.

O problema é que agora não consigo ordenar por méta chave e valor. Então eu tentei adicionar o preço à matriz de postagens consultadas e depois encomendar pelo preço. Mas se você usar a paginação, você apenas solicita os 20 primeiros itens por preço. Assim, a próxima página mostra produtos com um preço mais baixo do que os produtos na primeira página.

Primeira página 20 item:

  • Produto 10,00
  • Produto 12,00
  • Produto 15,00
  • Produto 18,00
  • etc.

Segunda página 20 itens:

  • Produto 11,00
  • Produto 14,00
  • Produto 15,00
  • Produto 19,00
  • etc.

Então eu acho que preciso modificar a consulta em uma etapa anterior, por exemplo, com o parâmetro ‘orderby’. Mas eu só posso encontrar os campos personalizados do orderby, e isso não é o que eu estou procurando.

Alguém sabe que existe um gancho para adicionar uma function orderby personalizada à consulta wp?

Meu código:

// Get pages page for pagination $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; // Query arguments $args = array( 'post_type' => 'products', 'posts_per_page' => 20, 'paged' => $paged ); // Create object $products = new WP_Query( $args ); // Add price to each product foreach( $products->posts as $product ) { $price = price_calulate_function( $product->ID ); $product->price = $price; } // Sort by price uasort( $products->posts, function( $a, $b ) { $a = $a->price; $b = $b->price; if( $a == $b ) { return 0; } return ( $a have_posts() ) { while( $products->have_posts() ) { $products->the_post(); // Show product } } 

Solutions Collecting From Web of "wp consulta ordem personalizada não campo personalizado"