Wordpress 如何显示自定义帖子类型的选定类别的自定义搜索结果?
我有一个网站,它有一个博客和一个名为Wordpress 如何显示自定义帖子类型的选定类别的自定义搜索结果?,wordpress,search,categories,custom-post-type,Wordpress,Search,Categories,Custom Post Type,我有一个网站,它有一个博客和一个名为proyecto的自定义帖子类型 它们位于mywebpage.com/blog和mywebpage.com/portafolio上。每个页面都有一个搜索字段和类别下拉选择器 每个页面应仅搜索和筛选各自的帖子。此外,它们每个都有一个自定义的搜索结果布局。如果我在mywebpage.com/portaflio上,搜索结果应该只显示proyecto带有自定义布局的帖子类型结果。同样,当我只从下拉列表中选择一个类别(并且不键入任何内容)时,它应该只显示选择了该类别的帖
proyecto
的自定义帖子类型
它们位于mywebpage.com/blog
和mywebpage.com/portafolio
上。每个页面都有一个搜索字段和类别下拉选择器
每个页面应仅搜索和筛选各自的帖子。此外,它们每个都有一个自定义的搜索结果布局。如果我在mywebpage.com/portaflio
上,搜索结果应该只显示proyecto
带有自定义布局的帖子类型结果。同样,当我只从下拉列表中选择一个类别(并且不键入任何内容)时,它应该只显示选择了该类别的帖子类型proyecto
,并且只显示分配给proyecto
帖子类型的类别,同样,具有自己的布局
目前,搜索和类别筛选工作正常(我甚至不确定它是否工作正常),但它合并了两个结果(或没有全部显示),并且只在post
设计布局中显示它们。。。当我查找一个空搜索时,它总是显示所有proyecto
帖子以及proyecto
布局中的一些post
结果
这是我在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>
<?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();?>
我不确定这是否是正确的编码方式,或者我是否应该有两个不同的搜索结果文档
我的主要问题是,它们的功能就像是1个相同的搜索表单,而不是2个不同的搜索表单(因为每个页面上的代码在隐藏字段中具有不同的值),这同样适用于search.php
。我应该制作两个不同的文件吗?如果是的话,我应该怎么做
当我按类别筛选时,我希望url结果如下所示:
对于自定义帖子类型:mywebpage.com/proyecto/category/category1/?s=some_text
对于博客:mywebpage.com/category/category1/?s=some_text
我也尝试过使用POST和GET,它确实有效,但它使我的分类停止工作
我已经四处寻找我的问题的答案好几天了,甚至在抄本和各种论坛上搜索,但我没有成功,我也是一个乞丐,所以我不知道我是否找到了答案,但我只是不明白。。。非常感谢任何形式的帮助和指导。好的,在这里我可以给你一个清晰的想法,如何处理。。。首先为您的CPT项目创建自定义分类法。。例如proyecto\u cat 搜索表单代码
<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>
<?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);
如果您创建两个搜索结果页面,我会更好。我的意思是一个单独的搜索结果页面为您的自定义文章类型。首先为您的CPT创建自定义分类法,然后使用form action POST将其重定向到搜索结果页面模板,这样您就可以轻松获取表单的POST值,也可以编写查询以在页面上显示结果。感谢您的回复!我还考虑了一些类似的选项,但我不完全确定所有这些是如何编码的,或者文件是否应该以某种方式命名。。。你能再给我解释一下吗?给您带来的不便,我深表歉意;;非常感谢您的帮助,但是我有一些问题:在搜索表单中,即使您只包含select,我也添加了输入,因为它必须存在,以防用户决定键入内容。当我提交时,它仍然会把我带到search.php
,而不是search results.php
。。。我没有提到,但是,由于我的原始代码不起作用(主要是因为te categories…),我使用了一个插件,使得search.php
和category.php
工作正常,这就是问题所在,对吗;;同样在search-results.php中,代码应该在循环之前,对吗?我应该这样使用它吗如果($query->have_posts(){而($query->have_posts())$query->the_post();
再次感谢您的帮助嘿,是的,您也可以使用输入框并修改查询。让您创建一个名为“搜索结果”的页面并将您的search-results.php模板分配给该页面?正如您所说的,在wp_查询正确后运行查询。