Как отобразить пользовательские результаты поиска из выбранной категории пользовательского типа сообщения? - PullRequest
0 голосов
/ 13 января 2020

У меня есть веб-сайт, на котором есть блог и пользовательский тип записи с именем proyecto.

Они находятся на mywebpage.com/blog и mywebpage.com/portafolio. На каждой из этих страниц есть поле поиска и раскрывающийся список категорий. .

Каждая страница должна только искать и фильтровать соответствующие сообщения. Также у каждого из них есть свой макет результатов поиска. Если я на mywebpage.com/portafolio, в результатах поиска должны отображаться только результаты типа proyecto с его пользовательским макетом. То же самое относится и к тому, что когда я выбираю только категорию из выпадающего списка (и ничего не набираю), он должен отображать только сообщения типа proyecto, для которых выбрана категория, и только категории, назначенные proyecto типам сообщений, снова с свой собственный макет.

В данный момент работает фильтр поиска и категории (я даже не уверен, работает ли он должным образом), но он объединяет оба результата (или не показывает их все) и отображает их только с post дизайн макета ... и когда я ищу пустой поиск, он всегда отображает все сообщения 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&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>

ПРИМЕЧАНИЕ :

  • Этот код используется на обеих страницах.
  • Я только изменяю заголовок страницы и значение скрытого ввода в поиске.
  • Я не могу знать, какими будут названия категорий, они будет создан пользователем.

Вот мой код o n * 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&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 разных документа результатов поиска для этого ...

Моя основная проблема заключается в том, что они функционируют так, как если бы они были одной и той же формой поиска, а не двумя разными (поскольку этот код находится на каждой странице с разными значениями в скрытом поле), то же самое относится к search.php. Должен ли я сделать 2 разных файла, если да, как это сделать?

Когда я фильтрую по категории, я бы хотел, чтобы результат URL был примерно таким:

для пользовательского типа записи: mywebpage.com/proyecto/category/category1/?s=some_text

и для блога: mywebpage.com/category/category1/?s=some_text

Я также пытался использовать POST и GET, и это сработало, но мои категории перестали работать ...

I Я искал ответ на мою проблему в течение нескольких дней и даже искал в кодексе и на различных форумах, но я не добился успеха, я также начинающий, поэтому я не знаю, смог ли я найти ответ, но я просто не понял его. .. Любая форма помощи и руководства приветствуется, спасибо.

1 Ответ

0 голосов
/ 13 января 2020

Хорошо, здесь я могу дать вам четкое представление о том, как обрабатывать ... Во-первых, создайте собственную таксономию для вашего CPT-проекта. Например: proyecto_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 и назначьте его странице, как мы упоминали в URL действия формы.

результаты поиска. 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);
...