Como pagino os resultados da pesquisa para tipos de postagem personalizados?

Eu tenho um tipo de postagem personalizado chamado “carros” que armazena vários campos personalizados, juntamente com os campos padrão Título / Descrição. Preciso que os usuários possam pesquisar através do CPT com base nos campos personalizados que correspondem aos critérios do usuário. Achei que parte e funciona, mas o problema é a paginação. Eu descobri como paginar o CPT com base no código que eu encontrei no Google, e isso funciona, mas uma vez que você sai da página 1, você não tem mais os dados de pesquisa enviados com o formulário. Eu só preciso saber como devo armazenar isso ou passar por isso.

No PHP regular, eu simplesmente usaria uma session para armazenar os dados, mas me disseram para não fazer isso com o WordPress. Então, qual é a melhor opção? Fui informado que Transientes são a versão WP das sessões, mas não tenho certeza de como usá-las eficientemente para isso e como mantê-las separadas para cada usuário.

Eu não estou pedindo que alguém escreva isso para mim – Eu só preciso de alguma ajuda para entender o melhor conceito para isso.

Solutions Collecting From Web of "Como pagino os resultados da pesquisa para tipos de postagem personalizados?"

Em vez de implementar uma consulta de pesquisa personalizada, em vez disso, inclua os campos personalizados na pesquisa padrão e use regras de reescrita para mapear /?post_type=cars&s=mysearchterm para /search/cars/mysearchterm . Ou apenas use a consulta vars no URL em vez de POST / $_POST ou dados transitórios. GET / $_GET é seu amigo aqui.

Os transientes destinam-se a armazenar dados temporariamente em vez de recalcular, por exemplo, feeds RSS e outras coisas que são caras para calcular que podem não ter uma vida útil permanente. Eles não são um substituto para sessões (nem você precisa de sessões ou algum outro análogo).

Isso deve mostrar como agrupar os campos personalizados na pesquisa:

http://stv.whtly.com/2010/03/15/extend-wordpress-search-to-include-custom-post-meta/

Teste contra $wp->query_vars['s'] ou get_query_var( 's' ) para ver se a sua consulta de pesquisa é para o seu tipo de publicação, então você pode include condicionalmente os bits de meta-busca personalizados.

créditos: obrigado kaiser pela dica get_query_var

Como a resposta @TomJNowell .

Com sua pesquisa, use $_GET vez de $_POST para seu pedido de pesquisa. Suas variables ​​de pesquisa continuarão de página para página no URL para sua paginação personalizada.

Usar $_GET está potencialmente a pedir uma violação de segurança. Certifique-se de validar ou desinfetar suas variables. O WordPress possui uma ótima documentação sobre validação de dados . Caso contrário, leia o manual do PHP para mais methods de Validação ou Sanitização .

No que diz respeito à sua paginação personalizada, eu recomendaria configurar uma variável extra no seu URL. Tenho certeza que sua paginação personalizada já configura um número de página. Então, você pode obter o número da página do seu URL (por exemplo, $_GET['page'] ) e ajustar o deslocamento da consulta para os resultados da pesquisa.

Hipotéticamente, digamos que você tinha uma paginação compatível com URL, juntamente com a seguinte configuração.

 $number_posts = 10;// Numer of search results to display per page. $current_page = $_SERVER['REQUEST_URI'];// Will return the current page values of your URL. $sub_page = '/page/';// Current pagination page. $using_pagination = strpos($current_page, $sub_page);// Check for paginated content. if($using_pagination === false){ /* Not using the pagination, get $number_posts with no offset. */ } else{ $page_number = explode('/page/', $current_page);// Locate just the sub-page from the URL. $page_number = preg_replace('/\D/', '', $page_number[1]);// Get only the sub-page number from the URL. if(is_numeric($page_number)){ /* Set the correct offset number, based on the number of search results to display. */ $offset = ($page_number - 1) * $number_posts; } /* Using the pagination, get $number_posts, with an offset of $offset. */ } 

Você pode usar o código acima para sua paginação personalizada para retornar os resultados de pesquisa apropriados. Nota: Lembre se, você precisaria naturalmente arrancar as variables ​​de pesquisa do URL, para consultar corretamente os resultados de pesquisa corretos.