С выпуском WordPress 3.0 был представлен целый ряд функций, в том числе слияние WordPress MU с основной кодовой базой (позволяющее управлять несколькими сайтами из одной установки WordPress), а также добавление пользовательских типов записей. Функция, которая существует уже некоторое время, но которая теперь стала более интересной в результате появления новых пользовательских типов записей, — это пользовательские панели записи .
Пользовательская панель записи — это блок полей формы (входные данные, флажки, переключатели, текстовые области и т. Д.), Который отображается при написании или редактировании сообщения. Поля связаны с пользовательскими полями, которые вы добавили в сообщения.
Хотя панель пользовательских полей по умолчанию отображается на странице «Редактировать сообщение», ее можно использовать непросто, особенно если вы хотите ввести достаточное количество данных. Вот тут-то и появляются пользовательские панели записи: они позволяют создавать гладкие панели, позволяющие пользователям вводить всю дополнительную информацию, которую вы хотите получить для публикации.
Например, давайте создадим пользовательский тип записи под названием «Книги». Книги будут иметь заголовок и описание (панели заголовка и основного содержимого блога), но им также потребуется некоторая дополнительная информация для правильного отображения: автор и ISBN (уникальный числовой коммерческий идентификатор книги). Итак, в файл functions.php
add_action( 'init', 'create_book_type' );
function create_book_type() {
register_post_type( 'books',
array(
'labels' => array(
'name' => __( 'Books' ),
'singular_name' => __( 'Book' )
),
'public' => true,
)
);
}
Что это делает?
add_action( 'init', 'create_book_type' );
говорит WordPress запустить наш код в действии init
register_post_type()
Теперь, если вы просматриваете панель администратора, вы увидите новую панель Книги в левой части навигации. Мы хотим добавить пользовательскую панель записи к этому типу записи, поэтому снова в functions.php
//We set up a few things, like where your
//theme folder is, etc.
define(
'MY_WORDPRESS_FOLDER',
$_SERVER['DOCUMENT_ROOT']
);
define(
'MY_THEME_FOLDER',
str_replace("\",'/',dirname(__FILE__))
);
define(
'MY_THEME_PATH',
'/' . substr(
MY_THEME_FOLDER,
stripos(MY_THEME_FOLDER,'wp-content')
)
);
//This initializes the write panel.
add_action('admin_init','book_meta_init');
function book_meta_init() {
//This adds our CSS file,
//so our write panels look pretty.
wp_enqueue_style(
'my_meta_css',
MY_THEME_PATH . '/custom/book_panel.css'
);
//This method is the one that actually adds the
//write panel, named 'Book Information' to the
//post type 'books'
add_meta_box(
'book_meta',
'Book Information',
'book_meta',
'books',
'advanced',
'high'
);
}
// The function below links the panel
// to the custom fields
// ---------------------------------
function book_meta() {
global $post;
//The two variables.
$author = get_post_meta($post->ID,'author',TRUE);
$isbn = get_post_meta($post->ID,'isbn',TRUE);
//Call the write panel HTML
include(MY_THEME_FOLDER .
'/custom/book_information.php');
// create a custom nonce for submit
// verification later
echo '';
}
//The function below checks the
//authentication via the nonce, and saves
//it to the database.
function my_meta_save($post_id) {
// authentication checks
// make sure data came from our meta box
if(!wp_verify_nonce(
$_POST['my_meta_noncename',__FILE__)
) return $post_id;
if (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
// The array of accepted fields for Books
$accepted_fields['books'] = array(
'author',
'isbn'
);
$post_type_id = $_POST['post_type'];
//We loop through the list of fields,
//and save 'em!
foreach($accepted_fields[$post_type_id] as $key){
// Set it to a variable, so it's
// easier to deal with.
$custom_field = $_POST[$key];
//If no data is entered
if(is_null($custom_field)) {
//delete the field. No point saving it.
delete_post_meta($post_id, $key);
// If it is set (there was already data),
// and the new data isn't empty, update it.
}
elseif(isset($custom_field)
&& !is_null($custom_field))
{
// update
update_post_meta($post_id,$key,$custom_field);
//Just add the data.
} else {
// Add?
add_post_meta($post_id, $key,
$custom_field, TRUE);
}
}
return $post_id;
}
Комментарии к коду должны сделать работу этого фрагмента достаточно очевидной, поэтому перейдем к следующему шагу: добавление HTML-кода для пользовательской панели записи. В папке вашей темы создайте новый каталог с именем custom
Файл CSS должен называться book_panel.css
.book_panel .description {
display: none;
}
.book_panel label {
display: block;
font-weight: bold;
margin: 6px;
margin-bottom: 0;
margin-top: 12px;
}
.book_panel label span {
display: inline;
font-weight: normal;
}
.book_panel span {
color: #999;
display: block;
}
.book_panel textarea,
.book_panel input[type='text'] {
margin-bottom: 3px;
width: 100%;
}
.book_panel h4 {
color: #999;
font-size: 1em;
margin: 15px 6px;
text-transform:uppercase;
}
HTML-файл должен быть назван
book_information.php
<div class="book_panel">
This panel contains information
for displaying the book
<label>Author</label>
<!-- The php checks if there is existing
data to pre-fill the input fields -->
<input type="text" name="author" value="<?php
if(!empty($author)) echo $author;
?>"/>
<label>ISBN</label>
<!-- The php checks if there is
existing data to pre-fill the input fields -->
<input type="text" name="isbn" value="<?php
if(!empty($isbn)) echo $isbn;
?>"/>
</div>
Если вы выполнили эти шаги, при добавлении книги на панели «Книги» появится новый блок полей (содержащий автора и номер ISBN). Чтобы отобразить эти поля в вашей теме, вызовите сообщения через цикл и получите информацию о настраиваемых полях:
$loop = new WP_Query( array(
'post_type' => 'books',
'posts_per_page' => 10 )
);
while ($loop->have_posts()) : $loop->the_post();
the_title();
the_content();
echo 'Author: ' .
get_post_meta($post->ID, "author", true);
echo 'ISBN: ' .
get_post_meta($post->ID, "isbn", true);
endwhile;
Вот и все: ваши сообщения будут отображаться с пользовательской информацией. Если вы хотите узнать больше о WordPress, ознакомьтесь с нашим последним выпуском Build Your Own Wicked WordPress Themes . Наслаждайтесь!