Vuoi filtrare i tuoi post per campo personalizzato nell'amministrazione di WordPress? Questo snippet aggiungerà un nuovo menu a discesa per campi personalizzati ai tuoi elenchi di post e pagine di WordPress. Il menu visualizzerà un elenco di tutti i campi personalizzati. Per filtrare i post e le pagine, devi solo selezionare il campo per cui desideri filtrare.
![]()
Istruzioni:
Tutto quello che devi fare è aggiungere questo codice al file functions.php del tuo tema o in un plugin specifico per il sito:
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
}
Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come copiare / incollare correttamente snippet di codice in WordPress, in modo da non rompere accidentalmente il tuo sito.
Se ti è piaciuto questo snippet di codice, prendi in considerazione la possibilità di consultare i nostri altri articoli sul sito come: 62 migliori temi gratuiti per blog WordPress o 7 migliori plugin per moduli di contatto WordPress.
Ciao, è possibile visualizzare questo solo su un certo tipo di post? Grazie
Ciao, grazie per il codice, ma purtroppo non funziona per me. Il menu a discesa di selezione appare sopra l'elenco dei post e ha i campi personalizzati giusti, ma se scrivo un valore, non visualizza alcun risultato anche se c'è un numero di post che hanno questo valore in questo campo personalizzato.
ciao, voglio usarlo per i post personalizzati degli utenti, come cambierà il codice, qualcuno può aiutarmi!!
Funziona ancora senza problemi. Grazie, ottimo snippet!
Eccellente. Il post è un po' datato, eppure ho appena copiato e incollato il codice nel mio file functions e funziona perfettamente. (OK, non "perfettamente" a livello di visualizzazione, ma il ritocco è un mio problema! Funzionalmente sembra a punto.) [WP 4.2.2] Desideravo questa funzionalità da secoli... e trovarla è stato così facile una volta che ho deciso di fare qualcosa al riguardo. Grazie MILLE! :)
stavo cercando qualcosa del genere. non così facile, e utile. grazie :)
Ciao a tutti, qualcuno può aiutarmi a creare una funzione personalizzata per ordinare i post senza plugin? Vorrei includere la possibilità di ordinare i post come le pagine...
Ho del codice come add_filter( ‘parse_query’, ‘my_custom_post_sort’ );
ma non so come andare avanti...
Ciao,
Mi sono appena imbattuto nel tuo snippet per il filtro dei campi personalizzati.
È possibile filtrare anche i tag? Qualche idea su cosa devo cambiare?
Saluti
Ciao, sembra davvero molto interessante…
Ma purtroppo non è esattamente quello che sto cercando da tempo.
Odio davvero la ricerca nella Libreria Media. Qual è lo scopo di una ricerca che non è in grado di trovare alcuni allegati né per (sotto)stringa nei NOMI FILE, né per ID, le stringhe in ALT o CAPTION, CAMPI PERSONALIZZATI, TAG ecc..? Queste capacità di RICERCA standard le ha ogni CMS tranne WP. Molto strano. Hai qualche idea su come aggiungere qualcosa del genere a "upload.php" e "media-upload.php" della Libreria Media (finestra popup per l'inserimento di allegati in Pagina/Post)?
Temo di non essere in grado di farlo da solo, è al di sopra delle mie conoscenze di PHP. Ma sembra che tu abbia il codice pronto per il lancio! In ogni caso, questo esempio è un'ispirazione per me.
:-))
Se non aggiungi alcuna informazione o parola chiave ai tuoi record multimediali, come dovresti trovarli?
Certo, la ricerca di WP è molto limitata, ma per i media funziona bene se aggiungi buoni tag ALT a ogni immagine 😉
PERCHÉ aggiungerlo ai metadati? Generalmente, NOME FILE, ID, Autore, ecc. – tutte le informazioni sono presenti nel database. Un SQL intelligente può restituire i dati. Senza menzionare le colonne problematiche di ordinamento ASC/DESC – intendo le nuove colonne aggiunte tramite function.php (Dimensione File, ID, ecc.) Penso che il problema sia evidente.
Ottimo post, grazie!
Questo è incredibile.
C'è un modo per mostrare il filtro solo in una pagina di modifica di un tipo di post personalizzato?
Ho provato a inserire
if (isset($_GET[‘post_type’]) && $_GET[‘post_type’] == ‘product’)
nel filtro ma non sembra funzionare.
Ottimo post, grazie Kevin. Lo sto implementando ora sui miei siti!
Fantastico, sono contento di sentirlo.
ciao Kevin! bel frammento!
ma ho un problema con esso… non mi è possibile filtrare l'elenco degli amministratori dei post per filtri multipli.
se filtro per il mio campo personalizzato e per categoria, allora… non mi porta alcun risultato (in realtà ci sono).
cosa può succedere?
Sono sicuro che valori multipli sarebbero possibili, solo che non è qualcosa che ho approfondito, darò un'occhiata più da vicino e vedrò di fare qualcosa del genere in un futuro frammento.
Ho appena implementato il tuo codice e funziona benissimo per lo scopo dichiarato. Con il tuo codice sono in grado di vedere rapidamente quali post hanno una voce per un particolare campo personalizzato, tuttavia, spero ci sia un modo per mostrare quali post non hanno una voce per lo stesso campo personalizzato, in modo che sia più facile per me tornare indietro e aggiungere la voce mancante invece di dover aprire ogni post individualmente per vedere se ha dati in quel particolare campo personalizzato. Qualsiasi pensiero è molto apprezzato. Grazie!
Beh, il modo migliore sarebbe aggiungere il valore del campo personalizzato all'elenco dei post dell'amministratore, potresti modificare questo snippet per fare qualcosa del genere.
http://wpsnipp.com/index.php/functions-php/add-featured-thumbnail-to-admin-post-columns/
Alla fine ho trovato un plugin chiamato "Mass Custom Fields Manager" che mi ha permesso di identificare tutti i miei post che non avevano il campo personalizzato che volevo e di aggiungere automaticamente il campo con un valore a mia scelta. Sono stato quindi in grado di utilizzare con successo la tua funzionalità per filtrare questo nuovo valore. Funziona in modo fantastico. Mi ha evitato di dover ordinare manualmente quasi 2.000 post. Grazie!!
Fantastico, sono contento di sapere che hai fatto funzionare le cose, 2000 post sarebbero certamente molti da aggiornare a mano. Nessun problema, sono contento di aver potuto aiutare!
Bel frammento, grazie.
Lo modificherò per farlo funzionare per la sezione delle pagine.
Sono contento che ti piaccia lo snippet, se apporti delle modifiche, inviare le modifiche a wpsnipp.com tramite il nostro modulo di contributo http://wpsnipp.com/index.php/contribute/ sarebbe fantastico per i nostri visitatori. Goditi lo snippet!
Ciao Finalwebsites, hai cambiato il codice? Puoi aiutarmi?
Ciao,
sì, l'ho fatto funzionare, prova la funzione in questa pagina:
http://www.finalwebsites.com/blog/wordpress/add-a-parent-pages-filter-function-your-wordpress-admin-section/
Grazie per aver pubblicato l'aggiornamento dello snippet,
Grazie! Ma il link mi dà timeout!
Kevin,
grazie per lo snippet. Funziona perfettamente. Sono curioso, 'ba' in ba_admin_posts_filter() sta per blog admin?
Il nome della funzione ba_admin_posts_filter() è solo una funzione personalizzata, potrebbe essere qualsiasi cosa. Tuttavia, in questo caso, l'autore dello snippet ha incluso parte del nome del suo dominio, en.bainternet.info, come ba_
Kevin, ecco uno snippet che ho scritto in modo che il filtro possa avere i caratteri jolly '%' e '_', nel caso qualcuno volesse una cosa del genere:
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’ );A proposito, se specifichi 0 come filtro, restituisce tutti i post. Questo vale anche per il tuo codice originale. Pensavo fosse perché$_GET[‘ADMIN_FILTER_FIELD_VALUE’] != ”
valuta a falso, quindi ho provato
strval($_GET[‘ADMIN_FILTER_FIELD_VALUE’]) != ”
ma ha comunque restituito tutti i post. Pazienza.
Kevin, c'è un modo per mostrare anche i campi nascosti (cioè quelli che iniziano con l'underscore)? Grazie.
C'è un modo per creare una ricerca front-end, basata su campi personalizzati o tassonomie personalizzate?
Beh, questo specifico snippet è per il filtraggio dell'admin, potresti aggiungere la possibilità che WordPress cerchi anche i campi personalizzati. Tuttavia, detto tutto questo, ti consiglio di dare un'occhiata al plugin Search Everything. http://wordpress.org/extend/plugins/search-everything/
Sì, l'ho visto e altri. Mi stavo solo chiedendo se avessi qualcosa di diverso/migliore – specialmente cercando un modo per sincronizzare le opzioni di ricerca.
Ad esempio: Se città = Tulsa, allora limita lo stato ad avere solo 1 opzione = Oklahoma. Oppure se scegli prima Oklahoma, allora cambia il menu a discesa delle città per visualizzare solo le città in Oklahoma… Poi premi "Cerca".
Grazie ancora.
Niente di quello che ho pubblicato finora, tuttavia puoi aggiungere la selezione della categoria alla ricerca. Uso quell'opzione nella casella di ricerca su wpsnipp.com, potresti impostare le città come categorie.
http://wpsnipp.com/index.php/cat/search-category-with-dropdown/