it-swarm.com.de

ACF-Beziehungsfeld-Suchfilter

Ich versuche, über das ACF-Beziehungsfeld Beziehungsbeiträge zuzuweisen. Es gibt eine Tippfehlersuche, um nach Beitragstiteln zu suchen.

Ich möchte die Suche nach meta_data zur Suche nach ACF-Beziehungen hinzufügen.

enter image description here

Diese Frage hat meine Abfrage richtig funktioniert, aber das Suchfeld sagt immer noch, dass es keine Ergebnisse gibt.

enter image description here

Ich denke, dass der Typeahead Ergebnisse entfernt, da der Typeahead nur mit dem Titel übereinstimmt.

Haben Sie eine Idee, wie Sie diese bearbeiten können, damit Metadaten in den Suchergebnissen angezeigt werden?

2
Bryan

Lesen Sie zuerst diesen Beitrag, um meine Antwort zu verstehen. Suche, die in benutzerdefinierten Feldern, Titel und Inhalt des Beitrags angezeigt wird.

Möglicherweise möchten Sie acf/fields/relationship/query/verwenden, wenn Sie die folgenden Argumente hinzufügen:

$args['meta_query'] = array(array(
     'key' => 'your_meta',
     'value' => $args['s'],
     'compare' => 'LIKE',
));

sie werden feststellen, dass Wordpress mit dieser Abfrage die Posts durchsucht, die Ihre Suchzeichenfolge im Titel UND im Metafeld enthalten.

Sie müssen also einige Filter hinzufügen, damit dies funktioniert:

function search_custom_meta_acf_add_join($joins) {
    global $wpdb;
    remove_filter('posts_join','search_custom_meta_acf_add_join');
    return $joins . " INNER JOIN {$wpdb->postmeta} as CMS15 ON ({$wpdb->posts}.ID = CMS15.post_id)";
}

function search_custom_meta_acf_alter_search($search,$qry) {
    global $wpdb;
    remove_filter('posts_search','search_custom_meta_acf_alter_search',1,2);
    $add = $wpdb->prepare("(CMS15.meta_key = 'your_field_name' AND CAST(CMS15.meta_value AS CHAR) LIKE '%%%s%%')",$qry->get('s'));
    $pat = '|\(\((.+)\)\)|';
    $search = preg_replace($pat,'(($1 OR '.$add.'))',$search);
    return $search;
}
function modify_acf_relationship_search_query ($args, $field, $post ) {
    add_filter('posts_join','search_custom_meta_acf_add_join');
    add_filter('posts_search','search_custom_meta_acf_alter_search',1,2);
    return $args;
}
add_filter('acf/fields/relationship/query/name=your_field_name', 'modify_acf_relationship_search_query', 10, 3);

Dieser Code dient im Grunde dazu, die Abfrage zu ändern, mit der die Posts durchsucht werden, da ACF die in WordPress integrierte Suchfunktion für die Suche im Beziehungsfeld verwendet. Sie müssen sich nicht um die Filter kümmern, die die Suchabfrage ändern, da sie sich bei Verwendung selbst entfernen.

Laut der Antwort, die ich oben zitiert habe , verwendet er keinen benutzerdefinierten Tabellennamen in der inneren Verknüpfung, aber ich habe dies getan, damit es keine Probleme gibt, wenn Sie immer noch die $ args ['meta_query'] verwenden möchten. Parameter für eine verfeinerte Filterung.

1
javiertoledos