• ResolvidoModerador Allyson

    (@allysonsouza)


    Olá,

    Estou criando um formulário de pesquisa para modificar a query do arquivo de um CPT, para isso estou utilizando pre_get_posts para modificar a query, e um dos campos e parâmetros que quero definir é o de busca, ‘s’, porém não tem funcionado.

    – Sei que o pre_get_posts está funcionando para outros parâmetros;
    – Já tentei passar uma string hardcoded como teste ao invés da variável e o resultado é o mesmo;
    – Realizei a consulta no MySQL pelo palavra, procurando por LIKE no campo de título e conteúdo, e assim é retornado posts.

            // Pesquisa por palavra-chave
            if( isset( $_GET['palavra'] ) ) {
              $query->set( 's', sanitize_text_field( $_GET['palavra'] ) );
            }
Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • Moderador Allyson

    (@allysonsouza)

    Postando o código mais detalhado do meu pre_get_posts.

    function pre_get_posts_archive( $query ) {
        if ( is_post_type_archive( 'my_cpt' ) && $query->is_main_query() ) {
            // Pesquisa por palavra-chave
            if( isset( $_GET['palavra'] ) ) {
              $query->set( 's', sanitize_text_field( $_GET['palavra'] ) );
            }
        }
    }
    add_action( 'pre_get_posts', 'pre_get_posts_archive' );
    Moderador Allyson

    (@allysonsouza)

    Resolvido. (Graças ao @leobaiano)

    Eu estava modificando a query com outros parâmetros também, porém faltava verificar se os parâmetros não estavam vazios, além de simplesmente definidos, pois a meta_query sem valores default causava o erro no meu código.

    Código final funcionando:

    function pre_get_posts_archive_autor( $query ) {
        if ( is_post_type_archive( 'autor' ) && $query->is_main_query() ) {
            // Pesquisa por autor
            if( isset( $_GET['autor'] ) && ! empty( $_GET['autor'] ) ) {
              $query->set( 'title', sanitize_title_for_query( $_GET['autor'] ) );
            }
    
            // Pesquisa por tema
            if( isset( $_GET['tema'] ) && ! empty( $_GET['tema'] ) ) {
              $tax_query = array(
                'relation' => 'OR',
                array(
                  'taxonomy' => 'tema',
                  'field'    => 'name',
                  'terms'    => sanitize_text_field( $_GET['tema'] ),
                ),
                array(
                  'taxonomy' => 'tema',
                  'field'    => 'slug',
                  'terms'    => sanitize_text_field( $_GET['tema'] ),
                )
              );
    
              $query->set( 'tax_query', $tax_query );
            }
    
            // Pesquisa por palavra-chave
            if( isset( $_GET['palavra'] ) && ! empty( $_GET['palavra'] ) ) {
              $query->set( 's', sanitize_text_field( $_GET['palavra'] ) );
            }
    
        }
    }
    add_action( 'pre_get_posts', 'pre_get_posts_archive_autor' );
    • Esta resposta foi modificada 8 anos, 1 mês atrás por Allyson.
    Moderador Leo Baiano

    (@leobaiano)

    Boa @allysonsouza, valeu por voltar e registrar a solução!

Visualizando 3 respostas - 1 até 3 (de um total de 3)
  • O tópico ‘Parâmetro ‘s’ de query pelo pre_get_posts’ está fechado para novas respostas.