WP Запрос поиск вложений и их точного заголовка

Вопрос или проблема

Из-за отсутствия репутации, я теперь должен задать вопрос. Я хочу создать поиск всех изображений в медиа-библиотеке. Результат поиска должен появляться только в том случае, если вы ищете точное название изображения. Я уже пробовал это с ‘exact’ => true, но это не работает. Все равно отображаются похожие изображения. Я создал запрос с следующими параметрами:

<?php
$args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'orderby' => 'post_date',
        'order' => 'desc',
        'posts_per_page' => '30',
        'post_status'    => 'inherit',
         );

     $loop = new WP_Query( $args );

while ( $loop->have_posts() ) : $loop->the_post();

$image = wp_get_attachment_image_src( get_the_ID() );
echo "<img src="" . $image[0] . "">";

endwhile; ?>

Надеюсь, кто-то сможет мне помочь.

Попробуйте что-то подобное

Обратное этому: https://wordpress.stackexchange.com/a/209714/180599

<?php
global $wpdb;

//Обратное этому: https://wordpress.stackexchange.com/a/209714/180599
$supported_mimes = array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' );
$all_mimes = get_allowed_mime_types();
$accepted_mimes = array_diff($supported_mimes, $all_mimes);

//и...
$keyword = stripslashes($_REQUEST['keyword']);
//$search = $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT ID FROM {$wpdb->posts} WHERE post_title="%s" OR post_content="%s" ", $keyword, $keyword ) );
$search = $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT ID FROM {$wpdb->posts} WHERE post_title="%s" ", $keyword ) );
$query = array(
    'post_type' => 'attachment', 
    'post_status' => 'inherit',
    'orderby' => 'date', 
    'order' => 'DESC',
    'posts_per_page' => 10,
    'post_mime_type' => $accepted_mimes,
    'post__in' => $search,
);  
$attachments = new WP_Query($query);
while($attachments->have_posts()):
    $attachments->the_post();

    echo $attachment->post_content.'<br>';
    echo $attachment->post_title.'<br>';
    //echo wp_get_attachment_image_src($attachment->ID, 'medium', true )[0].'<hr>';
    echo wp_get_attachment_url($attachment->ID).'<hr>';

endwhile;
?>

.

Ответ или решение

Чтобы создать WordPress-запрос (WP Query), который будет искать медиафайлы (в основном изображения) по точному заголовку, вам нужно будет внести некоторые изменения в ваш код. Ваша задача — ограничить результаты поиска только теми вложениями, заголовки которых точно совпадают с введенным запросом. Давайте рассмотрим, как это можно осуществить.

1. Настройка параметров запроса

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

2. Запрос к базе данных

Для получения всех изображений с точным заголовком, сначала необходимо получить список идентификаторов постов напрямую через $wpdb. Мы можем использовать метод prepare для безопасного выполнения SQL-запроса, чтобы предотвратить SQL-инъекции.

Вот как это сделать:

<?php
global $wpdb;

// Получите точное ключевое слово из запроса
$keyword = stripslashes($_REQUEST['keyword']);

// Выполните запрос для получения идентификаторов постов с точным совпадением заголовка
$search = $wpdb->get_col($wpdb->prepare(
    "SELECT DISTINCT ID FROM {$wpdb->posts} WHERE post_title = %s AND post_type = 'attachment' AND post_status = 'inherit'", $keyword
));

// Если идентификаторы найдены, создаем новый запрос WP_Query
if (!empty($search)) {
    $query_args = array(
        'post_type' => 'attachment',
        'post_status' => 'inherit',
        'orderby' => 'date',
        'order' => 'DESC',
        'posts_per_page' => 10,
        'post__in' => $search,
    );

    $attachments = new WP_Query($query_args);

    // Цикл для вывода результатов
    if ($attachments->have_posts()) {
        while ($attachments->have_posts()) {
            $attachments->the_post();
            $image_src = wp_get_attachment_image_src(get_the_ID(), 'medium');
            echo '<img src="' . esc_url($image_src[0]) . '" alt="' . esc_attr(get_the_title()) . '"><br>';
            echo 'Заголовок: ' . esc_html(get_the_title()) . '<br>';
            echo 'Ссылка: ' . esc_url(get_attachment_link(get_the_ID())) . '<br><hr>';
        }
        wp_reset_postdata(); // Сброс данных запроса
    } else {
        echo 'Изображения не найдены с таким заголовком.';
    }
} else {
    echo 'Идентификаторы вложений не найдены.';
}
?>

3. Объяснение кода

  1. Получение ключевого слова: Мы используем stripslashes() для обработки введенного пользователем текста, чтобы избежать проблем с экранированием.

  2. Запрос к базе данных: SQL-запрос выбирает уникальные ID всех вложений, заголовки которых совпадают с введенным термином. Мы также проверяем, чтобы найденные посты были именно вложениями (post_type = ‘attachment’) и имели статус ‘inherit’.

  3. Запрос WP_Query: Если слова найдены, мы создаем новый WP_Query, используя найденные ID.

  4. Цикл вывода: Подключаем схему выдачи, где для каждого вложения выводится изображение, его заголовок и ссылка.

  5. Безопасность: Код защищен от SQL-инъекций через метод prepare(), что делает его безопаснее.

Заключение

Этот код обеспечивает точный поиск изображений в медиабиблиотеке вашего WordPress-сайта. ИспользуяSQL-запрос для получения идентификаторов и WP_Query для их отображения, вы можете эффективно управлять выводом вложений, гарантируя, что отображаются только те, заголовки которых точно совпадают с запросом пользователя. Такой подход не только повышает качество поиска, но и улучшает взаимодействие пользователей с вашим сайтом.

Оцените материал
Добавить комментарий

Капча загружается...