0

Having finally being able to make an AJAX driven live search functional, I need help understanding how to add an else argument function so that when there are no posts matching the search query, the search box will display "No results found" or whatever text I choose.

This is the code I have whereof the else argument before the endif crashes the site.

add_action('wp_ajax_data_fetch' , 'data_fetch');
add_action('wp_ajax_nopriv_data_fetch', 'data_fetch');
function data_fetch() {

    $post_search_query = new WP_Query(array('posts_per_page' => -1, 's' => esc_attr($_POST['search_keyword']), 'post_type' => 'post'));

        if ($post_search_query->have_posts()) :

            while ($post_search_query->have_posts()): $post_search_query->the_post(); ?>

        <h5><a href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></h5>
        <span class="live-search-post-excerpt"><?php the_excerpt(); ?></span>

    <?php endwhile;

        wp_reset_postdata();

            else {
            
                echo 'No results found';
        }
    endif;

die();

}

1 Answer 1

0

Try to not using endif and endwhile, just use curly brakets {} to determinate ifs body or add :after elseelse:`

Your problem is that you mix two syntaxes.

Read this to fully understand how to write alternative syntax https://www.php.net/manual/en/control-structures.alternative-syntax.php

    add_action('wp_ajax_data_fetch' , 'data_fetch');
    add_action('wp_ajax_nopriv_data_fetch', 'data_fetch');
    function data_fetch() {
    
        $post_search_query = new WP_Query(array('posts_per_page' => -1, 's' => esc_attr($_POST['search_keyword']), 'post_type' => 'post'));
    
            if ($post_search_query->have_posts()){
    
                while ($post_search_query->have_posts()){  $post_search_query->the_post(); ?>
    
            <h5><a href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></h5>
            <span class="live-search-post-excerpt"><?php the_excerpt(); ?></span>
    
        <?php } //end while
wp_reset_postdata();
} //end if
    
         
    
                else {
                
                    echo 'No results found';
            } // end else
        
    
    die();
    
    }
12
  • Hi and thanks for the very quick reply. I'm trying to understand and thereby debug your code as it gives me the following error: Parse error: syntax error, unexpected 'else' (T_ELSE) Any idea?
    – user199578
    Commented Jan 12, 2021 at 7:15
  • sorry, just one ending curly braket left :D i wrote this fast without editor so i didnt check number of brakets
    – Sahasrar
    Commented Jan 12, 2021 at 7:19
  • Okay? Can you please update the code since adding an additional } at the end still gives the same error.
    – user199578
    Commented Jan 12, 2021 at 7:21
  • Your update is done :) Try it...
    – Sahasrar
    Commented Jan 12, 2021 at 7:22
  • Thank you, but it still gives the same error.
    – user199578
    Commented Jan 12, 2021 at 7:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.