N、 我所有的工作都在wordpress上。
我正在制作一个高级表单,其中有3个输入文本,用于显示酒店列表。
问题是我尝试了无数的技巧和函数,但没有任何结果,我得到的唯一结果是当我用标签搜索时,但我也按地址和等级搜索。
另一个问题是,我第一次以第一种方式使用自定义分类法,然后我使用了metabox,但我找不到如何显示结果。
这是表格
我想创建一个表单,根据三个标准搜索酒店:按地址、标签和评级,所以我想问的是我需要做什么?我是否需要使用metabox或taxonomy,最终的问题是如何显示搜索结果,因为我尝试了分类法和metabox,但没有成功显示结果。
edit
这是我的搜索表
<form method="get" role="search" action="<?php bloginfo(\'url\'); ?>" id="searchform">
<input type="text" name="adr" id="adress" value="" />
<span class="sepinput">_</span>
<input type="text" name="tag" id="tag" value="" />
<span class="sepinput">_</span>
<input type="text" name="dvoi" id="rate" value="" />
<span class="sepinput">_</span>
<input type="hidden" name="post_type" value="hotels" />
<input type="submit" id="searchsubmit" value="Recherche" />
</form>
这是我在搜索页面上的代码,但没有使用它,然后我创建了一个存档酒店页面。
<div id="main-area">
<?php
$args = array(
\'post_type\' => \'hotel\',
\'posts_per_page\' => 3,
\'paged\' => $paged,
\'relation\' => \'AND\',
\'meta_query\' => array(
array(
\'key\' => \'hotel[adr]\',
\'value\' => $adr,
\'compare\' => \'LIKE\',
),
array(
\'key\' => \'hotel[dvoi]\',
\'value\' => $dvoi,
\'compare\' => \'>\',
),
),
);
$wp_querysearch = new WP_Query( $args );
?>
<?php if ($wp_querysearch->have_posts()) : while ($wp_querysearch->have_posts()) : $wp_querysearch->the_post(); ?>
<div class="all_hotel">
<div class="hotel_image">
<?php $post_id = get_the_ID();
$hotel_data = get_post_meta( $post_id, \'_hotel\', true );
if(has_post_thumbnail()) {
$src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'image-style2\' );
echo \'<img src="\' . $src[0] . \'" alt="" />\';
} else {
echo \'<img src="\' . get_bloginfo( \'stylesheet_directory\' ) .\'/images/indxglri1.png" alt="" />\';} ?>
</div><!-- fin image -->
<div class="hotel_content">
<a href="<?php the_permalink(); ?>"><h1 class="hotel_title"><?php the_title(); ?></h1></a>
<div class="hotel_subcontent">
<div class="hotel_text">
<?php $trimmedtxt = substr(get_the_content(),0,224);
echo $trimmedtxt; ?>
</div><!--end hotel_text -->
</div>
</div>
<?php endwhile;?>
<?php else :
echo \'Pas de hotels pour l\\\'instant\';
endif;?>
</div> <!-- end #main-area -->
我是否需要匹配表单id或名称以及匹配它们所需的内容。因为那是我的代谢箱。
<input type="text" id="adr" value="<?php echo $adr; ?>" name="hotel[adr]" size="40" />
<input type="text" id="dvoi" value="<?php echo $dvoi; ?>" name="hotel[dvoi]" size="40" />
EDIT2
<?php
$voiture = $_GET[\'voiture\'];
$adresses = $_GET[\'adresses\'];
$tg = $_GET[\'tag\'];
$post_id = get_the_ID();
$hotel_data = get_post_meta( $post_id, \'_hotel\', true );
$dvoi = ( empty( $hotel_data[\'dvoi\'] ) ) ? \'\' : $hotel_data[\'dvoi\'];
$adr = ( empty( $hotel_data[\'adr\'] ) ) ? \'\' : $hotel_data[\'adr\'];
$args = array(
\'post_type\' => \'hotels\',
\'posts_per_page\' => 3,
\'relation\' => \'OR\',
\'meta_query\' => array(
array(
\'key\' => $adr,
\'value\' => $adresses,
\'compare\' => \'LIKE\',
),
array(
\'key\' => \'tag\',
\'value\' => $tg,
\'compare\' => \'LIKE\',
),
array(
\'key\' => $dvoi,
\'value\' => $voiture,
\'compare\' => \'=\',
),
),
);
$wp_querysearch = new WP_Query( $args );
?>
<?php if ($wp_querysearch->have_posts()) : while ($wp_querysearch->have_posts()) : $wp_querysearch->the_post(); ?>
这是我的代码,但它仍在浏览所有显示结果的内容,并显示else消息。
<?php endwhile;?>
<?php else :
echo \'Pas de hotels pour l\\\'instant\';
endif;?>
最合适的回答,由SO网友:sakibmoon 整理而成
由于您已经得到了标签的结果,我将仅对地址和评级给出建议。
对于您当前的情况,最好的选择是使用Wordpress post meta来存储这些值。然后您可以使用元查询来检索这些帖子。
$args = array(
\'post_type\' => \'hotel\',
\'meta_query\' => array(
array(
\'key\' => \'address\',
\'value\' => $adr,
\'compare\' => \'LIKE\',
),
),
);
$query = new WP_Query( $args );
用于评级
$args = array(
\'post_type\' => \'hotel\',
\'meta_query\' => array(
array(
\'key\' => \'rating\',
\'value\' => $rating,
\'compare\' => \'>\',
),
),
);
$query = new WP_Query( $args );
EDIT
您可以将元查询组合在一个查询中,如下所示
$args = array(
\'post_type\' => \'hotel\',
\'relation\' => \'AND\'
\'meta_query\' => array(
array(
\'key\' => \'address\',
\'value\' => $adr,
\'compare\' => \'LIKE\',
),
array(
\'key\' => \'rating\',
\'value\' => $rating,
\'compare\' => \'>\',
),
),
);
$query = new WP_Query( $args );
您也可以选择
OR
元查询之间的关系。
无论何时get_search_form()
被称为,内容为searchform.php
包括在内。这是默认的搜索页面。如果要保留该搜索选项,应该在其他地方包含此代码。可能在另一个文件中,并将其包含在要显示自定义搜索选项的位置。
也就是说,您的主要问题是如何接收传递的值。当您使用时GET
方法,您可以使用$_GET[\'adr\']
在提交表单后接收值。但你应该改名post_type
和tag
wordpress内置的查询变量。
EDIT
您正在将帖子元另存为数组。不要那样做。单独保存它们。保存它,以便通过
$adr = get_post_meta($post_id, \'adr\', true);
和评级依据
$dvoi = get_post_meta($post_id, \'dvoi\', true);
您的metabox代码应为
<input type="text" id="adr" value="<?php echo $adr; ?>" name="adr" size="40" />
<input type="text" id="dvoi" value="<?php echo $dvoi; ?>" name="dvoi" size="40" />
下面是一个元查询,用于显示评分相等的帖子
$voiture
或类似地址
$adresses
并包含tag$tag。
$args = array(
\'tag\' => $tag,
\'post_type\' => \'hotels\',
\'posts_per_page\' => 3,
\'relation\' => \'OR\',
\'meta_query\' => array(
array(
\'key\' => \'adr\',
\'value\' => $adresses,
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'dvoi\',
\'value\' => $voiture,
\'compare\' => \'=\'
)
)
);
$wp_querysearch = new WP_Query( $args );