我正在努力在wordpress中修复默认搜索形式。我只是设置一些过滤器,以使用户选择,然后单击“确定”以使用过滤器进行搜索,除“标记”复选框外,其他所有功能都正常运行。
我尝试了所有这些方法:标签(字符串)–使用标签段塞。tag_id(int)–使用标签ID。tag__and(数组)–使用标签ID。tag__in(数组)–使用标签ID。tag__not_in(数组)–使用标签ID。tag_slug__and(array)–使用标签块。tag_slug__in(数组)–使用标签块。
但结果相同。
我在searchform.php中的搜索表单
<form role="search" method="get" id="searchform" class="skytube-search-form" action="<?php echo home_url( '/' ); ?>">
<input type="search" placeholder="<?php esc_attr_e( 'Search for what you want...', 'aldoustech' ); ?>" value="<?php the_search_query(); ?>" name="s" id="s" onkeyup="search()">
<label for="order">الترتيب حسب التاريخ</label>
<select name="order">
<option <?php if ($_GET['order'] == 'ASC') { ?>selected="true" <?php }; ?>value="ASC">الأقدم</option>
<option <?php if ($_GET['order'] == 'DESC') { ?>selected="true" <?php }; ?>value="DESC">الأحدث</option>
</select>
<label for="posts_per_page">عدد النتائج المعروضة</label>
<select name="posts_per_page">
<option <?php if ($_GET['posts_per_page'] == '10') { ?>selected="true" <?php }; ?>value="10">10</option>
<option <?php if ($_GET['posts_per_page'] == '50') { ?>selected="true" <?php }; ?>value="50">50</option>
<option <?php if ($_GET['posts_per_page'] == '100') { ?>selected="true" <?php }; ?>value="100">100</option>
</select>
<label for="category_name">التصنيف</label>
<select name="category_name">
<option <?php if ($_GET['category_name'] == '') { ?>selected="true" <?php }; ?>value="">
الكل
</option>
<option <?php if ($_GET['category_name'] == 'مسلسلات-أنمي') { ?>selected="true" <?php }; ?>value="مسلسلات-أنمي">
مسلسلات أنمي
</option>
<option <?php if ($_GET['category_name'] == 'مسلسلات آسيوية') { ?>selected="true" <?php }; ?>value="مسلسلات آسيوية">
مسلسلات آسيوية
</option>
<option <?php if ($_GET['category_name'] == 'مسلسلات-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="مسلسلات-الأنيميشن-و-الكرتون">
مسلسلات الأنيميشن و الكرتون
</option>
<option <?php if ($_GET['category_name'] == 'أفلام-أنمي') { ?>selected="true" <?php }; ?>value="أفلام-أنمي">
أفلام أنمي
</option>
<option <?php if ($_GET['category_name'] == 'أفلام آسيوية') { ?>selected="true" <?php }; ?>value="أفلام آسيوية">
أفلام آسيوية
</option>
<option <?php if ($_GET['category_name'] == 'أفلام-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="أفلام-الأنيميشن-و-الكرتون">
أفلام الأنيميشن و الكرتون
</option>
</select>
<div>
<?php
if( $terms = get_terms( array(
'taxonomy' => 'post_tag',
'orderby' => 'name'
) ) ) :
foreach ( $terms as $term ) :
echo '<input type="checkbox" name="tag" value="' . $term->slug . '"' . (($_GET['tag'] == $term->slug)?'checked':"") . '> ' . $term->name;
endforeach;
endif;
?>
</div>
<input type="submit" id="searchsubmit" value="<?php esc_attr_e( 'Search', 'aldoustech' ); ?>">
</form>
[当我选择一些过滤器然后点击搜索时,URL变成类似这样。
http://localhost:8080/wordpress/?s=&order=ASC&posts_per_page=10&cat=3
并且当我选择一个标签时,URL看起来像这样
http://localhost:8080/wordpress/?s=&order=ASC&posts_per_page=10&cat=3&tag=hello
两个URL都很好,但是当我选择多个标签时,URL变成了这样。
http://localhost:8080/wordpress/?s=&order=ASC&posts_per_page=10&cat=3&tag=hello&tag=bye
您可以看到tag=hello&tag=bye
的副本
此表单没有得到我想要的结果,因为它必须像这样:
tag=hello+bye
此代码对我有用。
// In footer.php
<script type="text/javascript">
// Get the selected tags in search
function getTheCheckedTags() {
var items = document.getElementsByName('tags');
var selectedItems = "";
for(var i=0; i<items.length; i++){
if(items[i].type=='checkbox' && items[i].checked==true)
selectedItems+=items[i].value+",";
}
document.getElementsByName('tag')[0].value = selectedItems;
}
document.getElementById('searchform').addEventListener('change', getTheCheckedTags);
</script>
// Don't forget to call the Jquery before this code.
<script>
$('#searchform').submit( function(){
var tags = $('.tags');
tags.prop('disabled', true);
});
</script>
// In searchform.php
<form role="search" method="get" id="searchform" class="skytube-search-form" action="<?php echo home_url( '/' ); ?>">
<input type="search" placeholder="<?php esc_attr_e( 'Search for what you want...', 'aldoustech' ); ?>" value="<?php the_search_query(); ?>" name="s" id="s" onkeyup="search()">
<label for="order">الترتيب حسب التاريخ</label>
<select name="order">
<option <?php if ($_GET['order'] == 'ASC') { ?>selected="true" <?php }; ?>value="ASC">الأقدم</option>
<option <?php if ($_GET['order'] == 'DESC') { ?>selected="true" <?php }; ?>value="DESC">الأحدث</option>
</select>
<label for="posts_per_page">عدد النتائج المعروضة</label>
<select name="posts_per_page">
<option <?php if ($_GET['posts_per_page'] == '10') { ?>selected="true" <?php }; ?>value="10">10</option>
<option <?php if ($_GET['posts_per_page'] == '50') { ?>selected="true" <?php }; ?>value="50">50</option>
<option <?php if ($_GET['posts_per_page'] == '100') { ?>selected="true" <?php }; ?>value="100">100</option>
</select>
<label for="category_name">التصنيف</label>
<select name="category_name">
<option <?php if ($_GET['category_name'] == '') { ?>selected="true" <?php }; ?>value="">
الكل
</option>
<option <?php if ($_GET['category_name'] == 'مسلسلات-أنمي') { ?>selected="true" <?php }; ?>value="مسلسلات-أنمي">
مسلسلات أنمي
</option>
<option <?php if ($_GET['category_name'] == 'مسلسلات آسيوية') { ?>selected="true" <?php }; ?>value="مسلسلات آسيوية">
مسلسلات آسيوية
</option>
<option <?php if ($_GET['category_name'] == 'مسلسلات-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="مسلسلات-الأنيميشن-و-الكرتون">
مسلسلات الأنيميشن و الكرتون
</option>
<option <?php if ($_GET['category_name'] == 'أفلام-أنمي') { ?>selected="true" <?php }; ?>value="أفلام-أنمي">
أفلام أنمي
</option>
<option <?php if ($_GET['category_name'] == 'أفلام آسيوية') { ?>selected="true" <?php }; ?>value="أفلام آسيوية">
أفلام آسيوية
</option>
<option <?php if ($_GET['category_name'] == 'أفلام-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="أفلام-الأنيميشن-و-الكرتون">
أفلام الأنيميشن و الكرتون
</option>
</select>
<div>
<?php
if( $terms = get_terms( array(
'taxonomy' => 'post_tag',
'orderby' => 'name'
) ) ) :
foreach ( $terms as $term ) :
echo '<input class="tags" type="checkbox" name="tags" value="' . $term->slug . '"' . (($_GET['tag'] == $term->slug)?'checked':"") . '> ' . $term->name;
endforeach;
endif;
?>
</div>
<input type="text" name="tag" value=""> نوع
<input type="submit" id="searchsubmit" value="<?php esc_attr_e( 'Search', 'aldoustech' ); ?>">
</form>
我自己编写了代码,通过使用javascript将选中的复选框添加到另一个文本字段中,然后通过表格将其数据发送给文本字段,已经解决了问题。