X

Cum să filtrezi postările și paginile tale după câmpuri personalizate în tabloul de bord WordPress

Fragmente de IsItWP

Doriți să filtrați postările după câmpuri personalizate în administrarea WordPress? Acest fragment va adăuga un nou meniu derulant pentru câmpuri personalizate în listele de postări și pagini WordPress. Meniul va afișa o listă a tuturor câmpurilor personalizate. Pentru a filtra postările și paginile, trebuie doar să selectați câmpul după care doriți să filtrați.

adăugați meniu de selecție pentru a filtra după câmpul personalizat admin

Instrucțiuni:

Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului:

add_filter( 'parse_query', 'ba_admin_posts_filter' );
add_action( 'restrict_manage_posts', 'ba_admin_posts_filter_restrict_manage_posts' );

function ba_admin_posts_filter( $query )
{
    global $pagenow;
    if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && $_GET['ADMIN_FILTER_FIELD_NAME'] != '') {
        $query->query_vars['meta_key'] = $_GET['ADMIN_FILTER_FIELD_NAME'];
    if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '')
        $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
    }
}

function ba_admin_posts_filter_restrict_manage_posts()
{
    global $wpdb;
    $sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1';
    $fields = $wpdb->get_results($sql, ARRAY_N);
?>
<select name="ADMIN_FILTER_FIELD_NAME">
<option value=""><?php _e('Filter By Custom Fields', 'baapf'); ?></option>
<?php
    $current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:'';
    $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
    foreach ($fields as $field) {
        if (substr($field[0],0,1) != "_"){
        printf
            (
                '<option value="%s"%s>%s</option>',
                $field[0],
                $field[0] == $current? ' selected="selected"':'',
                $field[0]
            );
        }
    }
?>
</select> <?php _e('Value:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" />
<?php
}

Notă: Dacă este prima dată când adăugați secvențe de cod în WordPress, consultați ghidul nostru despre cum să copiați / lipiți corect secvențe de cod în WordPress, pentru a nu vă defecta accidental site-ul.

Dacă v-a plăcut acest fragment de cod, vă rugăm să luați în considerare vizualizarea altor articole de pe site, cum ar fi: cele mai bune 62 de teme gratuite pentru bloguri WordPress sau cele mai bune 7 pluginuri pentru formulare de contact WordPress.

Comentarii   Lasă un răspuns

  1. Bună, este posibil să vizualizați acest lucru doar pe un anumit tip de postare? Mulțumesc

  2. Bună, mulțumesc pentru cod, dar din păcate nu funcționează pentru mine. Meniul derulant de selecție apare deasupra listei de postări și are câmpurile personalizate corecte, dar dacă scriu o valoare – nu va afișa niciun rezultat, chiar dacă există un număr de postări care au această valoare în acest câmp personalizat.

  3. bună, vreau să folosesc asta pentru postări personalizate de utilizatori, cum se va schimba codul, mă poate ajuta cineva!!

  4. Încă funcționează perfect. Mulțumesc, fragment grozav!

  5. Excelent. Postarea este oarecum veche, totuși tocmai am copiat și lipit codul în fișierul meu functions și funcționează perfect. (OK, nu „perfect” din punct de vedere al afișării, dar ajustarea este problema mea! Funcțional pare să fie la punct.) [WP 4.2.2] Doresc această funcționalitate de mult timp… și găsirea ei a fost atât de ușoară odată ce am decis să fac ceva în legătură cu asta. Mulțumesc FOARTE mult! :)

  6. Salvatore Capolupo January 3, 2015 at 4:13 pm

    căutam ceva de genul acesta. nu atât de ușor, și util. mulțumesc :)

  7. Bună tuturor, mă poate ajuta cineva să creez o funcție personalizată pentru a sorta ordinea postărilor fără un plugin? Aș dori să includ posibilitatea de a sorta ordinea postărilor ca la pagini…

    Am un cod precum add_filter( ‘parse_query’, ‘my_custom_post_sort’ );

    dar nu știu cum să continui…

  8. Salutare,

    Tocmai am dat peste fragmentul dvs. de filtrare a câmpurilor personalizate.

    Este posibil să filtrați și etichetele? Aveți idee ce trebuie să schimb?

    Noroc

  9. Bună, pare într-adevăr foarte interesant…

    Dar din păcate nu este exact ceea ce caut de mult timp.

    Chiar urăsc căutarea în Biblioteca Media. Care este scopul unei căutări care nu poate găsi niciun atașament după (sub)șir în NUMELE FIȘIERELOR, nici după ID, șirurile din ALT sau CAPTION, CÂMPURI PERSONALIZATE, ETICHETE etc.. Această capacitate standard de CĂUTARE o are fiecare CMS, dar nu WP. Foarte ciudat. Aveți vreo idee cum să adăugați ceva de genul acesta la Biblioteca Media „upload.php” și „media-upload.php” (fereastră pop-up pentru inserarea atașamentelor în Pagină/Postare)?

    Mi-e teamă că nu pot să fac singur, este peste cunoștințele mele de PHP. Dar pare că aveți codul gata de lansare! În orice caz, acest exemplu este o inspirație pentru mine.
    :-))

    1. Dacă nu adăugați nicio informație sau cuvinte cheie în înregistrările media, cum ar trebui să le găsiți?
      Sigur, căutarea WP este foarte limitată, dar pentru media funcționează bine dacă adăugați etichete ALT bune la fiecare imagine 😉

      1. DE CE să îl adăugați la metadate? În general, NUME FIȘIER, ID, Autor, etc. – toate informațiile sunt prezente în baza de date. SQL inteligent poate returna datele. Fără a menționa coloanele problematice de sortare ASC/DESC – mă refer la noile coloane adăugate prin function.php (FileSize, ID, etc.) Cred că problema este evidentă.

  10. Postare grozavă, mulțumesc!

  11. Acest lucru este uimitor.
    Există o modalitate de a afișa filtrul doar pe pagina de editare a unui tip de postare personalizat?

    Am încercat să pun un 
    if (isset($_GET[‘post_type’]) && $_GET[‘post_type’] == ‘product’)
    în filtru, dar nu pare să funcționeze.

  12. Postare excelentă, mulțumesc Kevin. Implementez acum pe site-urile mele!

    1. Cool, mă bucur să aud asta.

  13. salut kevin! fragment frumos!
    dar am o problemă cu el… nu pot filtra lista de postări din admin după mai mulți filtre.
    dacă filtrez după câmpul meu personalizat și categoria, atunci… nu îmi aduce niciun rezultat (deși există).

    ce se poate întâmpla?

    1. Sunt sigur că mai multe valori ar fi posibile, doar că nu este ceva ce am analizat, voi aprofunda puțin și voi vedea dacă pot face ceva de genul acesta într-un fragment viitor.

  14. Tocmai am implementat codul dvs. și funcționează excelent pentru scopul declarat. Cu codul dvs. pot vedea rapid ce postări au o intrare pentru un anumit câmp personalizat, totuși, sper că există o modalitate de a arăta ce postări nu au o intrare pentru același câmp personalizat, astfel încât să îmi fie mai ușor să revin și să adaug intrarea lipsă, în loc să trebuiască să deschid fiecare postare individual pentru a vedea dacă are date în acel câmp personalizat specific.  Orice idee este foarte apreciată.  Mulțumesc!

    1. Ei bine, cel mai bun mod ar fi să adăugați valoarea câmpului personalizat la lista de postări din admin, ați putea modifica acest fragment pentru a face ceva de genul acesta.

      http://wpsnipp.com/index.php/functions-php/add-featured-thumbnail-to-admin-post-columns/

      1. Am ajuns să găsesc un plugin numit „Mass Custom Fields Manager” care mi-a permis să identific toate postările mele care nu aveau câmpul personalizat dorit și să adaug automat câmpul cu o valoare la alegerea mea.  Am reușit apoi să folosesc funcționalitatea dvs. pentru a filtra acum acea nouă valoare.  Funcționează fantastic.  Acest lucru m-a salvat de la a trebui să sortez manual aproape 2.000 de postări.  Mulțumesc!!

        1. Cool, mă bucur să aud că ați reușit să puneți lucrurile în funcțiune, 2000 de postări ar fi cu siguranță mult de actualizat manual. Nicio problemă, mă bucur că am putut ajuta!

  15. Fragment frumos, mulțumesc.
    Îl voi modifica pentru a funcționa pentru secțiunea de pagini.

    1. Mă bucur să aud că vă place fragmentul, dacă faceți modificări, trimiterea modificărilor înapoi la wpsnipp.com prin formularul nostru de contribuție http://wpsnipp.com/index.php/contribute/ ar fi grozavă pentru vizitatorii noștri. Bucurați-vă de fragment!

    2. Salut Finalwebsites, ați modificat codul? Mă puteți ajuta?

      1. Salut,
        da, am reușit să îl fac să funcționeze, încercați funcția de pe această pagină:
        http://www.finalwebsites.com/blog/wordpress/add-a-parent-pages-filter-function-your-wordpress-admin-section/

        1. Mulțumesc pentru postarea actualizării fragmentului,

        2. Mulțumesc! Dar linkul îmi dă timeout!

  16. Kevin,

    mulțumesc pentru fragment. Funcționează perfect. Sunt curios, 'ba' din ba_admin_posts_filter() înseamnă blog admin?

    1. Numele funcției ba_admin_posts_filter este doar o funcție personalizată, ar putea fi orice, de fapt. Totuși, în acest caz, autorul fragmentului a inclus o parte din numele domeniului său, en.bainternet.info, ca ba_

      1. Kevin, iată un fragment pe care l-am scris, astfel încât filtrul să poată avea wildcard-uri '%' și '_', în cazul în care cineva dorește așa ceva:

        function ba_admin_where_filter($where){    if (strpos($where, ‘meta_value’) !== FALSE) { $where = preg_replace(‘/(.meta_value[^=]*)=(.*)$/U’, “$1 LIKE $2″, $where);  } return $where;}add_filter( ‘posts_where_request’, ‘ba_admin_where_filter’ );FYI, dacă specificați 0 ca filtru, acesta returnează toate postările. Acest lucru este valabil și pentru codul dvs. original. Am crezut că este din cauza$_GET[‘ADMIN_FILTER_FIELD_VALUE’] != ”

        evaluează la fals, așa că am încercat 
        strval($_GET[‘ADMIN_FILTER_FIELD_VALUE’]) != ”

        dar tot a returnat toate postările. Ei bine.

        1. Kevin, există o modalitate de a afișa și câmpurile ascunse (adică cele care încep cu underscore)? Mulțumesc.

  17. Cliff Paulick July 25, 2011 at 5:31 pm

    Există o modalitate de a crea o căutare pe front-end, bazată pe câmpuri personalizate sau taxonomii personalizate?

    1. Ei bine, acest fragment specific este pentru filtrarea din admin, ați putea adăuga posibilitatea ca WordPress să caute și câmpuri personalizate. Totuși, cu toate acestea, aș verifica pluginul search everything.  http://wordpress.org/extend/plugins/search-everything/

      1. Cliff Paulick July 25, 2011 at 6:37 pm

        Da, l-am văzut pe acesta și pe altele. Mă întrebam doar dacă aveți ceva diferit/mai bun – mai ales căutând o modalitate de a sincroniza opțiunile de căutare.
        De exemplu: Dacă orașul = Tulsa, atunci restrângeți statul la o singură opțiune = Oklahoma. Sau dacă alegeți mai întâi Oklahoma, atunci schimbați lista derulantă a orașelor pentru a afișa doar orașele din Oklahoma… Apoi apăsați „Căutare”.

        Mulțumesc din nou.

        1. Nimic din ceea ce am postat până acum, totuși puteți adăuga selecția de categorii la căutare. Folosesc acea opțiune în caseta de căutare de pe wpsnipp.com, ați putea configura orașele ca și categorii.

          http://wpsnipp.com/index.php/cat/search-category-with-dropdown/

Adaugă un comentariu

Suntem bucuroși că ați ales să lăsați un comentariu. Vă rugăm să rețineți că toate comentariile sunt moderate conform politicii noastre de confidențialitate, iar toate linkurile sunt nofollow. NU folosiți cuvinte cheie în câmpul nume. Să avem o conversație personală și semnificativă.

Lista de verificare pentru lansarea WordPress

Lista de verificare finală pentru lansarea WordPress

Am compilat toate elementele esențiale de verificare pentru lansarea următorului dvs. site WordPress într-o singură carte electronică la îndemână.
Da, trimite-mi eBook-ul gratuit!