Bereinigen und Hinzufügen von Post-Meta mit unbekannter Anzahl von Feldern

Lesezeit: 3 Minuten

Ich habe so ein Feld…

<input type="text" name="summary" value="" required />

…was ich leicht in der Lage bin,_text_field und add_post_meta damit zu bereinigen …

$summary = sanitize_text_field($_POST["summary"]);
add_post_meta( $post_id, 'summary', $summary);

Aber wenn es um das zusätzliche post_meta geht, das ich in der DB speichern muss, weiß ich nicht, wie ich vorgehen soll, weil ich nicht weiß, wie viele zusätzliche Felder das Formular enthalten wird. Es wird variieren.

Die zusätzlichen Formularfelder könnten also so aussehen …

<input type="text" name="cat_01" value="" />
<input type="number" name="dog_01" value="" />
<input type="number" name="rabbit_01" value="" />
<input type="text" name="mouse_01" value="" />

<input type="text" name="cat_02" value="" />
<input type="number" name="dog_02" value="" />
<input type="number" name="rabbit_02" value="" />
<input type="text" name="mouse_02" value="" />

… aber manchmal könnte es einen dritten Satz dieser Felder geben, oder einen vierten usw. und es gibt wirklich keine Begrenzung, und ich weiß nicht, wie viele Sätze dieser Felder es geben wird.

Wenn es also zum Beispiel einen dritten Satz dieser Felder gibt, sehen sie so aus:

<input type="text" name="cat_03" value="" />
<input type="number" name="dog_03" value="" />
<input type="number" name="rabbit_03" value="" />
<input type="text" name="mouse_03" value="" />

Sie bekommen also die Idee.

Wie kann ich bereinigen und add_post_meta hinzufügen, wenn ich nicht weiß, was ich erfassen werde?

Prost.

Warum machst du es dir nicht einfach und speicherst alle in einem Array wie dem folgenden:

<!-- With type -->
<input type="text" name="animal[dog][]" value=""/>
<input type="text" name="animal[cat][]" value="" />
<!-- No Type -->
<input type="text" name="animal[]" value="" />

Verstehst du die Idee richtig?

Auf dem Backend bekommt man dann die Felder mit

if( isset( $_POST['animal'] ) ) {
  $sanitized_array = array();

  foreach( $_POST['animal'] as $type ) {
    if( is_array( $type ) ) {
      // This is a type, let's go over that

      // If it does not exist, create it
      if( ! isset( $sanitized_array[ $type ] ) ) {
        $sanitized_array[ $type ] = array();
      }

      foreach( $type as $value ) {
       $sanitized_array[ $type ][] = sanitize_text_field( $value ); 
      }
    } else {
      // It is not an array, so it's a value instead
      $sanitized_array[] = sanitize_text_field( $value );
    }
  }

  // We have our sanitized array, let's save it:
  update_post_meta( $post_id, 'animal', $sanitized_array );
}

Das ist etwas Ähnliches, das ich bereits erstellt habe, wo die Felder dynamisch ausgeführt werden und wir nicht wissen, wie viel wir sparen müssen.

Ich hoffe, dies gibt Ihnen eine Anleitung, wie man das macht.

  • Für diejenigen, die mit der Handhabung von POST-Variablen durch PHP nicht vertraut sind, stützt sich dies auf das in PHP eingebaute Zusammenfassen von übermittelten Werten mit Namen, die auf ‘ enden.[]’ zu einem Array zusammengebrochen. Die Reihenfolge sollte immer mit der DOM-Reihenfolge übereinstimmen

    – David L

    16. März 2017 um 2:25 Uhr


Sie können verwenden foreach um eine beliebige Anzahl von Feldern zu iterieren. Beispiel:

foreach($_POST as $name=>$value){
    $sanitizedValue = sanitize_text_field($value);
    add_post_meta($post_id, $name, $sanitizedValue);
}

Benutzeravatar von aishwarya
aishwarya

Im folgenden Code habe ich ein Array mit Limit 4 genommen, das Sie setzen können, bis Sie Ihre Tiersätze verwendet haben. Überprüfen Sie dann, welche gepostet wird, und sanieren Sie diese Post-Variable.

    $sanited_array = array();
    for($i = 1 ; $i < 4 ; $i++)
    {

    if(isset($_POST['cat_0'.$i]))
    {
        $sanited_array['cat'][] = sanitize_text_field($_POST['cat_0'.$i]);
    }
    if(isset($_POST['dog_0'.$i]))
    {
        $sanited_array['dog'][] = sanitize_text_field($_POST['dog_0'.$i]);
    }
    if(isset($_POST['rabbit_0'.$i]))
    {
        $sanited_array['rabbit'][] = sanitize_text_field($_POST['rabbit_0'.$i]);
    }
    if(isset($_POST['mouse_0'.$i]))
    {
        $sanited_array['mouse'][] = sanitize_text_field($_POST['mouse_0'.$i]);
    }
}
update_post_meta( $post_id, 'animal', $sanited_array );

1388040cookie-checkBereinigen und Hinzufügen von Post-Meta mit unbekannter Anzahl von Feldern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy