web-dev-qa-db-fra.com

Résultats de recherche WordPress avec Ajax, get_post_type () ne fonctionne pas

J'essaie de charger les résultats de la recherche en utilisant Ajax. Les résultats s'affichent correctement, mais il semble que je ne parvienne pas à utiliser get_search_query() pour que le terme de recherche apparaisse avant les résultats. Je sais que je pourrais le faire avec Javascript, mais je suis vraiment curieux de savoir pourquoi les fonctions WordPress ne fonctionnent pas. J'ai également essayé d'utiliser $_GET['s'] et get_query_var('s'), qui ne fonctionnent pas.

S'il vous plaît voir mon code ci-dessous:

Functions.php

<?php add_action( 'wp_ajax_search_results', 'load_search_results' );
add_action( 'wp_ajax_nopriv_search_results', 'load_search_results' );

function load_search_results() {
    $query = $_POST['query'];
    $args = array(
        'post_status' => array( 'publish', 'inherit' ),
        's' => $query
    );
    $search = new WP_Query( $args );

    if ( $search->have_posts() ) :         
    ?>
        <h1><?php printf( __( 'Results for: %s', 'theme' ), get_search_query() ); ?></h1>
        <?php /* Start the Loop */ ?>
        <?php  while( $search->have_posts() ): $search->the_post();?>
            <?php get_template_part( 'content', get_post_type() ); ?>
        <?php endwhile;
    else :?>
        <p><?php _e( 'No results', 'theme' ); ?></p>
    <?php endif;    
    die();      
}?>


Code JS

    $(document).on('submit', '.search-form', function( event ) {
        event.preventDefault();
        var $input = $(this).find('input[name="s"]');
        var $sQuery = $input.val();
        $('#results').html('');
        $.ajax({
            url: ajaxPosts.ajaxurl,
            type: 'post',
            data: {
                action: 'search_results',
                query: $sQuery                  
            },
            success: function( html ) {
                $('#results').append( html );
            }
        });

    }); 
1
Bob

$_GET['s'] ne fonctionnera pas pour deux raisons. Premièrement, vous effectuez une demande POST et non une requête GET. Deuxièmement, il n'y a pas de variable nommée s dans votre demande.

Lors de l'exécution d'une demande AJAX via wp-admin/admin-ajax.php , WordPress exécute uniquement le code (fonction) enregistré pour cette demande. Il charge également les API d’administration de WordPress et les gestionnaires Ajax pour WordPress Core. Ainsi, les vars de requête, les modèles, etc. ne sont pas initialisés et c'est pourquoi get_search_query () ne fonctionne pas. Le flux d'une demande AJAX est différent de celui normal et seul le strict minimum est en cours de chargement. Vous pouvez voir wp-admin/admin-ajax.php pour plus de détails sur le flux.

0
Laxmana