it-swarm.com.de

Benutzerdefinierte Felder zum Speichern mehrerer Werte

Ich füge eine benutzerdefinierte Meta-Box hinzu, mit der ich mithilfe einer Abfrage mehrere benutzerdefinierte Felder mit dem Schlüssel "test" erstellen kann. Es kann ein oder mehrere benutzerdefinierte Felder geben, aber der Schlüssel ist nur "Test". Ich kann auch Schlüsselwerte löschen, die nicht mehr benötigt werden. Das Problem ist, dass ich nicht mehrere Werte des benutzerdefinierten Felds mit demselben Schlüssel speichern kann. In allen Feldern wird nur der letzte Wert gespeichert. Helfen Sie mir bitte, eine Entscheidung zu finden!

<?php add_action( 'add_meta_boxes', 'add_test_meta_box' );  
    function add_test_meta_box()  
    {  
        add_meta_box( 'test_meta_box', 'TEST PARAM', 'add_test_meta', 'post', 'normal', 'high' );      
    }  

    function add_test_meta( $post )  
    {  
        // Grab our data to fill out the meta boxes (if it's there)  
        $test = get_post_meta( $post->ID, 'test', true ); 

        // Add a nonce field 
        wp_nonce_field( 'save_test_meta', 'test_meta' ); 
        ?> 

        <div id="myfor">
            <p> 
                <label>Param 1 key "test" </label><br >
                <input type="text" name="test" value="<?php echo esc_attr( $test ); ?>"  size="60" /><span>Delete</span>
            </p> 
        </div>

        <input type="button" value="Добавить" id="addnew">

        <?php 
    } 

    add_action( 'save_post', 'test_meta_save' ); 
    function test_meta_save( $id ) 
    { 
        // No auto saves 
        if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;  

        // Check our nonce 
        if( !isset( $_POST['test_meta'] ) || !wp_verify_nonce( $_POST['test_meta'], 'save_test_meta' ) ) return; 

        // make sure the current user can edit the post 
        if( !current_user_can( 'edit_post' ) ) return; 

        // strip all html tags and esc attributes here 
        if( isset( $_POST['test'] ) ) 
            update_post_meta( $id, 'test', esc_attr( strip_tags( $_POST['test'] ) ) );   
    }  

    add_action('admin_head', 'my_add_input');


    function my_add_input() { ?>
      <script>
      // add live metod 
      jQuery.fn.live = function (types, data, fn) {
        jQuery(this.context).on(types,this.selector,data,fn);
        return this;
    };

    // add new input
      (function($){ 
          $(function(){ 

            var num = 2;


            $('#addnew').click(function(){
                $('#myfor').append('<p><label>Param  '+ num +' key "test" </label><br ><input type="text" name="test" value=""  size="60" /> <span>Delete</span></p>');
                num ++;
            });

            $('span').live( 'click' , function(){       
                $(this).parent('p').remove();
            });     

        });  
    })(jQuery)  
      </script>

    <?php } ?> 
2
Maxim Popov
  1. Tragen Sie zuerst diesen Code [] am Ende Ihres Formularfeldnamens ein. Der Name Ihres Feldes lautet also "test []".

    Beispiel:

    <input type="text" name="test[]" value=""  size="60" />
    
  2. So speichern Sie den Wert:

    $old = get_post_meta($post_id, 'your_meta_key', true);
    $newtest = array();
    $test = $_POST['test'];
    $count = count( $test );
    
    for ( $i = 0; $i < $count; $i++ ) {
        if ( $test[$i] != '' ) {
            $newtest[$i]['test'] = stripslashes( strip_tags( $test[$i] ) );
        }
    }
    
    if ( !empty( $newtest ) && $newtest != $old ) {
        update_post_meta( $post_id, 'repeatable_fields', $newtest );
    } elseif ( empty($newtest) && $old ) {
        delete_post_meta( $post_id, 'repeatable_fields', $old );
    }
    
  3. Zeigen Sie Ihr Feld mit den gespeicherten Werten:

    $show_the_value = get_post_meta($post->ID, 'your_meta_key', true);
    if ($show_the_value) {
        foreach ($show_the_value as $value) { ?>
            <input type="text" name="test[]" value="<?php if($value['test'] != '') echo  $value['test']; ?>"  size="60" />
        <?php }
    }
    
2
KeepMove