【问题标题】:Wordpress, search in excerpt instead contentWordpress,搜索摘录而不是内容
【发布时间】:2014-07-05 02:32:31
【问题描述】:

我在论坛上发了新帖子,但在这里我找到了答案,没有问,只是搜索,谢谢。

这里是我的问题:

我有一个名为“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' 参数,搜索摘录而不是内容。 有可能这样做吗?谢谢,我希望我的问题很清楚,请原谅我的英语。

【问题讨论】:

    标签: php full-text-search wordpress


    【解决方案1】:

    好吧..我已经解决了我的问题,方法是在functions.php中从主题而不是archive.php中添加查询参数,并将url中的“s”更改为“str”,以便在wordpress读取时不重定向查询网址。 这看起来像这样的functions.php:

        add_action( 'pre_get_posts', 'my_custom_search' );
    function my_custom_search( $query ) {
        if( !is_admin() && $query->is_main_query() && $query->get('post_type') == 'publicacion' ) {
    
            if( isset( $_GET['str'] ) && !empty( $_GET['str'] ) ) {
                $query->set( 's', mysql_real_escape_string( $_GET['str'] ) );
            }
    
            if( ( isset( $_GET['fini'] ) && !empty( $_GET['fini'] ) ) && ( isset( $_GET['ffin'] ) && !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'] ) && !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'] ) && $_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'] ) && !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 );
            }
    
        }
    }
    

    我希望这对某人有所帮助,并再次原谅我的英语。 再见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多