wordpress元框合并选择+输入文本

时间:2014-04-01 22:12:31

标签: wordpress meta-boxes

我要打破我的大脑..

我为自定义帖子类型“book”创建了一个新的元数据盒。 我正在使用很多不同类型的字段,如输入文本,复选框,选择,textarea,分类选择和可重复,一切都很棒!

但现在我想做更艰难的一步......

是否可以在其中包含2个字段的可重复字段? 我想在它附近有一个选择和输入文本..在选择管理员内部可以选择商店(例如Ibs或亚马逊),在输入字段中他可以写出销售该书的网址。

这是我的代码:

/* META Book */
function add_mycustom_meta_box() {  
    add_meta_box(  
        'custom_meta_box',
        'Info book', 
        'show_custom_meta_box', // $callback  
        'product',
        'normal',
        'high');
}


// Field Array
$prefix = 'custom_';  
$custom_meta_fields = array( 

array(  
    'label' => 'Link vendita',  
    'desc'  => 'Inserisci l url dei siti esterni',  
    'id'    => $prefix.'repeatable',  
    'type'  => 'repeatable',
    'options' => array(
        'amazon' => array(
            'label' => 'Amazon',
            'value' => 'amazon'
        ),
        'ibs' => array(
            'label' => 'Ibs',
            'value' => 'ibs'
        )
    )
    )

);  

// Callback
function show_custom_meta_box() {  
global $custom_meta_fields, $post;  
// Use nonce for verification  
echo '<input type="hidden" name="custom_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';  

// Build metabox  
echo '<table class="form-table">';  
foreach ($custom_meta_fields as $field) {  
// get value of this field if it exists for this post  
$meta = get_post_meta($post->ID, $field['id'], true);  
// begin a table row with  
echo '<tr> 
<th><label for="'.$field['id'].'">'.$field['label'].'</label></th> 
<td>';  
switch($field['type']) { 



// if repeatable 
case 'repeatable':

echo '<a class="repeatable-add button" href="#">+</a> 
      <ul id="'.$field['id'].'-repeatable" class="custom_repeatable">';  
$i = 0;  

if ($meta) {

foreach($meta as $row) {
     echo '<li><span class="sort hndle">|||</span>';

    // Select ibis or amazon
    echo '<select name="'.$field['id'].'" id="'.$field['id'].'">';

    foreach ($field['options'] as $option) {
          echo '<option', $row == $option['value'] ? ' selected="selected"' : '', ' value="'.$option['value'].'">'.$option['label'].'</option>';
    }

    echo '</select>';
    // end select

echo '<input type="text" name="'.$field['id'].'['.$i.']" id="'.$field['id'].'" value="'.$row.'" size="30" data-shop="'.$option.'" /> 
<a class="repeatable-remove button" href="#">-</a></li>';  
$i++;  
}  
} else {  
echo '<li><span class="sort hndle">|||</span>';

// Select ibis o amazon
echo '<select name="'.$field['id'].'" id="'.$field['id'].'">';
foreach ($field['options'] as $option) {
echo '<option', $row == $option['value'] ? ' selected="selected"' : '', ' value="'.$option['value'].'">'.$option['label'].'</option>';
}
echo '</select>';
// Fine select

echo '<input type="text" name="'.$field['id'].'['.$i.']" id="'.$field['id'].'" value="" size="30" /> 
<a class="repeatable-remove button" href="#">-</a></li>';  
}  
echo '</ul> 
<span class="description">'.$field['desc'].'</span>';  
break;

} //end switch  
echo '</td></tr>';  
} // end foreach  
echo '</table>';
}

// Save the Data  
function save_custom_meta($post_id) {  
global $custom_meta_fields;  

// verify nonce  
if (!wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__)))   
return $post_id;  
// check autosave  
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)  
return $post_id;  
// check permissions  
if ('page' == $_POST['post_type']) {  
if (!current_user_can('edit_page', $post_id))  
return $post_id;  
} elseif (!current_user_can('edit_post', $post_id)) {  
return $post_id;  
}  

// loop through fields and save the data
foreach ($custom_meta_fields as $field) { 

$old = get_post_meta($post_id, $field['id'], true);  
$new = $_POST[$field['id']];  
if ($new && $new != $old) {  
update_post_meta($post_id, $field['id'], $new);  
} elseif ('' == $new && $old) {  
delete_post_meta($post_id, $field['id'], $old);  
}  
} // end foreach 

}  
add_action('save_post', 'save_custom_meta');

可重复字段生成一个数组,它没问题,但我还能做些什么来存储选择值呢?

希望有人可以帮助我 感谢

1 个答案:

答案 0 :(得分:0)

我确信您可以在任何帖子类型的编辑屏幕内将动态字段放入自定义元代理中。

我将语言字段插件构建到http://wordpress.org/plugins/language-field/

的管理页面中

我依靠这个例子 http://www.mustbebuilt.co.uk/2012/07/27/adding-form-fields-dynamically-with-jquery/

一般采取以下步骤

使用此示例添加自定义Meta框 http://codex.wordpress.org/Function_Reference/add_meta_box#Examples

说到这些台词   $ mydata = sanitize_text_field($ _POST ['myplugin_new_field']);

//更新数据库中的元字段。   update_post_meta($ post_id,'_ my_meta_value_key',$ mydata);

循环通过上面的例子创建的字段。