Atualmente usando um query_posts () no meu tema – quer usar um filtro de solicitação no lugar

Atualmente, estou usando esse código no meu tema antes de mostrar o conteúdo do tipo de postagem personalizado my_post_type:

$title = $post->post_title; query_posts( array ( 'post_type' => 'page', 'posts_per_page' => -1, 'my_taxonomy' => $title )); 

Isso significa que quando eu vou para … / my_post_type / some_title, vejo todas as páginas que são atribuídas “some_title” como my_taxonomy.

Agora eu quero fazer o mesmo em um plugin em vez de um tema. Isso significa que (eu acho) que eu tenho que usar o filtro “solicitação”? Tentei fazer isso:

 add_filter( 'request', 'alter_the_query' ); function alter_the_query( $request ) { $request['post_type'] = 'page'; $request['my_taxonomy'] = 'some_title'; // just hardcoded so far while testing $request['posts_per_page'] = -1; return $request; } 

Mas não dá retorno a nenhuma página. Nem mesmo isso funciona:

 add_filter( 'request', 'alter_the_query' ); function alter_the_query( $request ) { $request['post_type'] = 'page'; return $request; } 

O que estou fazendo de errado, ou como posso conseguir o mesmo que o meu com a minha chamada para query_posts ()?

Muito obrigado!

Solutions Collecting From Web of "Atualmente usando um query_posts () no meu tema – quer usar um filtro de solicitação no lugar"

O código que você forneceu na verdade não imprime a lista de páginas; Ele apenas cria a consulta para eles. Supondo que você tenha um código adicional para exibi-los, a maneira mais fácil de realizar o que você quer em um plugin é criar essa lista e, em seguida, adicioná-los usando o the_content . Eu provavelmente criaria a lista de páginas em uma function, adicionaria essas páginas ao the_content com uma segunda function adicionada ao filtro. Aqui está algo que deve ajudar a começar seu começo:

 function my_posts_list() { global $post; query_posts( array ( 'post_type' => 'page', 'posts_per_page' => -1, 'my_taxonomy' => $post->post_title )); // Build your HTML list of posts from the query. } function filter_the_content($content) { // Only filter the content if we're on a single 'my_post_type' page. if (is_singular('my_post_type')) { $postsList = my_posts_list(); $content = $postsList . $content; } return $content; } add_filter('the_content', 'filter_the_content'); 

Há, é claro, muitas coisas adicionais que você poderia fazer com isso, como verificar se a lista de postagens não está vazia.

WordPress fornece um grande gancho, pre_get_posts para exatamente o que eu acho que você está tentando fazer.

Aqui está o seu código provavelmente pareceria

 add_action( 'pre_get_posts', 'alter_the_query' ); function alter_the_query() { if( is_main_query() && get_post_type() == 'my_post_type' ) { global $post; $title = $post->post_title; $query->set('post_type', 'page'); $query->set('posts_per_page', -1); $query->set('my_taxonomy', $title); } } 

Nacin e outros estão recomendando que pre_get_posts substitua o uso de query_posts() qualquer maneira, então espero que isso funcione para você e o envie na direção certa.