Suporte » Desenvolvendo com WordPress » Paginação em pesquisa avançada

  • Rafael Fer Souza

    (@rafael-fer-souza)


    Olá pessoal, estou tentando fazer uma paginação em uma pesquisa personalizada. Até consegui mostrar a quantidade de páginas correta, porém quando clica no link para próximo ou no número da página, dá como página não encontrada (404).
    Se alguém poder me ajudar agradeço muito.

    Segue o código completo da página:

    `<?php
    /*
    Template Name: TPL Legislação
    */
    get_header();

    $is_search = count( $_GET );

    ?>

    <!– Main –>
    <div class=”container”>
    <div class=”row”>
    <div class=”col-sm-12 col-md-12 col-lg-9 col-xl-9 col-xxl-9 mt-3 mb-3″ style=”background-color: #fff;”>
    <div class=”row”>
    <div class=”col”>
    <h1 class=”titulo-page”>Legislação</h1>
    <hr>
    <p class=”text-center”>Utilize os campos abaixo para pesquisar as Leis Municipais</p>

    <div class=”card p-3″>

    <form action=”<?php echo home_url(‘legislacao/’); ?>”>

    <div class=”form-group”>
    <label> Digite a palavra:</label>
    <input type=”text” class=”form-control mb-3″ name=”keyword” placeholder=”Digite a palavra que deseja pesquisar”
    value=”<?php echo isset($_GET[‘keyword’]) ? $_GET[‘keyword’] : ” ?>”>
    </div>

    <div class=”row”>

    <div class=”form-group col-md-8″>
    <label>Selecione o tipo:</label>
    <select name=”tipo” class=”form-select mb-3″>
    <option value=””>Selecione o tipo</option>

    <option
    <?php if( isset($_GET[‘tipo’]) && ($_GET[‘tipo’] == “leiordinaria”)): ?>
    selected
    <?php endif; ?>
    value=”leiordinaria”>Lei Ordinária</option>

    <option
    <?php if( isset($_GET[‘tipo’]) && ($_GET[‘tipo’] == “leicomplementar”)): ?>
    selected
    <?php endif; ?>
    value=”leicomplementar”>Lei Complementar</option>

    <option
    <?php if( isset($_GET[‘tipo’]) && ($_GET[‘tipo’] == “decreto”)): ?>
    selected
    <?php endif; ?>
    value=”decreto”>Decreto</option>
    </select>
    </div>

    <div class=”form-group col-md-4″>
    <label> Digite o ano:</label>
    <input type=”number” class=”form-control mb-3″ name=”ano” placeholder=”Digite o ano”
    value=”<?php echo isset($_GET[‘ano’]) ? $_GET[‘ano’] : ” ?>”>
    </div>

    </div>

    <div class=”d-grid gap-2″>
    <button class=”btn btn-primary” type=”submit”><h5>Pesquisar</h5></button>
    </div>

    </form>
    </div>

    <?php //parametros para mostrar o resultado
    $args = [
    ‘paged’ => get_query_var(‘paged’, 1),
    ‘post_type’ => ‘legislacao’,
    ‘posts_per_page’ => 10,
    ‘meta_query’ => [
    ‘relation’ => ‘AND’,
    ],

    ‘date_query’ => [],

    ];

    if(isset($_GET[‘keyword’])) //recebe a palavra chave
    {
    if(!empty($_GET[‘keyword’]))
    {
    $args[‘s’] = sanitize_text_field($_GET[‘keyword’]);
    }

    }

    if(isset($_GET[‘tipo’])) //recebe o tipo de legislação
    {
    if(!empty($_GET[‘tipo’]))
    {
    $args[‘meta_query’][] = array(
    ‘key’ => ‘tipo’,
    ‘value’ => sanitize_text_field($_GET[‘tipo’]),
    ‘compare’ => ‘=’,

    );

    }

    }

    if(isset($_GET[‘ano’])) //recebe o ano da legislação
    {
    if(!empty($_GET[‘ano’]))
    {
    $args[‘date_query’][] = array(
    ‘year’ => sanitize_text_field($_GET[‘ano’]),
    ‘compare’ => ‘=’,
    ‘column’ => ‘post_date’ ,

    );

    }

    }

    if($is_search)
    {
    $query = new WP_Query($args);

    }

    ?>

    <?php if($is_search): ?>
    <?php if($query->have_posts() ) : //se houver resultado mostre?>

    <div class=”m-3 text-center”>
    <h5>
    Resultado da sua pesquisa:
    </h5>

    </div>

    <?php while ( $query->have_posts() ) : $query->the_post(); ?>

    <?php $arquivo = get_field(‘arquivo’);?>
    <?php $tipo = get_field(‘tipo’); ?>

    ” class=”linknotD” title=”<?php echo $tipo[‘label’]; ?> – <?php the_title(); ?>/<?php echo get_the_date(‘Y’); ?>” target=”_blank”>
    <div class=”card mb-3″>

    <div class=”row m-1″>
    <div class=”col-md-2 d-flex justify-content-center align-items-center”>
    <i class=”fas fa-file-pdf iconeedi”></i>
    </div>
    <div class=”col-md-10 col-lg-10″>
    <h4><?php echo $tipo[‘label’]; ?> – <?php the_title(); ?>/<?php echo get_the_date(‘Y’); ?>
    </h4>
    <small class=”text-muted”> <i class=”far fa-calendar-alt mb-2″></i>
    <?php echo get_the_date(); ?></small>
    <?php the_content(); ?>
    </div>
    </div>

    </div>

    <?php endwhile; ?>

    <!– paginação –>
    <div class=”col text-center”>
    <?php echo paginate_links(array(
    ‘total’ => $query->max_num_pages
    ));
    ?>
    </div>
    <!– paginação –>

    <?php wp_reset_postdata();?>

    <?php else: //se não houver resultado faz isto?>

    <div class=”alert alert-danger mt-3 text-center” role=”alert”>
    Não encontramos nenhuma legislação! <br>
    Faça uma nova pesquisa.
    </div>

    <?php endif; ?>
    <?php endif; ?>

    </div>
    </div>
    </div>
    <!– fim main–>

    <!– barra lateral –>
    <div class=”col-xs-12 col-sm-12 col-md-12 col-lg-3 col-xl-3 col-xxl-3 pt-3″>
    <h5 class=”text-cinza”>Acesso Rápido</h5>
    <?php get_template_part(‘template-parts/acesso-rapidolateral’); ?>

    </div>
    </div>
    </div>

    </div>

    <?php get_footer(); ?>

  • O tópico ‘Paginação em pesquisa avançada’ está fechado para novas respostas.