我有一个拥有博客和自定义帖子类型的网站,称为proyecto
。
它们位于mywebpage.com/blog
和mywebpage.com/portafolio
上。每个页面都有一个搜索字段和类别下拉选择器。
每个页面应该仅搜索并过滤各自的帖子。此外,它们每个都有一个自定义搜索结果布局。如果我在mywebpage.com/portafolio
上,则搜索结果应仅以其自定义布局显示proyecto
帖子类型的结果。同样,当我仅从下拉列表中选择一个类别(不输入任何内容)时,它应该仅显示已选择类别的proyecto
类型的帖子,并且仅显示分配给proyecto
帖子类型的类别,自己的布局。
目前,搜索和类别过滤器工作正常(甚至不能确定其是否正常工作),但是它合并了两个结果(或没有全部显示出来),并且仅以post
设计布局显示它们……并且当我寻找一个空的Seach时,它总是显示所有的proyecto
帖子和带有post
布局的某些proyecto
结果。
这是我在page-blog.php
和page-proyecto.php
上的代码:
<section id="search">
<div class="container">
<div class="page-title">PAGE TITLE</div>
<form action="" method="post" class="search-form searchandfilter justify-content-between" id="searchbar">
<div class="row">
<div class="offset-lg-2 col-lg-6">
<label class="search-bar">
<div class="btn-search"><i class="fa fa-search"></i></div>
<input type="search" name="ofsearch" class="search-txt" placeholder="<?php echo esc_attr_x( 'Búsqueda', 'placeholder' ) ?>" value="<?php echo get_search_query()?>" />
<input type="hidden" name="post_type" value="post_type"/>
</label>
</div>
<div class="col-lg-4">
<?php
$categories = get_categories( array ('orderby' => 'name', 'order' => 'asc' ) );
if( $terms = get_categories( array('taxonomy' => 'category', 'orderby' => 'name') ) )
{
?>
<select name="ofcategory" id="ofcategory" class="postform custom-select" name="categoryfilter">
<option value="0">Categoría</option>
<?php
foreach ( $terms as $term )
{
?>
<option value="<?php echo $term->term_id;?>" data-categoria="<?php echo $term->name;?>"><?php echo $term->name;?></option>
<?php
}
?>
</select>
<?php
}
?>
<input type="hidden" name="ofcategory_operator" value="and">
</div>
</div>
<div class="row justify-content-end">
<input type="hidden" name="ofsubmitted" value="1">
<input type="submit" value="Filtrar" class="btn-submit btn-main-aqua">
<div class="btn-submit btn-main-aqua" onclick="displaymessage();reset()">Vaciar Campos</div>
</div>
</form>
</div>
</section>
NOTE:
这是我在search.php
和category.php
上的代码:
<?php get_header();?>
<section id="search">
<div class="container">
<div class="row m-0"><div class="page-title">Resultados de búsqueda</div></div>
<div class="row p-3"><div class="title">"<?php the_search_query();?>"</div></div>
<div class="row row-eq-height m-0">
<?php
if(have_posts())
{
if (get_post_type() == 'proyecto')
{
while (have_posts())
{
the_post();
$img = get_field("port-logo");
?>
<div class="col-lg-4 col-md-6 col-sm-12 p-0" data-aos="fade-up" data-aos-duration="1000">
<a href="<?php the_permalink();?>">
<div class="proyecto-img">
<img src="<?php echo $img;?>">
</div>
</a>
</div><!-- ITEM -->
<?php
}
}
else
{
if (get_post_type() == 'post')
{
while (have_posts())
{
the_post();
$titulo = get_field("blog-titulo");
$subtitulo = get_field("blog-subtitle");
$img = get_field("blog-img");
$intro = get_field("blog-intro");
?>
<div class="col-lg-4 col-md-6 col-sm-12" data-aos="fade-up" data-aos-duration="1000">
<div class="post-cont">
<a href="<?php echo the_permalink();?>">
<div class="post-img">
<img src="<?php echo $img;?>">
<div class="subtitle"><?php foreach((get_the_category()) as $category){ echo '- ' . $category->cat_name; }?></div>
</div>
</a>
<div class="desc-title"><?php echo the_title();?></div>
<div class="post-desc"><?php echo $intro;?></div>
<a href="<?php echo the_permalink();?>">Leer más</a>
</div>
</div><!-- ITEM -->
<?php
}
}
else
{
?>
No results.
<?php
}
}
}
else
{
?>
No results.
<?php
}
?>
</div>
<div class="row p-0 m-0 mt-5">
<a href="javascript:history.go(-1)"><div class="btn-main-red">Regresar</div></a>
</div>
</div>
</section>
<?php get_footer();?>
我不确定这是否是正确的编码方式,或者我是否应该为此使用2个不同的搜索结果文档...
我的主要问题是,它们的功能就像是1个相同的搜索表单,而不是2个不同的表单(因为每个页面上的代码在隐藏字段上具有不同的值),因此search.php
也一样。我应该制作2个不同的文件吗,如果可以,该怎么办?
当我按类别过滤时,我希望url结果是这样的:
对于自定义帖子类型:mywebpage.com/proyecto/category/category1/?s=some_text
并且对于博客:mywebpage.com/category/category1/?s=some_text
我也尝试过使用POST和GET,它确实起作用,但是它使我的类别停止起作用...
几天来,我一直在寻找解决问题的方法,甚至在法典和各种论坛中都进行了搜索,但是我没有成功,我还是个乞in,所以我不知道我是否能找到答案,但是我没有找到答案了解它...任何形式的帮助和指导都非常感谢,谢谢。
[确定,在这里我可以给您一个清晰的思路,该如何处理...首先为您的CPT proyecto创建自定义分类法。例如,proyecto_cat Create Taxonomy
搜索表单代码
<form method="post" action="<?php echo site_url('search-results'); ?>">
<div class="row">
<select name="proyecto_cat">
<?php
$proyecto_cat = get_terms( array(
'taxonomy' => 'proyecto_cat',
'hide_empty' => false,
'orderby' => 'name'
) );
foreach ($proyecto_cat as $key => $value) {
?>
<option value="<?php echo $value->term_id; ?>"><?php echo $value->name; ?></option>
<?php } ?>
</select>
<input type="submit" name="proyecto_submit" value="Search" class="proyecto_submit">
</div>
</form>
然后创建一个search-results.php模板文件,并将其分配给页面,就像我们在表单操作url中提到的那样。
search-results.php文件
<?php
$proyecto_cat = $_POST['proyecto_cat'];
$tax_query = array(
array(
'taxonomy' => 'proyecto_cat',
'terms' => $proyecto_cat,
'field' => 'term_id',
'operator' => 'IN',
),
);
$args = array(
'post_type' => array( 'proyecto' ),
'order' => 'DESC',
'posts_per_page' => '-1',
'orderby' => 'date',
'tax_query' => $tax_query,
);
$query = new WP_Query( $args );
print_r($query);