Frisch notiert!

Die neusten Artikel aus unserem Blog.

ACF Felder (Advanced Custom Fields) in die WordPress-Suche aufnehmen

Zuletzt aktualisiert am 22/09/2016 von Gino Cremer
Wordpress
/ Wordpress / 0

Wer ausgiebiger auf beliebte Plugins wie "Advanced Custom Fields" setzt, wird früher oder später das Problem haben, dass der Kunde eine Suchmaske auf der Website wünscht aber keine oder zu wenige Resultate ausgegeben werden. Was ist da los?

Standardmäßig spuckt die Standard-WordPress-Suche keine Informationen aus, die in „Custom Fields“ bzw. „ACF-Feldern“ eingegeben wurden. Während der TinyMCE Editor des „klassischen Inhalts-Feldes“ sowie der Titel stets berücksichtigt werden, haben ACF-Felder das Nachsehen. Sie werden bei der Suche ausgespart.

Folgendes Snippet (welches wir übrigens ebenfalls über einen Blogartikel gefunden haben) einfach in die Datei functions.php integrieren und schon „spuckt“ die WordPress-Suche nicht nur Inhalte aus, die sich im klassischen TinyMCE-Editor befinden, sondern auch Informationen, die in ACF-Felder platziert wurden. Et voila!

<?php
/**
* Extend WordPress search to include custom fields
*
* http://adambalee.com
*/

/**
* Join posts and postmeta tables
*
* 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' );

/**
* Modify the search query with posts_where
*
* 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' );

/**
* Prevent duplicates
*
* 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' );
?>

Gino Cremer

Ich bin Geschäftsführer der auf Weblösungen spezialisierten Agentur Pixelbar aus dem belgischen Eupen. Ich habe langjährige Erfahrung mit CMS-basierten Kundenprojekten, vornehmlich auf WordPress-Basis und bin ein Webdesigner der ersten Stunde. Daneben arbeite ich auch als Dozent und Berater am WIFI Wien im Bereich Social Media und Webdesign.

Weitere Beiträge von gino anzeigen

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert