2016-07-30 17 views
0

Ich verwende Wordpress (Version 4.5.3) und habe ein benutzerdefiniertes Feld zum Kommentarformular hinzugefügt. Das Feld ist eine Dropdown-Liste mit dem Select-Tag. Das Feld erscheint in der Form gut, und ich kann eine Option auswählen und der Wert für diese Option wird ordnungsgemäß gespeichert.Kann Kommentar-Metadaten in Wordpress nicht bearbeiten

Ich habe auch Code hinzugefügt, um das benutzerdefinierte Feld auf der Seite Kommentar bearbeiten (/wordpress/wp-admin/comment.php?action=editcomment) zu bearbeiten. Ich kann den gespeicherten Wert abrufen und anschließend die Dropdownliste mit dem richtigen Wert neu erstellen.

Ich habe Code hinzugefügt, um den bearbeiteten Wert für das benutzerdefinierte Feld zu speichern, aber das funktioniert nicht. Wenn ich auf der Seite "Kommentar bearbeiten" einen anderen Wert aus der Dropdownliste auswähle und dann auf die Schaltfläche "Aktualisieren" klicke, wird der neu ausgewählte Wert nicht gespeichert.

Ich füge den Code, um all dies in functions.php tun. Hier ist der Code, das Feld zu dem Formular hinzufügen und die Daten speichern:

// Add fields after default fields above the comment box, always visible 

    add_action('comment_form_logged_in_after', 'additional_fields'); 
    add_action('comment_form_after_fields', 'additional_fields'); 

    function additional_fields() { 

    echo '<p class="comment-form-area">'. 
    '<label for="region">' . __('Choose a <strong>region</strong>') . '<span class="required">*&nbsp;&nbsp;&nbsp;&nbsp;</span></label>'.   
    '<br /><select id="region" name="region"> 
    <option value="one">one</option> 
    <option value="two">two</option> 
    <option value="three">three</option> 
    <option value="four">four</option>  
    </select></p>'; 
    } 

    // Save the comment meta data along with comment 

    add_action('comment_post', 'save_comment_meta_data'); 
    function save_comment_meta_data($comment_id) { 

     if ((isset($_POST['region'])) && ($_POST['region'] != '')) 
     $region = wp_filter_nohtml_kses($_POST['region']);    
     add_comment_meta($comment_id, 'region', $region);  

    } 

Hier ist der Code das benutzerdefinierte Feld zum Kommentar Bearbeitungsseite hinzuzufügen:

// Add an edit option to comment editing screen 

    add_action('add_meta_boxes_comment', 'extend_comment_add_meta_box'); 

    function extend_comment_add_meta_box() { 
     add_meta_box('title', __('Region field'),    'extend_comment_meta_box', 'comment', 'normal', 'high'); 
    } 

    function extend_comment_meta_box ($comment) { 

    $_regions = array 
     ("one", 
     "two", 
     "three", 
     "four"); 


     $region = get_comment_meta($comment->comment_ID, 'region', true);   
     ?> 
     <p> 
      <label for="region"><?php _e('Region*'); ?></label> 
      <p><select id="region" name="region"> 
     <?php 
     for ($ix = 0; $ix < count($_regions); $ix++) { 
      echo '<option value="' . $_regions[$ix] . '"'; 
      if ($region == $_regions[$ix]) { 
       echo ' selected';     
      } 
     echo '>' . $_regions[$ix] . '</option>';  
     } 
     ?> 
     </select></p> 

    <?php 
    } 

All dies scheint zu funktionieren fein. Hier ist der Code zum Speichern des bearbeiteten Werts für das benutzerdefinierte Feld:

// Update comment meta data from comment editing screen 

    add_action('edit_comment', 'extend_comment_edit_metafields'); 

    function extend_comment_edit_metafields($comment_id) { 
     if(! isset($_POST['extend_comment_update']) || ! wp_verify_nonce(  $_POST['extend_comment_update'], 'extend_comment_update')) return; 

     if ((isset($_POST['region'])) && ($_POST['region'] != '')) : 
      $region = wp_filter_nohtml_kses($_POST['region']); 
      update_comment_meta($comment_id, 'region', $region); 
     else : 
      delete_comment_meta($comment_id, 'region'); 
     endif; 

    } 

Dieser Code funktioniert nicht. Wenn ich zur Seite Kommentar bearbeiten zurückkehre, sehe ich den ursprünglichen Wert für das benutzerdefinierte Feld, nicht den bearbeiteten Wert.

Warum wird der bearbeitete Wert nicht gespeichert?

Antwort

0

Die Funktion extent_comment_edit_metafields() prüft zunächst, ob das Nonce-Feld gesetzt wurde. Es hat nicht so die Rückkehr ausgeführt, ohne update_comment_meta() aufzurufen. Arbeiten sollte eigentlich das Nonce Feld in extend_comment_meta_box() gesetzt werden wie folgt aus:

wp_nonce_field('extend_comment_update', 'extend_comment_update', false); 

Diskussion über die Nonce Feld ist hier: https://codex.wordpress.org/Function_Reference/wp_nonce_field

Verwandte Themen