Поиск сообщений по ID в админке

10

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

Перейра
источник
Можете ли вы объяснить, что вы подразумеваете под поиском по идентификатору, у каждого поста есть уникальный идентификатор, как этот поиск может дать не более одного результата?
t31os
@ t31os Единственный результат - это то, что я хочу :). Я имею в виду возможность поиска сообщений по идентификатору в админке. Если вы зайдете на domain.com/wp-admin/edit.php, у вас есть поле поиска вверху, и вы можете легко найти пост, выполнив поиск по заголовкам постов. Я должен быть в состоянии сделать то же самое, но с использованием идентификаторов. Скажем, введите «1343», нажмите «поиск», получите пост № 1343.
перейра
как это работает для поиска по интерфейсу?
Криспо

Ответы:

13

Не уверен, что понимаю, почему вы хотите сделать запрос по идентификатору, но это говорит о том, что это возможно хакерским способом (мне нравится этот метод, потому что он прост).

add_action( 'parse_request', 'idsearch' );
function idsearch( $wp ) {
    global $pagenow;

    // If it's not the post listing return
    if( 'edit.php' != $pagenow )
        return;

    // If it's not a search return
    if( !isset( $wp->query_vars['s'] ) )
        return;

    // If it's a search but there's no prefix, return
    if( '#' != substr( $wp->query_vars['s'], 0, 1 ) )
        return;

    // Validate the numeric value
    $id = absint( substr( $wp->query_vars['s'], 1 ) );
    if( !$id )
        return; // Return if no ID, absint returns 0 for invalid values

    // If we reach here, all criteria is fulfilled, unset search and select by ID instead
    unset( $wp->query_vars['s'] );
    $wp->query_vars['p'] = $id;
}

Все, что вы затем делаете, - это поиск с использованием обычного поля поиска с #префиксом (хэш) перед числовым идентификатором.

#123

... вернем сообщение с идентификатором 123.

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

Надеюсь, это поможет. :)

t31os
источник
@ t310s это работает, большое спасибо! Единственная (хотя и чисто косметическая) проблема, которую я получаю, заключается в том, что в верхней части результатов поиска, которые я получаю: Результаты поиска для «» - тогда как результаты поиска для «# 123» будут идеальными. В противном случае это именно то, что мне нужно, еще раз спасибо.
перейра
Это неприятный побочный эффект от отмены условий поиска непосредственно перед запросом, но теперь у меня был другой взгляд на edit.php, я могу видеть простое исправление ... :) Обновите unset()вызов до следующего ... unset( $wp->query_vars['s'], $_GET['s'] );и поиска Термин текст исчезнет при выполнении поиска по идентификатору .. PS с радостью помогу .. :)
t31os
Очень поздно в тот день, но я наткнулся на этот пост, и можно повторно заполнить результаты поиска для ..., подключившись к get_search_queryфильтру. add_filter( 'get_search_query', function() { return $_GET['s']; } );
Майк