Benutzerdefinierte Felder (Englisch: Custom Fields) sind eine praktische Funktion von WordPress, um Beiträgen mit zusätzlichen Informationen zu versehen. Benutzerdefinierten Felder werden standardmässig von der Admin-Suche nicht erkannt. Beiträge können somit nicht nach diesen Feldern durchsucht werden. Mit einem kleinen, zusätzlichen Code in der functions.php kann die Suche auf diese Felder erweitert werden.
Beitragsübersicht mit Benutzerdefinierten Feldern erweitern und diese in die Admin-Suche einbeziehen
Beiträge (oder Custom Post Types) werden in in der Übersicht in einer Listenform dargestellt. Je nach Einstellung werden dort mehr oder weniger Spalten angezeigt (z.B. Titel, Autor, Kategorie). Bei einzelnen Custom Post Types kann es sein, dass nur gerade der Titel angezeigt wird. Wenn jetzt viele ähnliche Beiträge erstellt werden, welche nicht mit dem Titel eindeutig zugeordnet werden können, so kann es mühsam werden, einen bestimmten Artikel im Admin-Bereich wieder zu finden. Eine Möglichkeit, einen Beitrag mit einer zusätzlichen Information zu versehen ist, ein benutzerdefiniertes Feld zu erstellen, welches zusätzliche Infos (wie ein Name oder ähnliches enthält).
Das Benutzerdefinierte Feld (Engl.: Custom field) enthält nun eine zusätzliche Information zum entsprechenden Beitrag. Wenn man dieses Feld in der Beitragsübersicht anzeigen möchte, kann man dazu das Plugin „Admin Columns“ verwenden. Dieses gibt es in einer kostenlosen und in einer Pro-Version (welche noch einige zusätzliche Funktionen beinhaltet). Mit diesem Plugin kann die Beitragsübersicht um zusätzliche Spalten erweitert werden, so z.B. auch um ein Benutzerdefiniertes Feld.
Diese neue Spalte hilft jetzt schon, die Beiträge besser zu finden, allerdings funktioniert die Admin-Suche nicht, wenn nach einem Projektnamen gesucht wird.
Admin-Suche auf Benutzerdefinierte Felder erweitern (ohne Plugin)
Adam Ballée hat für dieses Problem einen praktischen Code erstellt, welche die Admin-Suche um benutzerdefinierte Felder erweitert. Der folgende Code wird dafür einfach in die functions.php Datei eingefügt (am besten verwendet man dafür ein Child-Theme).
<?php /** * WordPress Admin-Suche mit benutzerdefinierten Feldern erweitern * http://adambalee.com */ /** * posts and postmeta Tabellen miteinander kombinieren * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join */ function cf_search_join( $join ) { global $wpdb; if ( is_search() ) { $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id '; } return $join; } add_filter('posts_join', 'cf_search_join' ); /** * Die Suchanfrage mit posts_where anpassen * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where */ function cf_search_where( $where ) { global $pagenow, $wpdb; if ( is_search() ) { $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; } add_filter( 'posts_where', 'cf_search_where' ); /** * Duplikate verhindern * http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_distinct */ function cf_search_distinct( $where ) { global $wpdb; if ( is_search() ) { return "DISTINCT"; } return $where; } add_filter( 'posts_distinct', 'cf_search_distinct' ); ?>
Mit dieser Änderung kann nun in der Admin-Suche nach Begriffen gesucht werden, welche in den benutzerdefinierten Feldern vorkommen.
Quelle: Freie Übersetzung eines Englischen Artikels von adambalee.com.