WordPress, поиск в отрывке вместо содержимого

#php #full-text-search #wordpress

#php #полнотекстовый поиск #wordpress

Вопрос:

я впервые публикуюсь на форуме, но здесь я нашел ответы без вопросов, просто поискал, спасибо за это.

Здесь идут мои вопросы:

У меня есть пользовательский тип записи под названием ‘publicacion’ и там следующий пользовательский запрос WP_Query:

 $query_args = array( 
        's' => mysql_real_escape_string( $_GET['s'] ),
        'post_type' => 'publicacion',
        'meta_key' => 'meta-box-fp'
    );

    if( $_GET['autor'] != '' ) {
        $query_args['tax_query'] = array( 
                                        array( 
                                            'taxonomy' => 'autores', 
                                            'field' => 'slug', 
                                            'terms' => mysql_real_escape_string( $_GET['autor'] ) 
                                        ) 
                                    );
    }

    if( trim( $_GET['fini'] ) != '' || trim( $_GET['ffin'] ) != '' ) {
        $query_args['meta_query'] = array ( 
                                        array( 
                                            'key' => 'meta-box-fp',
                                            'value' => array( mysql_real_escape_string( $_GET['fini'] ) . '-00-00', mysql_real_escape_string( $_GET['ffin'] ) . '-00-00' ), 
                                            'type' => 'DATE',
                                            'compare' => 'BETWEEN' ) 
                                    );
    }

    if( isset( $_GET['ord_by'] ) ) {
        $ordby = mysql_real_escape_string( $_GET['ord_by'] ) == 'year' ? 'meta_value' : mysql_real_escape_string( $_GET['ord_by'] );
        $query_args['orderby'] = $ordby;//mysql_escape_string( $_GET['ord_by'] );
        $query_args['order'] = 'DESC';//mysql_escape_string( $_GET['ord'] );
    }

    $query = new WP_Query( $query_args );
  

Параметр ‘s’ перенаправляет на страницу поиска, но мне нужно выполнить поиск в archive-publicacion.php файл, и мне нужен параметр ‘s’, поиск в отрывке вместо содержимого.
Это возможно сделать? Спасибо, и я надеюсь, что мой вопрос будет ясен, и извините меня за мой английский.

Ответ №1:

что ж.. я решил свою проблему, добавив параметры запроса в functions.php из темы вместо из archive.php и изменение ‘s’ на ‘str’ в URL, чтобы не перенаправлять запрос, когда wordpress считывает URL. Это выглядит примерно так functions.php:

     add_action( 'pre_get_posts', 'my_custom_search' );
function my_custom_search( $query ) {
    if( !is_admin() amp;amp; $query->is_main_query() amp;amp; $query->get('post_type') == 'publicacion' ) {

        if( isset( $_GET['str'] ) amp;amp; !empty( $_GET['str'] ) ) {
            $query->set( 's', mysql_real_escape_string( $_GET['str'] ) );
        }

        if( ( isset( $_GET['fini'] ) amp;amp; !empty( $_GET['fini'] ) ) amp;amp; ( isset( $_GET['ffin'] ) amp;amp; !empty( $_GET['ffin'] ) ) ) {
            $fini = !empty( $_GET['fini'] ) ? mysql_real_escape_string( $_GET['fini'] ) . '-00-00' : '1900-00-00';
            $ffin = !empty( $_GET['ffin'] ) ? mysql_real_escape_string( $_GET['ffin'] ) . '-00-00' : date( 'Y' ) . '-00-00';
            $args_meta_query = array(
                                        array(
                                            'key' => 'meta-box-fp', 
                                            'value' => array( $fini, $ffin ), 
                                            'type' => 'DATE', 
                                            'compare' => 'BETWEEN' 
                                        )
                                );
            $query->set( 'meta_query', $args_meta_query );
        }

        if( isset( $_GET['autor'] ) amp;amp; !empty( $_GET['autor'] ) ) {
            $args_tax_query = array(
                                        array( 
                                            'taxonomy' => 'autores', 
                                            'field' => 'slug', 
                                            'terms' => mysql_real_escape_string( $_GET['autor'] ) 
                                        )
                                );
            $query->set( 'tax_query', $args_tax_query ); 
        }

        if( isset( $_GET['ordby'] ) amp;amp; $_GET['ordby'] != 'fecha' ) {
            $ordby = mysql_real_escape_string( $_GET['ordby'] );
            $query->set( 'orderby', $ordby );
            $query->set( 'order', strtoupper( mysql_real_escape_string( $_GET['ord'] ) ) );
        }else {
            $ord = isset( $_GET['ord'] ) amp;amp; !empty( $_GET['ord'] ) ? strtoupper( mysql_real_escape_string( $_GET['ord'] ) ) : 'DESC';
            $query->set( 'orderby', 'meta_value_num' );
            $query->set( 'meta_key', 'meta-box-fp' );
            $query->set( 'order', $ord );
        }

    }
}
  

Я надеюсь, что это кому-нибудь поможет и еще раз извините меня за мой английский.
Пока.