Inclua mensagens fixas na lista de postagem da página para consulta personalizada

Este link resolve o problema, mas é apenas para a consulta principal. E se você estiver usando uma consulta personalizada? Como você pode modificar a resposta abaixo:

add_action('pre_get_posts', 'ad_custom_query'); function ad_custom_query($query) { if ($query->is_main_query() && is_home()) { //how can we for specific custom query? // set the number of posts per page $posts_per_page = 12; // get sticky posts array $sticky_posts = get_option( 'sticky_posts' ); // if we have any sticky posts and we are at the first page if (is_array($sticky_posts) && !$query->is_paged()) { // counnt the number of sticky posts $sticky_count = count($sticky_posts); // and if the number of sticky posts is less than // the number we want to set: if ($sticky_count set('posts_per_page', $posts_per_page - $sticky_count); // if the number of sticky posts is greater than or equal // the number of pages we want to set: } else { $query->set('posts_per_page', 1); } // fallback in case we have no sticky posts // and we are not on the first page } else { $query->set('posts_per_page', $posts_per_page); } } } 

Solutions Collecting From Web of "Inclua mensagens fixas na lista de postagem da página para consulta personalizada"

Eu acho que podemos tentar o seguinte: ( NOTA: Isso não é testado, mas deve, em teoria, funcionar, mas lembre-se, não é testado e pode ser buggy)

 add_action('pre_get_posts', 'ad_custom_query'); function ad_custom_query($query) { // No other checks should be necessary if ( $query->get( 'custom_query' ) === 1 ) ) { // set the number of posts per page $posts_per_page = 12; // get sticky posts array $sticky_posts = get_option( 'sticky_posts' ); // if we have any sticky posts and we are at the first page if (is_array($sticky_posts) && !$query->is_paged()) { // counnt the number of sticky posts $sticky_count = count($sticky_posts); // and if the number of sticky posts is less than // the number we want to set: if ($sticky_count < $posts_per_page) { $query->set('posts_per_page', $posts_per_page - $sticky_count); // if the number of sticky posts is greater than or equal // the number of pages we want to set: } else { $query->set('posts_per_page', 1); } // fallback in case we have no sticky posts // and we are not on the first page } else { $query->set('posts_per_page', $posts_per_page); } } } 

Agora, você pode executar a seguinte consulta personalizada

 $args = [ 'custom_query' => 1, // Note, this has to be an integer, '1' will not work 'paged' = > $paged // I would just add all the other parameters in the pre_get_posts action ]; $q = new WP_Query( $args ); 

Poucas observações:

  • Uma vez que só segmentaremos as consultas em que o novo parâmetro custom_query esteja definido como 1 , não devemos precisar das verificações como !is_admin() ou is_main_query()

  • Como estamos executando uma ação pre_get_posts em nossa consulta personalizada, eu simplesmente configuraria o parâmetro custom_query e paged em argumentos de consulta. Quaisquer outros parâmetros que simplesmente adicionaria na ação pre_get_posts .

  • Se você precisa executar uma segunda consulta com diferentes parâmetros e / ou valores, você pode simplesmente configurar custom_query para 2 e depois verificar se a $query->get( 'custom_query' ) tem um valor de 2 , como if ( $query->get( 'custom_query' ) === 2 ) {

  • Acabei de copiar seu código e adicionei a nova verificação de parâmetros, não trabalhei com seu código ou alterei nada

Em vez de criar uma function, eu apenas editei o loop com a consulta personalizada. Meu exemplo é para apenas uma publicação para mostrar.

Eu apenas usei se declaro se um ou mais pegajoso apenas mostra o primeiro pegajoso.

 < ?php $sticky_posts = get_option( 'sticky_posts' ); $sticky_count = count($sticky_posts); if($sticky_count >= 1) { $loop = new WP_Query('p=' . $sticky_posts[0]); //show only first sticky } else { $loop = new WP_Query( array( 'post_type' => 'post', 'category__not_in' => 'featured', 'posts_per_page' => 1 ) ); //if none show just the first non-sticky post } while ( $loop->have_posts() ) : $loop->the_post(); ?>