1

カスタム投稿タイプとその投稿タイプにカスタムメタボックスを使用して、ワードプレスプラグインを作成しています。

メタ ボックス内には、ユーザーが入力できるフォームがあります: 日付、メディア、タイトル。

フォームは次のようになります。

$mc_date = get_post_meta($_GET['post'],'mc_date',true);
$mc_media = get_post_meta($_GET['post'],'mc_media',true);
$mc_title = get_post_meta($_GET['post'],'mc_title',true);

echo '<form id="add_media_form">';
echo '<table>';
echo    '<tr>';
echo        '<td>Date</td><td>Media</td><td>Title</td>';
echo    '</tr>';
echo  '<tr>';
echo        '<td><input type="text" name="mc_date" value="'.$mc_date.'" class="datepicker"/></td>';
echo        '<td><input type="text" name="mc_media" value="'.$mc_media.'" /></td>';
echo        '<td><input type="text" name="mc_title" value="'.$mc_title.'" /></td>';
echo        '<td><a href="#" class="add_new_media" rel="'.WP_PLUGIN_URL.'/mc"><img src="'.WP_PLUGIN_URL.'/mc/plus.png" /></a></td>';
echo  '</tr>';
echo '</table>';
echo '</form>';
echo '<div class="addmedianotify"></div>';

jquery:

jQuery('.add_new_media').click(function(e){
    var plug = jQuery(this).attr('rel');
    e.preventDefault();
    jQuery.post(plug + '/ajax_add_media.php',jQuery('#add_media_form').serialize(),function(data){
        jQuery('.addmedianotify').html('<span>'+data+'</span>');
    });
});

私がやりたいことは、ユーザーが「add_new_media」リンク/画像をクリックすると、日付、メディア、およびタイトルの新しいテキストボックスのセットが表示されることです。

私の主な関心事は、動的な入力に名前を付けるトリックは何かということです。その中のカスタムデータを保存して取得します。

4

1 に答える 1

4

ユーザーが「更新」をクリックしてもページは更新されるため、フィールドを save_post と ajax に保存できる必要があります。これに ajax を使用することは、そのデータを 2 回保存する必要があるため、自分でより多くの作業を行うため、最良の方法ではない可能性があります。私は ajax を捨てて、単純にhtml 配列を使用して、フィールドを追加し、ユーザーが「更新」をクリックしたときに 1 つの送信を行うことができるようにします。ユーザーの必要に応じて新しい行を追加するには、単に tr を複製し、クリック イベントでテーブルに追加します。何かのようなもの...

PHP と HTML

<a href="#" class="add_new_media"><img src="'.WP_PLUGIN_URL.'/mc/plus.png" /></a>
<table>
    <tr>
        <td>Date</td>
        <td>Media</td>
        <td>Title</td>
        <td></td>
    </tr>
    <?php
    //$mcs will be a multi-dimensional array with this method
    $mcs = get_post_meta($post->ID,'mcs',true);

    //Loop through each set of saved mc data (date, media, and title per item) and output inputs so the saved values can be edited and resaved. 
    foreach ($mcs as $mc) : ?>
    <tr>
        <td><input type="text" name="mc[][date]" value="<?php echo $mc['date'] ?>" class="datepicker"/></td>
        <td><input type="text" name="mc[][media]" value="<?php echo $mc['media'] ?>" /></td>
        <td><input type="text" name="mc[][title]" value="<?php echo $mc['title'] ?>" /></td>
        <td><a href="#" class="remove">Remove</a></td>
    </tr>
    <?php endforeach ?>
</table>

Javascript

<script>
    (function($){
        //Grab the first 
        $('.add_new_media').click(function(e) {
            //Use the first tr as a cookiecutter and add another cookie to the bowl :) 
            $('table tr:first-child')
                .clone()
                .appendTo($('table'))
                .find('input')
                    .val('')
        }
        $('.remove').click(function(){
            $(this).parent().parent().remove()
        })
    })(jQuery)
</script>

フォーム送信時の PHP

<?php
    if ($_POST) : 

        //$_POST['mc'] is a multi-dimensional array of all the date/media/title input rows
        print_r($_POST['mc']);
        /*
            ..would look something like
            Array (
                [0] => Array (
                    'date' => 'some value',
                    'media' => 'some value',
                    'title' => 'some value'
                ),
                [1] => Array ( ... ),
                [2] => Array ( ... ) ... and so on
            )
        */

        //RUN INPUT VALIDATION!!

        //Update the list
        update_post_meta($post->ID, 'mcs', $_POST['mc']);
    endif;
?>
于 2012-06-30T21:35:51.770 に答える