Поддержка Проблемы и решения Поиск по произвольным полям.

  • Здравствуйте форумчане. На днях решил реализовать поиск по произвольному полю на WordPress и столкнулся с кое-какой проблемой, частично её решил, но возможно сможете и помочь. Немного о задаче: есть раздел со статьями. В нём модератор публикует материалы, указав в созданном доп.поле Автор — Имя и Фамилию автора, который прислал статью. Так же, в статье есть ссылка «Показать все записи автора», которая ведёт непосредственно на страницу материалов указанного в доп. поле Автора. Реализовал это я через поиск, а точнее в странице результатов поиска вот такой запрос:

    <?php
    $s = $_GET['s'];
    query_posts("meta_key=Автор&meta_value=$s");
    ?>

    Естественно, если это просто добавить на страницу с результатом, то поиск будет происходить лишь по произвольному полю, но мне так же нужно, что бы был и обычный поиск в содержание записи. Я решил указать следующие условия:

    1. Если пользователь через поиск ищет какое-то слово в тексте записи и что-то находит, то ему выдаются варианты:

    <?php if (have_posts()) { while (have_posts()) : the_post(); ?>

    2. Если пользователь ничего не находит, то тогда срабатывает поиск в произвольном поле Автор:

    <?php endwhile; } else { ?>
    
    <?php
    $s = $_GET['s'];
    query_posts("meta_key=Автор&meta_value=$s");
    ?>
    
    <?php if (have_posts()) { while (have_posts()) : the_post(); ?>

    3. Если и там ничего нет, то выдаётся сообщение о том, что ничего не найдено и соответственно завершается весь этот цикл:

    <?php endwhile; } else { ?>
    
    Ой, ничего нет!
    
     <?php } ?>
    
    <?php } ?>

    В принципе, всё работает, но как Вы и поняли, если в какой-то записи (тексте) встретится Фамилия или Имя такое же, как и у Автора, то в начале он будет искать именно в тексте, что при переходе по ссылку «Показать все записи автора», имеющая вид запроса поиска: site.ru/articles/?s=Николаев+Кирилл, получается не то, что надо. Нужны записи по произвольному полю Автор, а система ищет по умолчанию в контенте. Можно конечно поменять кое-что в цикле выше, и в начале указать поиск по произвольному полю Автор и если ничего не найдено, то уже тогда система ищет в содержание записи:

    <?php
    $s = $_GET['s'];
    query_posts("meta_key=Автор&meta_value=$s");
    ?>
    
    <?php if (have_posts()) { while (have_posts()) : the_post(); ?>
    
    <?php endwhile; } else { ?>
    
    //Если ничего не найдено в произвольном поле, тогда поиск происходит в во всей категории <strong>articles</strong>:
    
    <?php
    $s = $_GET['s'];
    $args = array(
            'category_name' => 'articles',
            's'         => $s
    );
    query_posts($args);
    ?>
    
    //Если и во всех записях категории ничего не найдено, то тогда выдаётся сообщение:
    
     <?php endwhile; } else { ?>
    
    Ой, ничего нет!
    
     <?php } ?>
    
    <?php } ?>

    Этот пример более удачный, но если вдруг (хотя маловероятно), ФИО автора опять же совпадёт с содержанием в тексте, то в выдаче будут только записи с результатом по произвольному типу Автор, а псодержание записей учитываться не будет.

    Вопрос вот в чём, выскажите свое мнение, как пример или если возможно, предложите что-нибудь получше.

  • Тема «Поиск по произвольным полям.» закрыта для новых ответов.