Пользовательский поисковый запрос WordPress, игнорирующий posts_per_page на pre_get_posts - PullRequest
0 голосов
/ 24 сентября 2018

Я работал с этой функцией, и по какой-то причине я не могу понять проблему здесь.

У меня есть функция, которую я хочу повлиять на результаты поиска, чтобы изменить число posts_per_page запроса не ограничено.

По какой-то причине $query->set('posts_per_page', -1) и $query->set('post__in', $post__in), кажется, ничего не делают, в то время как $query->set('tax_query', $tax_query) работает .

Любойидеи будут высоко оценены!

    function fp_search_query_mod( $query ) {

    if ( $query->is_search && $query->is_main_query() && !is_admin() ) :

        $cats = ( isset($_GET['cats'] ) ? $_GET['cats'] : null );

        $post__in = array();

        if ( !empty( $cats ) ) :

            $cats = explode( ',', $cats );

            $tax_query = array(

                'relation'  => 'AND',

                array(
                    'taxonomy' => 'product_type',
                    'field'    => 'slug',
                    'terms'    => array( 'simple', 'variable' ) 
                ),

                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'id',
                    'terms'    => $cats,
                )

            );

            $query->set( 'tax_query', $tax_query );

            if ( in_array( 'favs', $cats ) ) :

                $fp_favs = get_user_meta( get_current_user_id(), 'fp_favs', true );

                if ( !empty( $fp_favs ) ) {

                    $post__in = $fp_favs;

                }

            endif;

            if ( in_array( 'purchases', $cats ) ) :

                // $purchased = get_customer_purchased_products();
                $purchased = get_user_meta( get_current_user_id(), 'fp_purchases', true );

                if ( !empty( $post__in ) ) {

                    $post__in = array_merge( $post__in, $purchased );

                    $post__in = array_unique( $post__in );

                } else {

                    $post__in = $purchased;

                }

            endif;

        endif;

        if ( !empty( $post__in ) ) :

            $query->set( 'post__in', $post__in );

        endif;

        $query->set( 'posts_per_page', -1 );

    endif;

}
add_action( 'pre_get_posts', 'fp_search_query_mod', 2 );

Вот страница, на которой отображаются результаты: https://filmpacdev.wpengine.com/?s=beaches&post_type=product

...