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