✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Durchsuchen Sie Post-Metadaten im WordPress-Adminbereich

32

Nachdem Sie längere Zeit mit WordPress gearbeitet haben, ist es wahrscheinlich, dass Sie in gewisser Weise mit Post-Metadaten gearbeitet haben. Vielleicht haben Sie einfach Metadaten aus der Datenbank gelesen, oder Sie haben auch sowohl in die Datenbanktabelle geschrieben als auch aus ihr gelesen.

Es kann eine wirklich leistungsstarke API sein, wann immer Sie bestimmte Informationen mit Ihren Beiträgen verknüpfen müssen (oder, wenn Sie Dinge noch mehr abstrahieren möchten, mit Ihren Modellen).

Was passiert jedoch, wenn Sie Informationen aus der Metadatentabelle einbeziehen möchten, aber nicht die Bequemlichkeit von Plugins wie SearchWP oder Relevanssi haben?

Nehmen Sie außerdem an, dass der Anwendungsfall nur für Administratoren und nur für den Verwaltungsbereich von WordPress gilt. Das heißt, Sie möchten Ihre Posts im Bildschirm „ Alle Posts “ durchsuchen, aber Sie möchten auch die Post-Metadaten in die Suchkriterien aufnehmen.

Was dann?

Post-Metadaten durchsuchen

Wenn Sie im WordPress-Administrationsbereich nach Beiträgen suchen, sucht es standardmäßig nach einem Satz im Beitragstitel, im Beitragsauszug und im Beitragsinhalt und gibt dann diese Ergebnisse zurück.

Um also die Suche auf Post-Metadaten zu erweitern, müssen wir die ausgeführte Abfrage so aktualisieren, dass sie die Post-Metadatentabellen enthält. Aber es steckt noch mehr dahinter. Für die größtmögliche Flexibilität und das beste Benutzererlebnis sollten Sie insbesondere Folgendes tun:

  • Fügen Sie Teile eines Satzes hinzu, damit nicht nur wörtlich nach etwas im Artikel gesucht wird,
  • und natürlich den Fall richtig handhaben, wenn kein Suchbegriff eingegeben wird, damit der Bildschirm Alle Beiträge weiterhin in seinem Standardformat angezeigt wird.

Das bedeutet, dass wir die Suchanfrage nicht nur so ändern müssen, dass sie einen Metaschlüssel und einen Metawert enthält, sondern dass wir ganze Phrasen richtig maskieren müssen, damit wir eine LIKEOperation anstelle einer INOperation oder einer =Operation verwenden können.

Durchsuchen Sie Post-Metadaten im WordPress-Adminbereich

Einige der Dinge, die Sie wissen sollten, bevor Sie den Rest dieses Artikels lesen, sind:

Letztendlich müssen wir zwei Hooks mit zwei benutzerdefinierten Funktionen verwenden. Und da ich kein vollständiges Beispiel dafür liefern kann, wie dies in Ihrem Anwendungsfall aussehen könnte, muss der Code etwas verallgemeinert werden.

Sich in die Suche einklinken

Im Folgenden sehen Sie drei Dinge:

  1. Überprüfung, ob sich der Benutzer im Verwaltungsbereich befindet und er sich auf der Bearbeitungsseite befindet.
  2. Der Benutzer hat eine Suche eingegeben.
  3. Der Suchausdruck wurde in ein Array konvertiert, maskiert und der Meta-Abfrage-Eigenschaft der Instanz von WP_Query hinzugefügt.

Siehe unten :

<?php
add_filter('pre_get_posts', function ($query) {

    // Make sure we're in the admin, an administrator, and on the edit page.
    if (!is_admin() || !current_user_can('manage_options') || 'edit' !== get_current_screen()->base) {
        return;
    }

    // Determine if the user is running a search.
    $search = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);
    if (empty($search)) {
        return;
    }

    $query->set(
        'meta_query',
        [
            [
                'key'     => 'headline_notes',
                'value'   => esc_sql(preg_replace('/s+?/', '%', $search)), // For flexible search, make sure to replace all white space with % for LIKE.
                'compare' => 'LIKE',
            ],
        ]
    );
});

Unter der Annahme, dass alle oben genannten Punkte zutreffen, wird dadurch die Abfrage aktualisiert, die für die WordPress-Datenbank ausgeführt wird, bevor die nächste Seite gerendert wird, sodass Ergebnisse angezeigt werden, die die Metadateninformationen enthalten.

Aktualisieren der WHERE-Klausel

Bevor wir fertig sind, müssen wir jedoch auch sicherstellen, dass wir die ausgeführte Abfrage aktualisiert haben.

Standardmäßig wird die Abfrage mithilfe einer ANDOperation erstellt, die uns daran hindert, Beitragstitel, Auszüge, Inhalte und Metadaten ordnungsgemäß zu durchsuchen. Die Abfrage muss jedoch aktualisiert werden, damit sie eine OROperation verwendet.

Ganz wörtlich bedeutet dies, dass im Titel, im Inhalt, im Auszug oder in den Metadaten nachgesehen wird.

Ich habe mich für die Verwendung eines regulären Ausdrucks in meiner Implementierung entschieden, aber Ihre Implementierung funktioniert möglicherweise mit dem Ersetzen von Teilzeichenfolgen. Daher ist hier etwas auskommentiert, um Ihnen die größtmögliche Flexibilität zu geben .

<?php
add_filter( 'posts_where', function($where, $query) {

    // Determine if 'headline_notes' appears in the WHERE clause.
    $position = strpos($where, 'acme_meta_key');
    if (false === $position) {
        return $where;
    }

    // Look for the 'AND' clasue and replace it with 'OR' in the WHERE clause.
    $regularExpress = '//mi'; // Your regular expression.
    $replacement = ''; // Your string to replace.

    return preg_replace(
        $regularExpression,
        $replacement,
        $where
    );
}, 10, 2);

Dadurch wird die WHEREKlausel aktualisiert, die ausgelöst wird, um den Arbeitssatz im ersten Teil des Artikels zu vervollständigen, in dem wir Metadaten hinzufügen.

Es gibt andere Wege

Beachten Sie, dass es einige unglaublich flexible Möglichkeiten gibt, mit WP_Query zu arbeiten, um die gewünschten Ergebnisse zu erhalten. Und Ihre Implementierung hängt davon ab, was Sie tun.

Betrachten Sie dies also als eine von vielen Möglichkeiten, die verwendet werden können; Beachten Sie jedoch Folgendes, wenn Sie Folgendes haben:

  1. ein einziger Schlüssel,
  2. ein Wert (oder ein Wert, der in ein Array aufgeteilt werden kann),
  3. und Sie neben den traditionellen Post-Inhalten auch nach Metadaten suchen möchten

Dann wird dies funktionieren.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen