【问题标题】:Custom Search for WordPress Turns Up No ResultsWordPress的自定义搜索没有结果
【发布时间】:2014-08-06 16:12:55
【问题描述】:

我正在使用高级自定义字段创建一个可搜索的图像存档,并在页面上显示相应的信息。我正在我的本地主机上开发这个。 我创建了一个自定义搜索表单 (searchform.php) 以及一个自定义搜索结果页面 (mysearch.php)。 自定义搜索表单包括一个选择菜单,该菜单由名为“流派”的自定义字段的值填充。虽然搜索表单本身正在与 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(); ?>

具有自定义字段“流派”的所有页面的帖子类别 ID 为 23(在使用自定义帖子类型 UI 插件的页面上实现)。

问题似乎出在搜索结果页面而不是搜索表单,因为 url 生成但没有给出任何结果,尽管存在 150 个页面并为自定义字段(“流派”)选择了值。

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

感谢您阅读本文。

【问题讨论】:

  • 你不能这样做:'meta_value' =&gt; $genres,它不能那样工作,有一个look here 以了解可能的情况。 编辑:如果你想使用来自 wp_postmeta 的数据,你需要使用 $wpdb 并使用 SQL 创建你自己的查询(据我所知)。

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


【解决方案1】:
     SELECT DISTINCT meta_value 
       FROM $wpdb->postmeta 
      WHERE meta_key = '%s' 
      ORDER 
         BY meta_value ASC

?

【讨论】:

    【解决方案2】:

    回答

    这并不完美,但它会起作用,如果其他人遇到同样的障碍,它会让您了解如何将 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; ?>
    

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 2012-08-06
      • 2018-03-11
      • 2021-02-03
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2014-01-03
      相关资源
      最近更新 更多