Расширение поискового контекста в администраторе перечисляет экран сообщения

Я создал пользовательский тип сообщения и присоединил некоторые пользовательские поля к нему. Теперь я хотел бы к поиску, который авторы могут выполнить на пользовательском экране списка сообщения (в администраторском бэкенде), чтобы также быть выполненными на meta полях и не только посмотреть в заголовке и содержании, как обычно.

Где я могу сцепиться в и что кодирует, я должен использовать?

Изображение в качестве примера enter image description here

Stefano

34
12.09.2017, 10:37
4 ответа

Я решил фильтрацию запроса путем добавления соединения на посттаблице метаданных и изменения где пункт. подсказки относительно фильтрации оператора Where (часто требуют регулярного выражения search&replace) находятся здесь на кодексе:

add_filter( 'posts_join', 'segnalazioni_search_join' );
function segnalazioni_search_join ( $join ) {
    global $pagenow, $wpdb;

    // I want the filter only when performing a search on edit page of Custom Post Type named "segnalazioni".
    if ( is_admin() && 'edit.php' === $pagenow && 'segnalazioni' === $_GET['post_type'] && ! empty( $_GET['s'] ) ) {    
        $join .= 'LEFT JOIN ' . $wpdb->postmeta . ' ON ' . $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
    return $join;
}

add_filter( 'posts_where', 'segnalazioni_search_where' );
function segnalazioni_search_where( $where ) {
    global $pagenow, $wpdb;

    // I want the filter only when performing a search on edit page of Custom Post Type named "segnalazioni".
    if ( is_admin() && 'edit.php' === $pagenow && 'segnalazioni' === $_GET['post_type'] && ! empty( $_GET['s'] ) ) {
        $where = preg_replace(
            "/\(\s*" . $wpdb->posts . ".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
            "(" . $wpdb->posts . ".post_title LIKE $1) OR (" . $wpdb->postmeta . ".meta_value LIKE $1)", $where );
    }
    return $where;
}
37
19.02.2020, 21:55
  • 1
    Ничего себе! Что я искал. Однако я думаю я май найденных ошибка при поиске на заголовке сообщения, я получаю соответствие, которое затем дублировано в результатах 5 раз!?! imgur.com/eE52gIA –  jnthnclrk 22.08.2013, 17:58
  • 2
    Вот другой захват с распечатанным SQL: tinypic.com/view.php?pic=124tqb6&s=5 не Может выяснить, почему я получаю 5 объектов!?! –  jnthnclrk 22.08.2013, 23:19
  • 3
    Отправленный отдельный вопрос на исправлении ошибки простофили: wordpress.stackexchange.com/questions/111185 / … –  jnthnclrk 24.08.2013, 14:47
  • 4
    Это и сообщение ниже были полезны для меня. Теперь найти способ включать поиск автора сообщения и выставочных сообщений, сделанных ими. –  Shawn Rebelo 31.07.2018, 21:27
  • 5
    @Stefano, результат поиска работает. Имейте проблему, поле "Post title" по умолчанию, поисковая запись повторяет многих администраторская сторона и время. See:imgur.com/a/W4wmXhO –  Super Model 23.10.2018, 12:16

Это не поиск, но некоторый "выбор" отличным значением.

В файле functions-iworks-posts-filter.zip у Вас есть пример, как добавить фильтр для обычного сообщения некоторым meta_key. Я думаю, что легко преобразовать.

0
19.02.2020, 21:55
  • 1
    благодарит за справку... Я собираюсь посмотреть на Ваше вложение прямо сейчас. Я сообщу результаты своего расследования ;-) Stefano –  Stefano 14.03.2011, 10:09
  • 2
    Marcin я думаю, что Вы обращаетесь к фильтрам как "по дате" и т.д...., но я должен сцепиться в "свободном поисковом" поле выше. Так или иначе я просто отправил свое решение, возможно, оно помогает Спасибо так или иначе! –  Stefano 18.03.2011, 11:03

Ответ Stefano является большим, но он испытывает недостаток в отличном пункте:

function segnalazioni_search_distinct( $where ){
    global $pagenow, $wpdb;

    if ( is_admin() && $pagenow=='edit.php' && $_GET['post_type']=='segnalazioni' && $_GET['s'] != '') {
    return "DISTINCT";

    }
    return $where;
}
add_filter( 'posts_distinct', 'segnalazioni_search_distinct' );

Добавьте, что код выше обновляет его, и это будет работать без дубликатов.

10
19.02.2020, 21:55

Это будет работать,

function custom_search_query( $query ) {
    $custom_fields = array(
        // put all the meta fields you want to search for here
        "rg_first_name",
        "rg_1job_designation"
    );
    $searchterm = $query->query_vars['s'];

    // we have to remove the "s" parameter from the query, because it will prevent the posts from being found
    $query->query_vars['s'] = "";

    if ($searchterm != "") {
        $meta_query = array('relation' => 'OR');
        foreach($custom_fields as $cf) {
            array_push($meta_query, array(
                'key' => $cf,
                'value' => $searchterm,
                'compare' => 'LIKE'
            ));
        }
        $query->set("meta_query", $meta_query);
    };
}
add_filter( "pre_get_posts", "custom_search_query");
7
19.02.2020, 21:55
  • 1
    правильно форматируют Ваш код и включают объяснение относительно того, почему и как это будет работать. –  tfrommen 31.01.2014, 13:28
  • 2
    Хотя я сначала upvoted это, я понял, что это будет, к сожалению, работать над каждым поиском это то же, это могло бы повредить поиск фронтэнда. –  Maciej Paprocki 13.06.2018, 16:01
  • 3
    Добавление проверки на if ( $query->query['post_type'] != 'your_custom_post_type' ){ return; } возглавьте вершину функции, будет мешать этому работать на других поисках. Обратите внимание, что техника в этом ответе больше не ищет post_title и включение, которое назад не тривиально. –  jwinn 30.11.2018, 20:21
  • 4
    Одна дальнейшая проблема - Результаты поиска индикатора для “<ключевого слова>” вызовы get_search_query() какие дальнейшие вызовы get_query_var( 's' ). Так как "s" установлен на пустую строку, Результаты поиска для “” будут всегда иметь пустое значение между кавычками. Существует ли тонкая настройка к этому решению, которое обходит это? –  jschrab 29.01.2019, 23:01

Теги

Похожие вопросы