Фильтр таксономии в поиске не показывает назначенные сообщения - PullRequest
0 голосов
/ 22 января 2020

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

Вот как Я создал таксономию с именем custom в функциях. php:

function themes_taxonomy()
{
    $labels = array(
        'name'                       => _x( 'Categorias Portafolio', 'taxonomy general name', 'textdomain' ),
        'singular_name'              => _x( 'Categoria Portafolio', 'taxonomy singular name', 'textdomain' ),
        'menu_name'                  => __( 'Categorias Portafolio', 'textdomain' )
    );
    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels, // display name
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'public'            => true,
        'rewrite'           => array( 'slug' => 'proyecto' )   // This controls the base slug that will display before each term
    );
    register_taxonomy( 'custom', 'proyecto' , $args);
}
add_action( 'init', 'themes_taxonomy');

Я создал пользовательский тип записи proyecto в функциях. php

function wpdocs_codex_book_init()
{
$labels = array(
        'name'                  => __('Proyectos'),
        'singular_name'         => __('Proyectos'),
        'menu_name'             => __('Proyectos'),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'show_in_rest'       => true,
        'show_in_nav_menus'  => true,
        'query_var'          => true,
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => true,
        'menu_position'      => null,
        'supports'           => array( 'title' ),
        'menu_icon'          => 'dashicons-building',
        'exclude_from_search' => false,
        'can_export' => true,
        'taxonomies' => array( 'custom' )
    );
    register_post_type( 'proyecto', $args);
}
add_action( 'init', 'wpdocs_codex_book_init' );

Вот как форма поиска получает ввод и пользовательскую таксономию (категории) в виде выпадающего списка:

<form action="<?php echo site_url('/');?>" method="get" 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="text" name="s" class="search-txt" placeholder="Búsqueda" value="" />
                        <input type="hidden" name="post_type" value="proyecto"/>
                    </label>
                </div>
                <div class="col-lg-4">
                    <?php
                    $tax_terms = get_terms('custom', array('hide_empty' => '0'));
                    ?>
                    <select name="cat" id="cat" class="postform custom-select" name="categoryfilter">
                        <option value="0">Categor&iacute;a</option>
                        <?php
                        foreach ( $tax_terms as $tax_term )
                        {
                            ?>
                            <option value="<?php echo $tax_term->term_id;?>" data-categoria="<?php echo $tax_term->name;?>"><?php echo $tax_term->name;?></option>
                            <?php
                        }
                        ?>
                    </select>
                </div>
            </div>
            <div class="row justify-content-end cont-btn">
                <input type="submit" value="Buscar" class="btn-submit btn-main-aqua">
                <div class="btn-submit btn-main-aqua" onclick="displaymessage();reset()">Vaciar Campos</div>
            </div>
        </form>

И вот как я отображаю результаты в поиск. php

<?php

                if(have_posts())
                {
                    if (get_post_type() == 'proyecto')
                    {
                        while (have_posts())
                        {
                            the_post();
                            /* content */
                        }
                    }
                    else
                    {
                        if (get_post_type() == 'post')
                        {
                            while (have_posts())
                            {
                                the_post();
                                /* content */
                            }
                        }
                        else
                        {
                            ?>
                            <div class="ml-3">No se encontraron publicaciones.</div>
                            <?php
                        }
                    }
                }
                else
                {
                    ?>
                    <div class="ml-3">No se encontraron publicaciones.</div>
                    <?php
                }
                ?>

Когда я отправляю форму, выбирая из выпадающего списка одну из категорий, URL выглядит так:

http://localhost/visual/?s=&post_type=proyecto&cat=26

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

Я также попытался добавить:

function custom_cpt_search( $query )
{
    if ( is_search() && $query->is_main_query() && $query->get( 's' ) )
    {
        $query->set('post_type', array('proyecto'));
    }
    return $query;
};
add_filter('pre_get_posts', 'custom_cpt_search');

но это не сработало ... Кто-нибудь может сказать мне, если я что-то упустил? Я ' Я все еще новичок в WordPress ...

...