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 filter
Eigenschaft 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?
$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.Antworten:
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.quelle
filter
Wert 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.filter
es 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?sanitize_post($post, $context)
mit Ihrem Kontext anrufen . Es übergibt jedes Feld im Beitrag auch ansanitize_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äuftapply_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.@Shaan: Ich glaube nicht, dass Tom nach einer Beschreibung der WP Plugin API gesucht hat. Er sucht nach einer Beschreibung der Objekteigenschaft,
filter
die Sie als Ergebnis erhaltenWP_Query
. Zum Beispiel, wenn Sie verwendenget_posts()
: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
raw
fü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 erstellensanitizeHtml
, ihn an den Beitrag anhängen und WordPress erledigt den Rest für Sie.quelle