переопределяем функцию которую дата указана в "data-action", на любую кастомную.
У меня: data-action="search_posts".
Далее создаем функцию search_posts:
add_action('wp_ajax_search_posts', 'search_posts');
function search_posts()
{
$s = $_GET['term']; //получает данные введенного текста для поиска
$args = array(
'post_type' => 'collection', //ваш тип поста
's' => $s, //поисковый запрос
);
$data = [];
$loop = new WP_Query($args);
if ($loop->have_posts()) {
while ($loop->have_posts()) {
$loop->the_post();
$post_id = get_the_id(); //получаем id записи
$post_name = get_the_title(); //получаем title записи
$data[$post_id] = $post_name; // добавляем в массив data
}
}
echo json_encode($data); //кодируем в json и выводим
wp_die(); //иначе 0 в конце всегда лишний в выводе
}
Далее меняем вывод нужных нам данных уже в самом поле select. Приведу в пример полный код select, чтобы не запутаться:
<select id="product_field_type" name="product_field_type[]" class="wc-product-search" multiple="multiple" style="width: 50%;" data-placeholder="<?php esc_attr_e('Поиск по названию коллекции', 'woocommerce'); ?>" data-action="search_posts">
<?php
$product_ids = [];
$product_field_type_ids = get_post_meta(get_the_ID(), '_product_field_type_ids', true); //сменил $post->ID на get_the_ID()
if (!empty($product_field_type_ids)) {
$product_ids = array_map('absint', $product_field_type_ids);
}
if ($product_ids) {
foreach ($product_ids as $product_id) {
//$product = new WP_Query($product_id); больше не нужен
echo sprintf(
'<option value="%s" %s>%s</option>',
esc_attr($product_id),
selected(true, true, false),
esc_html(get_the_title($product_id)) //получаем нужный нам title по id записи
);
}
}
?>
</select>