サポート » 使い方全般 » メタボックス内にJQueryで増減可能なフォームを作成した場合の問題

  • add_meta_boxで作ったメタボックスにJqueryで数を増減できるフォームをつくりました。
    (Googleカレンダーのアラートのフォームと似たようなものです)

    ですが、javascriptの変数(下記スクリプトのa + lenとal +len)がPHPの変数に代入することができずに困っています。

    さらに、そのあとにカスタムフィールドの値(メタキー)を保存する方法も見当がついていません。
    $meta1,$meta_b1,$meta2,$meta_b2,$meta3,$meta_b3のような固定のキーに保存すると、<<$meta2,$meta_b2(フォームの2段目)の値はあるのに$meta1,$meta_b1(フォームの1段目)が空白>>だった場合、1段目のフォーム分が空白となることでレイアウト上の不都合が生ずるので、それを解決した方法があると理想です。
    (1段目が空白だった場合、2段目の値を1段目に繰り上げしたいです)

    どなたか、この2つの方法をご教授いただけないでしょうか。
    よろしくお願いします。
    以下は自分で記述したフォーム部分のphpとjavascriptです。

    add_action( 'admin_init', 'meta_create' );
    function meta_create() {
    	add_meta_box('example_meta', 'テスト', 'example_meta_html','post');
    }
    
    function example_meta_html () {
    	global $post;
    	$custom = get_post_custom($post->ID);
        if(!empty($custom)) {
    		$var_array = array('meta1','meta2','meta_b1','meta_b1');
                    foreach ($var_array as $var) {
    			${$var} = isset( $custom[$var][0] ) ? $custom[$var][0]: '';
    		}
            }
    wp_nonce_field( 'my_events_nonce', 'events_nonce' );
    ?>
    <?php
    <script>
    var a = 'meta';//アーティスト名のメタ
    var au = 'meta_b';//アーティストURLのメタ
    
    jQuery(document).ready(function($){
    
    $('.addspan #add').click(function(){
    
    var len = $('.item').length;//フォームの数
    var newex_artist = '<div class="item"><span><input name="' + a + len + '" class="artist" value="<?php if(isset($' + a + len + ')) echo $' + a + len + '; ?>" size="27"><input name="' + au + len + '"  class="artisturl" value="<?php if(isset($' + au + len + ')) echo $' + au + len + '; ?>" size="31"></span><span class="del_b"></span></div>';//この行のphp部分が上手く動かない
    
    if(len < 5){
    	$('.addspan').before(newex_artist);
    	$('.item .del_b').remove();
    	len++;
    	for(var i=0; i<len; i++){
    		var del = '<span class="del_b"><a href="#" id="del"></a></span>';
    		$('.item:eq(' + i + ')').append(del);
    	}
    }else{
    	alert('これ以上追加できません');
    }
    });
    
    $('.item #del').live('click', function(){
    
    var id = $(this).parent().index();
    $('.item:eq('+ id +')').remove();
    var len = $('.item').length;
    
    if(len == 1) $('.item #del').remove();
    
    for(var i=0; i<=len_a; i++){
    $('.item:eq(' + i + ') .artist').attr('name', a + i);
    $('.item:eq(' + i + ') .artisturl').attr('name', au + i);
    }
    });
    });
    </script>
    <div class="item">
    <span><input name="meta" class="meta" value="<?php if(isset($meta)) echo $meta; ?>" size="27"><input name="artisturl" class="artisturl" value="<?php if(isset($meta_b)) echo $meta_b; ?>" size="31"></span><span class="del_b"></span></div>
    <span class="addspan"><a id="add">追加する</a></span>
    </div>
    <?php
    }
    //カスタムフィールドの値(メタキー)を保存する
    add_action ('save_post', 'save_example');
    function save_example($post_id){
    	global $post;
    	if ( !isset( $_POST['events_nonce'] ) || !wp_verify_nonce( $_POST['events_nonce'], 'my_events_nonce' )) {
    		return $post_id;
    	}
    	if ( !current_user_can( 'edit_post', $post->ID )) {
    		return $post_id;
    	}
    update_post_meta($post->ID, 'meta1', $_POST['show']);
    update_post_meta($post->ID, 'meta2', $_POST['show']);
    …
    update_post_meta($post->ID, 'meta_b1', $_POST['show']);
    update_post_meta($post->ID, 'meta_b2', $_POST['show']);
    …

  • トピック「メタボックス内にJQueryで増減可能なフォームを作成した場合の問題」には新たに返信することはできません。