我正在创建一个可搜索的图像存档,并使用高级自定义字段在页面上显示相应的信息。我正在本地主机上开发这个。 我创建了一个自定义搜索表单(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 插件的页面上实现)。
问题似乎出在搜索结果页面而不是搜索表单,因为尽管存在 150 个页面,并且为自定义字段(“流派”)选择了值,但 url 生成但没有给出任何结果。
我已经这样做了一个星期,搜索了很多论坛,在 WordPress 论坛上问了同样的问题,但无法弄清楚我的错误发生在哪里。任何帮助将不胜感激。
感谢您阅读本文。
最佳答案
SELECT DISTINCT meta_value
FROM $wpdb->postmeta
WHERE meta_key = '%s'
ORDER
BY meta_value ASC
?
关于php - WordPress 的自定义搜索没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165223/