Szukaj postów według ID w admin

10

Szukam sposobu przeszukiwania postów według identyfikatora, najlepiej z obsługą niestandardowych typów postów. Miałem nadzieję, że będzie wtyczka umożliwiająca tę funkcjonalność, ale niczego nie znalazłem. Wszelkie pomysły będą mile widziane, dziękuję.

pereyra
źródło
Czy możesz wyjaśnić, co rozumiesz przez wyszukiwanie według ID, każdy post ma unikalny identyfikator, jak to wyszukiwanie może przynieść więcej niż jeden wynik?
t31os
@ t31os Chcę tylko jednego wyniku :). Mam na myśli to, że mogę wyszukiwać posty według identyfikatora w zapleczu administratora. Jeśli wejdziesz na domain.com/wp-admin/edit.php , masz pole wyszukiwania u góry i możesz łatwo zlokalizować post, przeszukując jego tytuły. Muszę być w stanie zrobić to samo, ale używając identyfikatorów. Powiedz, wpisz „1343”, naciśnij „szukaj”, uzyskaj wpis # 1343.
pereyra
jak to działa przy wyszukiwaniu interfejsu użytkownika?
chrispo

Odpowiedzi:

13

Nie jestem pewien, czy rozumiem, dlaczego chciałbyś zapytać według ID, ale to powiedziało, że jest to możliwe w hacky sposób (podoba mi się ta metoda, ponieważ jest prosta).

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;
}

Następnie wystarczy wyszukać za pomocą zwykłego pola wyszukiwania, używając #prefiksu (skrótu) przed identyfikatorem numerycznym.

#123

.. zwróci post z identyfikatorem 123.

Jestem pewien, że można to zrobić bardziej skomplikowanymi trasami, ale nie widzę żadnych problemów z tym podejściem, chyba że masz dużo postów z tytułami zaczynającymi się od skrótu (ale zawsze możesz zamienić skrót na inna postać).

Mam nadzieję, że to pomaga. :)

t31os
źródło
@ t310s to działa, dziękuję bardzo! jedynym (choć czysto kosmetycznym) problemem jest to, że na górze wyników wyszukiwania, które otrzymuję: wyniki wyszukiwania dla „” - podczas gdy wyniki wyszukiwania dla „# 123” byłyby idealne. W przeciwnym razie właśnie tego potrzebowałem, dzięki jeszcze raz.
pereyra
Jest to niefortunny efekt uboczny rozbrajania wyszukiwanych haseł tuż przed zapytaniem, ale teraz rzuciłem okiem na edit.php, widzę łatwą poprawkę ... :) Zaktualizuj unset()wywołanie do następujących ... unset( $wp->query_vars['s'], $_GET['s'] );i wyszukiwania termin tekst zniknie podczas wyszukiwania ID. ps chętnie pomoże .. :)
t31os
Bardzo późno w ciągu dnia, ale natknąłem się na ten post i możliwe jest ponowne wypełnienie wyników wyszukiwania dla ... poprzez zaczepienie się w get_search_queryfiltrze. add_filter( 'get_search_query', function() { return $_GET['s']; } );
Mike