自定义搜索WordPress没有结果

时间:2014-08-06 16:12:56

标签: php mysql wordpress search advanced-custom-fields

我正在创建一个可搜索的图像存档,并使用高级自定义字段在页面上显示相应的信息。我正在我当地的主机上开发这个。 我创建了一个自定义搜索表单(searchform.php)以及一个自定义搜索结果页面(mysearch.php)。 自定义搜索表单包含一个选择菜单,该菜单由名为' genre'的自定义字段的值填充。当搜索表单iteself与wordpress数据库元数据表进行通信以填充选择菜单时,搜索结果页面不会显示所选值的任何结果。

这是我的搜索表单的代码:

<form role="search" method="get" id="searchform" action="<?php esc_url( home_url( '/' )); ?>">
   <div>
   <input type='hidden' name='page_id' value='979'>
    <input type="hidden" value="" name="s" id="s" />
    <input type="hidden" value="page" name="post_type">
    <select name="genre">
    <?php
    global $wpdb;
    $metakey = 'genre';
    $genres = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s ORDER BY meta_value ASC", $metakey) );
    if ($genres) {
       foreach ($genres as $genre) {
          echo "<option value=\"" . $genre . "\">" . $genre . "</option>";
        }
    }
    ?>
    </select>
    <input type="submit" id="searchsubmit" value="Search" />
  </div>
</form>

以下是搜索结果页面代码的必要条件(page_id = 979):

<?php

global $wpdb;

$genres = $_GET['genre'];
if ($genres) {
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

  $args=array(
    'cat' => 23,
    'meta_value' => $genres,
    'paged' => $paged
  );

  $query = new WP_Query($args);
} else {
  get_posts('cat=23');
}

if ($query) { ?>
  <h3>Your Search For <?php echo $genres; ?></h3>
  <?php } else { ?>
  <h3>Recently Added</h3>
  <?php }

if (have_posts()) :  while (have_posts()) : the_post();

$genre_search = get_post_meta($post->ID, 'genre', true); ?>
<div class="entry">
  <h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
  <?php the_title(); ?></a></h2>
  <?php the_content(); ?>
  <?php echo $genre_search; ?>
  <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">  Read More</a>
</div>
<?php endwhile;  ?>
<?php else : ?>
<p>Sorry no results were found</p>
<?php endif; ?>

<?php wp_reset_query(); ?>

所有包含自定义字段&#39;类型&#39;的网页帖子类别ID为23(使用自定义帖子类型UI插件在页面上实现)。

问题似乎与搜索结果页面而不是搜索表单有关,因为网址会生成但不会给出任何结果,尽管存在150个页面,其中包含为自定义字段选择的值(&#39;流派&# 39。)

我已经在这里待了一个星期并搜索了许多论坛,在WordPress论坛上问了同样的问题,但无法弄清楚我的错误发生在哪里。任何帮助将不胜感激。

感谢您阅读本文。

2 个答案:

答案 0 :(得分:0)

     SELECT DISTINCT meta_value 
       FROM $wpdb->postmeta 
      WHERE meta_key = '%s' 
      ORDER 
         BY meta_value ASC

答案 1 :(得分:0)

答案

这并不完美但它会起作用,如果其他人遇到同样的障碍,它会让你知道如何将sql查询传递给输出结果。你可以从那里完善。再次感谢FDL的非常有用的指示。

<?php

global $wpdb;

$genres = $_GET['genre'];

$querygenres = "
   SELECT wposts.*
   FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
   WHERE wposts.ID = wpostmeta.post_id
   AND meta_key = 'Genre'
   AND meta_value LIKE '%" .$genres. "%'
   AND wposts.post_type = 'page'
 ";

 $genrepages = $wpdb->get_results($querygenres, OBJECT)

?>
  <div id="primary" class="content-area">
    <div id="content" class="site-content" role="main">

         if ($genrepages):
 foreach ($genrepages as $post):
       setup_postdata($post); ?>

               <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
               <?php the_excerpt(); ?>

    <?php endforeach;

        endif; ?>