2016-05-01 12 views
0

Ich versuche, Post-Optionen für mein neues Wordpress-Template zu erstellen, aber ich weiß nicht, wie wir sanieren oder validieren meiner benutzerdefinierten Post Meta-Daten vor dem Speichern:Wordpress sanieren Daten, bevor mit update_post_meta Speicher

$data = $_POST['enablog_post_options']; 

// Update the meta fields in the database. 
update_post_meta($post_id, 'enablog_post_options',$data); 

Alle Optionen (YouTube-URL, Text, Kontrollkästchen und Optionsfelder) werden mit meinem eindeutigen Metaschlüssel enablog_post_options gespeichert.

Update:

sanitize_text_field() alle meine Code beschädigt (alle Kontrollkästchen aktiviert werden, wenn ich die Post zu speichern), IMHO ich brauche mehr als nur sanitize_text_field(), weil $_POST['enablog_post_options'] Kontrollkästchen hat, Textfelder und vieles mehr.

Antwort

0

verwenden Ihre Daten zu sanieren:

$data = sanitize_text_field($_POST['enablog_post_options']); 

// Update the meta fields in the database. 
update_post_meta($post_id, 'enablog_post_options',$data); 

Werfen Sie einen Blick auf die Codex auf Validating Sanitizing and Escaping User Data

+0

Sanitize_text_field beschädigt alle meinen Code (alle Kontrollkästchen werden überprüft, wenn ich Post speichern), IMHO brauche ich mehr als nur sanitize_text_field, weil $ _POST ['enablog_post_options'] Kontrollkästchen, Textfelder und mehr hat. – Netshad

0

Wordpress-Standards empfehlen wp_unslash() für jede globale Variable zu verwenden, die sind ($ _POST, $ _ GET und etc) .. danach benutzen Sie irgendeine Sanitize Funktion entsprechend Ihrem Bedarf.

$data = sanitize_text_field(wp_unslash($_POST['enablog_post_options'])); 

// Update the meta fields in the database. 
update_post_meta($post_id, 'enablog_post_options',$data); 
0

Zuerst. Unter der Annahme, dass das $_POST['enablog_post_options'] ein Array ist, sollte es als ein Array bereinigt werden, wobei jedes einzelne Element in einer Schleife durchlaufen wird. Nicht als String, alle Elemente gleichzeitig.

Schauen Sie also in Ihr enablog_post_options Array und entscheiden Sie sich für ein datenartabhängiges Reinigungsverfahren für jedes Element. WP Codex kann helfen beginnend damit.

Jetzt. Da Sie verstehen, welche Datentypen Sie wirklich zu desinfizieren sind, vermute ich, dass es die update_post_meta() integrierten Sanierungsmaßnahmen & benutzerdefinierte Filter sind, die Sie an die Funktion anschließen können.

So kann jeder den Code der update_metadata() Funktion nachschlagen, die das schwere Anheben für update_post_meta()here in the Core Metadata API source code durchführt.

Aber in der Zwischenzeit, es reinigt:

  • Meta-Taste mit sanitize_key() und wp_unslash();
  • Meta-Wert mit wp_unslash() und sanitize_meta() (mehr Erklärung zu diesem folgt).
  • Datenbank speichern Abfrage mit wpdb::prepare() aufgerufen von update_metadata() ->wpdb::update();

Sanitize mit sanitize_meta().

Die bequeme Möglichkeit, das [benutzerdefinierte] Post-Meta zusätzlich zu bereinigen, ist über sanitize_meta(). Die update_metadata() hakt bereits den potenziell vorhandenen benutzerdefinierten Bereinigungsfilter, den Sie erstellen müssen, in den Prozess der Meta-Feldbereinigung ein.Dies geschieht über sanitize_meta().

Es ist aus update_metadata() wie folgt aufgerufen mit allen Post Meta-Parameter:

$meta_value = sanitize_meta($meta_key, $meta_value, $meta_type); 

So können Sie nur eine benutzerdefinierte sanitization Filter machen mit Ihrem Beitrag meta so zu arbeiten (das Beispiel von WP Codex sanitize_meta() Beschreibung der Link oben):

// --- sanitize_meta() call is commented out because it is called from update_metadata() 
// $clean_value = sanitize_meta('birth-year', $user_input, 'user'); 
function sanitize_birth_year_meta($year) { 
    $now = date('Y'); 
    $then = $now - 115; // No users older than 115. 
    if ($then > $year || $year > $now) { 
     wp_die('Invalid entry, go back and try again.'); 
    } 
    return $year; 
} 
add_filter('sanitize_user_meta_birth-year', 'sanitize_birth_year_meta'); 

mit einigem imagnary Code fortsetzen, in sanitize_birth_year_meta() statt $year werden Sie Ihren $data Inhalt bekommen zu bekommen Bereinigt, wenn der Filter aufgerufen wird.