it-swarm.com.de

Holen Sie sich Beiträge von Metadaten OR Titel

Ich habe eine working Abfrage, die alle meine Beiträge aufruft, die einen bestimmten Metawert für einen von zwei Metaschlüsseln haben:

$term = filter_var( $_GET['term'] );
$query = get_posts( [
    'post_type' => 'some_cpt_name',
    'meta_query' => [
        'relation'      => 'OR',
        [
            'key'     => 'foo',
            'value'   => $term,
            'compare' => 'LIKE',
        ],
        [
            'key'     => 'bar',
            'value'   => $term,
            'compare' => 'LIKE',
        ],
    ]
] );

Ich muss alle Beiträge abfragen, die den $term als Metaschlüssel "foo" oder "bar" oder als Beitragstitel haben. Problem ist wie man den Beitragstitel als zusätzlichen möglichen Schlüssel hinzufügt?

F: Wie kann ich auch prüfen, ob der $term möglicherweise im post_title enthalten ist?

3
kaiser

Wie bei den meisten Fragen mit OR-Klauseln ist die Antwort dieselbe: Verwenden Sie eine benutzerdefinierte Abfrage oder ändern Sie den WP_Query mithilfe des 'posts_clauses'-Filters.

1
scribu

Ok, hier ist die letzte Ergänzung, die den von @scribu vorgeschlagenen posts_clauses-Filter verwendet (und bearbeitet):

function alter_posts_where_clause( $where )
{
    global $wpdb;

    $term = filter_var( trim( $_GET['term'] ), FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE );
    if ( is_null( $term ) )
        return $where;

    $term = $wpdb->esc_like( $term );

    // Append to the WHERE clause:
    $where .= $wpdb->prepare( " OR {$wpdb->posts}.post_title LIKE '%s'", "%{$term}%" );

    return $where;
}
add_filter( 'posts_where', 'alter_posts_where_clause' );
5
kaiser