如何显示自定义帖子类型的选定类别中的自定义搜索结果?

问题描述 投票:0回答:1

我有一个拥有博客和自定义帖子类型的网站,称为proyecto

它们位于mywebpage.com/blogmywebpage.com/portafolio上。每个页面都有一个搜索字段和类别下拉选择器。

每个页面应该搜索并过滤各自的帖子。此外,它们每个都有一个自定义搜索结果布局。如果我在mywebpage.com/portafolio上,则搜索结果应仅以其自定义布局显示proyecto帖子类型的结果。同样,当我仅从下拉列表中选择一个类别(不输入任何内容)时,它应该仅显示已选择类别的proyecto类型的帖子,并且仅显示分配给proyecto帖子类型的类别,自己的布局。

目前,搜索和类别过滤器工作正常(甚至不能确定其是否正常工作),但是它合并了两个结果(或没有全部显示出来),并且仅以post设计布局显示它们……并且当我寻找一个空的Seach时,它总是显示所有的proyecto帖子和带有post布局的某些proyecto结果。

这是我在page-blog.phppage-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>

NOTE

  • 这是我在两个页面上使用的相同代码。
  • 我仅更改搜索中隐藏输入的页面标题
  • 我不知道类别名称是什么,它们将由用户创建。

这是我在search.phpcategory.php上的代码:

<?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();?>

我不确定这是否是正确的编码方式,或者我是否应该为此使用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,所以我不知道我是否能找到答案,但是我没有找到答案了解它...任何形式的帮助和指导都非常感谢,谢谢。

wordpress search categories custom-post-type
1个回答
0
投票

[确定,在这里我可以给您一个清晰的思路,该如何处理...首先为您的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);
© www.soinside.com 2019 - 2024. All rights reserved.