WordPress

zapytanie wp — wiele pól wyszukiwania AJAX nie łączy się z scalaniem tablic

  • 21 lutego, 2023
  • 4 min read
zapytanie wp — wiele pól wyszukiwania AJAX nie łączy się z scalaniem tablic


jest to bardzo frustrujący problem.

Mam kilka pól wyszukiwania dla różnych feilds na mojej stronie. niektóre to pola meta acf, inne dotyczą tytułu, a jeszcze inne dotyczą taksonomii słów kluczowych.

Ale na froncie działa tylko pierwsze pole wprowadzania (dla tytułu).

Jeśli używam każdego zapytania indywidualnie, działa dobrze. Nie rozumiem, dlaczego scalanie nie działa. Mogę dodać więcej parametrów do jednego zapytania, ale z jakiegoś powodu użycie tablicy po „s” => $title_q psuje to!

W idealnym świecie najlepiej byłoby mieć to wszystko w jednym zapytaniu, ale staram się zobaczyć, jak to osiągnąć.

każda pomoc jest doceniana!

oto wejściowy kod HTML:

<!-- select report title -->
        <div class="dropdowndiv"> 
            <label for ="Title">Title:</label>
        <input type="text" name="s" id="title" class="input_search" onkeyup="fetch();">
        </div>

<!-- select report author -->

        <div class="dropdowndiv"> 
            <label for ="Title">Author:</label>
        <input type="text" name="t" id="author" class="input_search" onkeyup="fetch();">
        </div>

<!-- select report keyword -->

        <div class="dropdowndiv"> 
            <label for ="Title">Keywords:</label>
        <input type="text" name="q" id="keywords" class="input_search" onkeyup="fetch();">
        </div>

<!-- select report year of publication -->   

        <div class="dropdowndiv"> 
            <label for ="Title">Year Of Publication:</label>
        <input type="text" name="r" id="year" class="input_search" onkeyup="fetch();">
        </div>

oraz kod AJAX:

function fetch(){
    jQuery.ajax({
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        type: 'post',
        data: { 
        action: 'data_fetch', 
        keywords: jQuery('#keywords').val(),
        author: jQuery('#author').val(),
        title: jQuery('#title').val(),
        year: jQuery('#year').val(),
        },
        success: function(data) {
            jQuery('#datafetch').html( data );
        }
    });

}

i wreszcie wyjściowe PHP i zapytania:



// the ajax function
add_action('wp_ajax_data_fetch' , 'data_fetch');
add_action('wp_ajax_nopriv_data_fetch','data_fetch');

function data_fetch(){

    extract($_POST);
    $author_q = $_POST["author"];
    $title_q = $_POST["title"];
    $keywords_q = $_POST["keywords"];
    $year_q = $_POST["year"];

echo "search terms in php";
echo "<br/>";
echo $keywords_q;
echo "<br/>";
echo $title_q;
echo "<br/>";
echo $author_q;
echo "<br/>";
echo $year_q;
echo "<br/>";

   $q1 = new WP_Query(array(
        'post_type' =>  'Library', 
        'fields' => 'ids',
        'posts_per_page' => -1, 
        's' => $title_q, 
        'meta_key' => 'author',
        'meta_value' => $author,
            ));

   $q2 = new WP_Query(array(
        'post_type' =>  'Library',
        'posts_per_page' => -1, 
        'fields'  => 'ids',
        'meta_query' => array(
        'relation' => 'OR',
            array(
       'key' => 'author',
       'field' => 'slug',
       'value' => $author_q,          
                ),
            array(
       'key' => 'year-of-publication',
       'field' => 'slug',
       'value' => $year_q,
                )
        ),
    )
    );
   $q3 = new WP_Query(array(
        'post_type' =>  'Library',
        'fields' => 'ids',
        'tax_query' => array(
            array(
            'taxonomy' => 'keywords',
             'field'  => 'slug',
            'terms' => $keywords_q,
         )
        )
    )
   );

$post_ids = array_unique( array_merge( $q1->posts, $q2->posts, $q3->posts ), SORT_REGULAR );
//$result = new WP_Query($q3);
var_dump($post_ids);
$wp_query_merged =  new WP_Query(array(
    'post_type' => 'Library',
    'post__in'  => $post_ids, 
    'orderby'   => 'date', 
    'order'     => 'DESC',
));
            while ( $q1->have_posts() ) : $q1->the_post(); ?>

            <p><a href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></p>

        <?php endwhile;
       echo '</div>';
        wp_reset_postdata();  

    die();
}


Źródło

Warto przeczytać!  WP REST API zwraca pustą odpowiedź, jeśli post jest za długi