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&iacute;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&uacute;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&aacute;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_查询正确后运行查询。