Полагаю, вам удобно с PHP, учитывая то, что вы сказали здесь.Хорошей новостью является то, что ваши знания PHP пригодятся здесь.Пришло время изучить новую функцию функции register_post_type;то есть параметр register_meta_box_cb
.Это позволяет определить вызываемую функцию для добавления метабокса на страницах cpt add и edit.Например, вот cpt (взятый прямо из кодекса) с добавленным параметром:
add_action('init', 'codex_custom_init');
function codex_custom_init()
{
$labels = array(
'name' => _x('Books', 'post type general name'),
'singular_name' => _x('Book', 'post type singular name'),
'add_new' => _x('Add New', 'book'),
'add_new_item' => __('Add New Book'),
'edit_item' => __('Edit Book'),
'new_item' => __('New Book'),
'view_item' => __('View Book'),
'search_items' => __('Search Books'),
'not_found' => __('No books found'),
'not_found_in_trash' => __('No books found in Trash'),
'parent_item_colon' => '',
'menu_name' => 'Books'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'register_meta_box_cb' => 'my_meta_box_function',
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('book',$args);
}}
Теперь, когда у вас определена функция cb мета-поля, используйте ее следующим образом:
function my_beta_box_function(){
add_meta_box(
'myplugin_sectionid',
__( 'My Post Section Title', 'myplugin_textdomain' ),
'myplugin_inner_custom_box',
'book'
);
}
add_meta_box определяет мета-блок для вас и предоставляет функцию, которая создает контент в метабоксе.В этом случае наш код ссылается на функцию myplugin_inner_custom_box
.Посмотрите на http://codex.wordpress.org/Function_Reference/add_meta_box для получения дополнительной информации о добавлении мета-блоков.Итак, теперь нам нужно добавить наш контент, определив функцию:
function myplugin_inner_custom_box()
{
// Everything here would appear in the meta box
}
На этом этапе вы можете использовать свои знания PHP для создания HTML-формы, которую можно обрабатывать при отправке.Вы можете добавить кнопку + и использовать свой PHP так же, как и в любом другом приложении PHP.Я не буду вдаваться в подробности, как это сделать, потому что я предполагаю, что вы можете сделать это.Я на самом деле создал несколько метабоксов, подобных этому, и, узнав о функциях, которые я опубликовал, я мог просто положиться на свои знания PHP.Последний кусок этого - сохранение ввода.Используя функцию, которая определяет вашу подпрограмму сохранения и действие save_post, вы можете использовать свои знания PHP для сохранения данных:
/* Do something with the data entered */
add_action('save_post', 'myplugin_save_postdata');
/* When the post is saved, saves our custom data */
function myplugin_save_postdata( $post_id ) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename(__FILE__) ) )
return $post_id;
// Check permissions
if ( 'page' == $_POST['post_type'] )
{
if ( !current_user_can( 'edit_page', $post_id ) )
return $post_id;
}
else
{
if ( !current_user_can( 'edit_post', $post_id ) )
return $post_id;
}
// OK, we're authenticated: we need to find and save the data
$mydata = $_POST['myplugin_new_field'];
update_post_meta('my_field', $mydata);
return $mydata;
}
Наконец, примечание о функции сохранения.Если вы называете свои поля ввода значением массива (например, docs[]
), значение $ _POST ['docs'] будет массивом.К счастью, функция WP * update_post_meta
полностью настроена на обработку входов массива.Он будет сериализован и введен.Использование совместимой функции get_post_meta
приведет к десериализации массива для использования и подготовки данных.
Удачи!