Wofür ist $ object-> filter?

7

Ich sehe dieses Muster immer wieder und frage mich, wofür es ist und wie WP es intern verwendet:

if ( empty($post) ) {
        if ( isset($GLOBALS['post']) )
            $_post = & $GLOBALS['post'];
        else
            return $null;
    } elseif ( is_object($post) && empty($post->filter) ) {
        _get_post_ancestors($post);
        $_post = sanitize_post($post, 'raw');
        wp_cache_add($post->ID, $_post, 'posts');
    } else {
        if ( is_object($post) )
            $post_id = $post->ID;
        else
            $post_id = $post;

Die spezifische Zeile in Frage ist is_object($post) && empty($post->filter). Ich habe diese filterEigenschaft auch mit anderen Objekten verknüpft gesehen . Sie fragen sich, was es tut und wie es verwendet werden kann?

BEARBEITEN

Ich hoffe, mehr Input dazu zu bekommen! Leider werden bei einer Google-Suche mit "Filter" nur Filter-Hooks usw. angezeigt. Dies ist eine schwierige Frage, um unabhängige Informationen zu erhalten. Bühler?

Tom Auger
quelle
Ich bin kürzlich darauf gestoßen . Scribu sagt auch, wo dies während der Tests verwendet wird.
Kaiser
@Rarst Ich bin mir nicht sicher, wie das überhaupt ein genaues Duplikat ist. Ich suche nach einer Erklärung, wie die Filtereigenschaft einiger interner Objekte aussieht, wie sie verwendet wird und wie sie genutzt werden kann. In der Frage zum Fehlerbericht, auf die Sie verlinkt haben, wird die Filtereigenschaft definitiv erwähnt, es wird jedoch nichts unternommen, um sie zu erklären.
Tom Auger
Kein genaues Duplikat. Die andere Frage stieß auf ein Problem $post->filter, das eingestellt werden musste. Es wurde nicht erklärt, was es war, warum es dort war oder wie es im Kern verwendet wird. Ich stimme den 2 abgegebenen Stimmen zur Wiedereröffnung zu.
EAMann
Das schien eine umfassendere Berichterstattung über das Thema zu sein, die ich möglicherweise falsch eingeschätzt hätte. :) Wie auch immer wieder so gut geöffnet.
Erster

Antworten:

5

Der Filter $ post-> enthält den Kontext, in dem der Inhalt des Beitrags gefiltert wurde. Der Kontext kann so etwas wie "Anzeige" sein, die angibt, dass der Beitrag auf der Seite angezeigt werden soll.

Dies erfolgt durch die Desinfektionsfunktionen, um anzuzeigen, in welchem ​​Kontext die Post-Daten bereinigt wurden. Unterschiedliche Kontexte führen zu unterschiedlichen Arten der Desinfektion. "roh" sind beispielsweise nicht bereinigte Daten. "display" hat wahrscheinlich die Funktion esc_html durchlaufen oder was auch immer für diesen Kontext relevant ist. Die Funktion sanitize_post () verwendet dies, um nach bereits vorhandenen Desinfektionen zu suchen, um zu verhindern, dass Dinge doppelt entkommen und so weiter.

Eine andere Verwendung für den Filter $ post-> ist die Funktion get_sample_permalink (). Sie werden feststellen, dass dies festgelegt wird, $post->filter = 'sample'bevor get_permalink () aufgerufen wird. Die Verwendung von "sample" hier zeigt der Funktion get_permalink und dem Code darunter an, dass der Zweck dieses Aufrufs darin besteht, einen Beispielpermalink für die Anzeige auf dem Bildschirm zum Bearbeiten von Posts zu erstellen. Dadurch wird die Funktionsweise einiger der darunter liegenden Funktionen geändert.

Otto
quelle
Vielen Dank an @Otto, dass Sie sich die Zeit genommen haben, dies zu klären. Macht jetzt vollkommen Sinn. Wäre es nicht ratsam, $% @ mit diesem filterWert für eigene Zwecke (innerhalb eines Plugins) zu verwenden, und dabei der gleichen Philosophie folgen, den Kontext für den neuesten Filter im Beitrag bereitzustellen? Ich kann mir momentan kein klares Beispiel vorstellen und frage mich nur, ob dies für Plugin- / Theme-Entwickler als "schreibgeschützt" angesehen werden sollte.
Tom Auger
Oh, noch etwas: In meinem obigen Codebeispiel wird geprüft, ob filteres leer ist. Wenn dies der Fall ist, wird der Beitrag bereinigt, wobei "raw" als Parameter übergeben wird. Ist es sicher zu sagen, dass wenn der Filter auf "roh" eingestellt ist, es dasselbe ist, als ob der Filter überhaupt nicht eingestellt wäre: dh der Beitrag ist noch nicht bereinigt?
Tom Auger
2
Im Wesentlichen würden Sie sanitize_post($post, $context)mit Ihrem Kontext anrufen . Es übergibt jedes Feld im Beitrag auch an sanitize_post_field($field, $post->$field, $post->ID, $context)Ihren Kontext. Eingebaute Kontexte sind: 'raw', 'edit', 'db', 'display', 'attribute' und 'js'. Die Standardeinstellung ist "Anzeige" und läuft apply_filters("post_{$field}", $value, $post_id, $context)im Wesentlichen über das Feld. Sie können sich hier einhängen und Ihren benutzerdefinierten Kontext erkennen und entsprechend handeln. Der Filterwert wird automatisch zum Kontext, wenn sanitize_post fertig ist.
Otto
1

@Shaan: Ich glaube nicht, dass Tom nach einer Beschreibung der WP Plugin API gesucht hat. Er sucht nach einer Beschreibung der Objekteigenschaft, filterdie Sie als Ergebnis erhalten WP_Query. Zum Beispiel, wenn Sie verwenden get_posts():

stdClass Object
(
    // other post properties
    [filter] => raw
)

Ich weiß nicht, ob und wo diese Eigenschaft in WordPress verwendet wird. Nachdem ich mich im Quellcode umgesehen habe, denke ich, dass dies im Moment nirgendwo verwendet wird.

Ich spekuliere hier nur. Der Standardwert gilt rawfür alle bisherigen Beiträge. Es könnte sein, dass die Kernentwickler eine Filterung pro Post-Basis hinzufügen wollten. Wenn Sie beispielsweise nur bestimmte HTML-Elemente im Beitragsinhalt zulassen möchten, können Sie einen Filter erstellen sanitizeHtml, ihn an den Beitrag anhängen und WordPress erledigt den Rest für Sie.

Rofflox
quelle
Es wird tatsächlich ziemlich oft verwendet, normalerweise als Teil eines Tests, um festzustellen, ob es leer ist oder nicht. Ich bin mir darüber hinaus nicht sicher, ob die Werte verwendet werden. Ich frage mich, wie / wann es bevölkert wird und was es bedeutet, wenn es nicht ist.
Tom Auger