在自定义元字段中搜索

时间:2021-01-09 作者:Oox

我在帖子类型中有多个自定义字段。我可以保存数据,更新和显示,一切都很好。现在我在做搜索引擎。由于它是一个库,必须能够在特定字段(自定义字段)、publisher、country等中搜索。这里是我为publisher提供的代码。。。

我打开一个变量

    function register_query_vars( $vars ) {
    $vars[] = \'publisher\'; //
    return $vars;
} 
add_filter( \'query_vars\', \'register_query_vars\' );
按发布者在短代码中搜索表单

function publisher_search() {
    add_shortcode( \'search_form_publisher\', \'search_form_publisher\' );
}
add_action( \'init\', \'publisher_search\' );
形式:

function search_form_publisher( $atts ){
 
    $output = \'<form action="\' . esc_url( home_url() ) . \'" method="get" role="search">\';
    $output .= \'<input type="text" name="publisher" value="\' . get_search_query() . \'" class="field" placeholder="Search..."/>\';
    $output .= \'<input type="hidden" name="post_type" value="books" />\';
    $output .= \'<input type="submit" value="Search!" class="button" />\';
    $output .= \'</form>\';
    return $output;
}
到目前为止,一切都很好。搜索时,将生成以下url:

http://localhost/library/?publisher=search_term&post_type=books
它使用存档{post type}。php模板

$args = array(
  \'post_type\'      => \'books\',
  \'post_status\'    => \'publish\',
  \'meta_query\'     => array(
    array(
      \'key\'     => \'publisher\',
      \'value\'   => get_query_var(\'publisher\'),
      \'compare\' => \'LIKE\',

    ) 
  )
);

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {

    while ( $the_query->have_posts() ) : $the_query->the_post(); 
        // Your code here

   publisher();
       
    endwhile;

} else {
        echo \'no posts found\';
}
/* Restore original Post Data */
wp_reset_postdata();
我像这样打印自定义字段发布器的值,其效果很好:

function publisher() {
    global $wp_query;
    $post = $wp_query->post;
    $publisher = get_post_meta($post->ID, \'publisher\', true);
    if (!empty($publisher)) {
        echo $publisher;
    }
}
然而,问题是查询不返回任何结果。打印内容如下:

Array ( [post_type] => books [post_status] => publish [meta_query] => Array ( [0] => Array ( [key] => publisher [value] => Harvard [compare] => LIKE ) ) )
也就是说,如果它收集了搜索词的值。我尝试了许多在互联网上找到的代码,但都不起作用。我认为一个添加posts\\u搜索过滤器的函数,但我尝试过的那些都不起作用。

如果您能帮助解决这个问题,我将不胜感激。我迷路了。非常感谢。

1 个回复
SO网友:Oox

思考了这个问题后,我找到了最简单的解决方案,使用$wpdb进行直接查询

在存档中-{post type}。php

<?php 

global $wpdb;
$meta_key = get_query_var(\'publisher\');
$result = $wpdb->get_results("
    SELECT  * 
    FROM  " . $wpdb->prefix. "postmeta_books 
    WHERE publisher LIKE  \'%$meta_key%\' 
");
foreach( $result as $results ) {

        echo $results->publisher;
        echo \'<br/>\';
        

    }
?>
这是一个基本的查询,需要加以改进,但我想与大家分享,以结束这个问题。当然效果很好。

相关推荐

search based on custom field

我的问题是,有没有办法将wordpress的搜索配置为在自定义帖子类型中搜索自定义字段值。//------------html code--------------------// <input type=\"text\" name=\"keyword\" id=\"keyword\" onkeyup=\"fetch()\"></input> <div id=\"datafetch\"></div> &#x