我正在创建一个可搜索的图像存档,并使用高级自定义字段在页面上显示相应的信息。我正在我当地的主机上开发这个。 我创建了一个自定义搜索表单(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论坛上问了同样的问题,但无法弄清楚我的错误发生在哪里。任何帮助将不胜感激。
感谢您阅读本文。
答案 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; ?>