Поддержка Проблемы и решения Как сделать поиск по таксономиям?

  • Здравствуйте, создал небольшой плагин, как сделать что то типа
    <input type=»hidden» name=»post_type» value=»piece» />
    в поиске, только чтобы искать по таксономии model?

    Код плагина:

    
    <?php
    /*
    Plugin Name: Mini Shop Service
    Description: Добавляет мини-магазин запчастей.
    Version: 1.0
    Author: Vlad Neverov
    Author URI: https://www.youtube.com/c/VladislavNeverov
    */
    
    add_action('init', 'create_piece_type');
    
    function create_piece_type()
    {
    	register_taxonomy('model', ['piece'],
    	[ 
    		'label'                 => 'Модель',
    		'labels'                => [
    			'name'              => 'Модели',
    			'singular_name'     => 'Модель',
    			'search_items'      => 'Поиск по моделям',
    			'all_items'         => 'Все модели',
    			'view_item '        => 'Просмотр модели',
    			'parent_item'       => 'Родительская модель',
    			'parent_item_colon' => 'Родительская модель:',
    			'edit_item'         => 'Редактировать модель',
    			'update_item'       => 'Обновить модель',
    			'add_new_item'      => 'Добавить модель',
    			'new_item_name'     => 'Название модели',
    			'menu_name'         => 'Модели',
    		],
    		'public'                => true,
    		// 'publicly_queryable'    => null, // равен аргументу public
    		'show_in_nav_menus'     => true, // равен аргументу public
    		'show_ui'               => true, // равен аргументу public
    		'show_in_menu'          => true, // равен аргументу show_ui
    		// 'show_tagcloud'         => true, // равен аргументу show_ui
    		'show_in_quick_edit' => true,
    		'hierarchical'          => true,
    		'capabilities'          => [],
    		'meta_box_cb'           => null, // html метабокса. callback: <code>post_categories_meta_box</code> или <code>post_tags_meta_box</code>. false — метабокс отключен.
    		'show_admin_column'     => true, // авто-создание колонки таксы в таблице ассоциированного типа записи. (с версии 3.5)
    		'show_in_rest'          => true, // добавить в REST API
    		'rest_base'             => null, // $taxonomy
    		'query_var' => true,
    		'rewrite' => array(
    			'slug' => 'model',
    			'with_front' => false,
    			'hierarchical' => true,
    			'ep_mask' => EP_NONE,
    		),
    		// '_builtin'              => false,
    		//'update_count_callback' => '_update_post_term_count',
    	]);
    
        register_post_type('piece',
        [
    		'label'  => 'Мини-магазин',
    		'labels' => [
    			'name'               => 'Запчасти', // основное название для типа записи
    			'singular_name'      => 'Запчасть', // название для одной записи этого типа
    			'add_new'            => 'Добавить запчасть', // для добавления новой записи
    			'add_new_item'       => 'Добавление запчасти', // заголовка у вновь создаваемой записи в админ-панели.
    			'edit_item'          => 'Редактирование запчасти', // для редактирования типа записи
    			'new_item'           => 'Новая запчасть', // текст новой записи
    			'view_item'          => 'Смотреть запчасть', // для просмотра записи этого типа.
    			'search_items'       => 'Искать запчасть', // для поиска по этим типам записи
    			'not_found'          => 'Не найдено', // если в результате поиска ничего не было найдено
    			'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине
    			'parent_item_colon'  => '', // для родителей (у древовидных типов)
    			'menu_name'          => 'Запчасти', // название меню
            ],
    		'public'              => true,
    		'publicly_queryable' => true,
    		'exclude_from_search' => true,
    		// 'show_ui'             => null, // зависит от public
    		// 'show_in_nav_menus'   => null, // зависит от public
    		'show_in_menu'        => null, // показывать ли в меню адмнки
    		// 'show_in_admin_bar'   => null, // зависит от show_in_menu
    		'show_in_rest'        => true, // добавить в REST API. C WP 4.7
    		'rest_base'           => null, // $post_type. C WP 4.7
    		'menu_position'       => null,
    		'menu_icon'           => 'dashicons-admin-tools', 
    		//'capability_type'   => 'post',
    		//'capabilities'      => 'post', // массив дополнительных прав для этого типа записи
    		//'map_meta_cap'      => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
    		'hierarchical'        => false,
    		'supports'            => [ 'title', 'editor', 'thumbnail', 'custom-fields' ], // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
    		'taxonomies'          => ['model'],
    		'has_archive'         => true,
    		'rewrite'             => false,
    		'query_var'           => true,
    	]);
    }
    
    function get_shop_search_form( $args = array() )
    {
    	/**
    	 * Fires before the search form is retrieved, at the start of get_search_form().
    	 *
    	 * @since 2.7.0 as 'get_search_form' action.
    	 * @since 3.6.0
    	 *
    	 * @link https://core.trac.wordpress.org/ticket/19321
    	 */
    	do_action( 'pre_get_search_form' );
    
    	$echo = true;
    
    	if ( ! is_array( $args ) ) {
    		/*
    		 * Back compat: to ensure previous uses of get_search_form() continue to
    		 * function as expected, we handle a value for the boolean $echo param removed
    		 * in 5.2.0. Then we deal with the $args array and cast its defaults.
    		 */
    		$echo = (bool) $args;
    
    		// Set an empty array and allow default arguments to take over.
    		$args = array();
    	}
    
    	// Defaults are to echo and to output no custom label on the form.
    	$defaults = array(
    		'echo'       => $echo,
    		'aria_label' => '',
    	);
    
    	$args = wp_parse_args( $args, $defaults );
    
    	/**
    	 * Filters the array of arguments used when generating the search form.
    	 *
    	 * @since 5.2.0
    	 *
    	 * @param array $args The array of arguments for building the search form.
    	 */
    	$args = apply_filters( 'search_form_args', $args );
    
    	$format = current_theme_supports( 'html5', 'search-form' ) ? 'html5' : 'xhtml';
    
    	/**
    	 * Filters the HTML format of the search form.
    	 *
    	 * @since 3.6.0
    	 *
    	 * @param string $format The type of markup to use in the search form.
    	 *                       Accepts 'html5', 'xhtml'.
    	 */
    	$format = apply_filters( 'search_form_format', $format );
    
    	$search_form_template = locate_template( 'searchform.php' );
    	if ( '' != $search_form_template ) {
    		ob_start();
    		require $search_form_template;
    		$form = ob_get_clean();
    	} else {
    		// Build a string containing an aria-label to use for the search form.
    		if ( isset( $args['aria_label'] ) && $args['aria_label'] ) {
    			$aria_label = 'aria-label="' . esc_attr( $args['aria_label'] ) . '" ';
    		} else {
    			/*
    			 * If there's no custom aria-label, we can set a default here. At the
    			 * moment it's empty as there's uncertainty about what the default should be.
    			 */
    			$aria_label = '';
    		}
    		if ( 'html5' == $format ) {
    			$form = '<h4>Поиск запчастей по модели или серийному номеру</h4><form role="search" ' . $aria_label . 'method="get" class="search-form" action="' . esc_url( home_url( '/' ) ) . '">
    				<label>
    					<span class="screen-reader-text">' . _x( 'Search for:', 'label' ) . '</span>
    					<input type="search" class="search-field" placeholder="' . esc_attr_x( 'Search &hellip;', 'placeholder' ) . '" value="' . get_search_query() . '" name="s" />
    				</label>
    				<input type="hidden" name="post_type" value="piece">
    				<input type="submit" class="search-submit" value="' . esc_attr_x( 'Search', 'submit button' ) . '" />
    			</form>';
    		} else {
    			$form = '<h4>Поиск запчастей по модели или серийному номеру</h4><form role="search" ' . $aria_label . 'method="get" id="searchform" class="searchform" action="' . esc_url( home_url( '/' ) ) . '">
    				<div>
    					<label class="screen-reader-text" for="s">' . _x( 'Search for:', 'label' ) . '</label>
    					<input type="text" value="' . get_search_query() . '" name="s" id="s" />
    					<input type="hidden" name="post_type" value="piece" />
    					<input type="submit" id="searchsubmit" value="' . esc_attr_x( 'Search', 'submit button' ) . '" />
    				</div>
    			</form>';
    		}
    	}
    
    	/**
    	 * Filters the HTML output of the search form.
    	 *
    	 * @since 2.7.0
    	 *
    	 * @param string $form The search form HTML output.
    	 */
    	$result = apply_filters( 'get_search_form', $form );
    
    	if ( null === $result ) {
    		$result = $form;
    	}
    
    	if ( $args['echo'] ) {
    		echo $result;
    	} else {
    		return $result;
    	}
    }
    
    # Вывод поиска
    add_shortcode('get_mini_shop', 'get_mini_shop');
    
    function get_mini_shop()
    {
        return get_shop_search_form(false);
    }