Suche im WordPress Backend auf Titel beschränken

Wenn im WordPress-Backend die Suche genutzt wird, um beispielsweise auf der Beitrags-Übersichtsseite nach einem bestimmten Beitrag zu suchen, dann wird sowohl der Titel als auch der Inhalt des Beitrags durchsucht (gilt ebenso für Seiten). Um dieses Verhalten zu ändern kann folgenden Code genutzt werden. Dieser Code bewirkt, dass bei einer Suche im Backend auch wirklich nur der jeweilige Titel durchsucht wird.

if (is_admin()) {
    add_filter('posts_search', 'sw_backend_search_by_title_only', 500, 2);
}

/**
 * @param $search
 * @param $wp_query
 *
 * @return string
 */
function sw_backend_search_by_title_only($search, $wp_query)
{
    global $wpdb;
    if (empty($search)) {
        return $search;
    } // skip processing - there is no search term in query
    
    $q = $wp_query->query_vars;
    
    $n = !empty($q['exact']) ? '' : '%';
    
    $search = '';
    $searchand = '';
    
    foreach ((array) $q['search_terms'] as $term) {
        $term = esc_sql($wpdb->esc_like($term));
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }
    
    if (!empty($search)) {
        $search = " AND ({$search}) ";
        if (!is_user_logged_in()) {
            $search .= " AND ($wpdb->posts.post_password = '') ";
        }
    }
    
    return $search;
}

Dieses Feature ist auch sehr hilfreich, um bei umfangreichen WordPress-Installationen Seiten dem Menü hinzuzufügen. Oftmals sind hier die Suchergebnisse sehr groß, da auch hier Titel und Inhalt durchsucht werden. Die Anzahl der Suchergebnisse wird durch den oben beschriebenen Code eingeschränkt, indem nur die Titel durchsucht werden und der Inhalt ignoriert wird.

Kommentar verfassen

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

Scroll to Top