Создание стандартных пользовательских полей в пользовательском интерфейсе администратора
Я добавил несколько разных custom_post_types
в свою установку Wordpress 3. Все они немного отличаются друг от друга и должны хранить уникальную информацию в custom_fields
. Но в то время как один может хранить product_id
, другой не будет. У одного будет source_url
, а у другого - нет. Вместо того, чтобы указывать моим редакторам, какие пользовательские поля следует использовать с какими пользовательскими публикациями, как я могу сделать так, чтобы каждая пользовательская публикация включала свои пользовательские поля как часть самого пользовательского интерфейса?
Если вы посетите "daily_cartoon" у вас будет экран, который запрашивает только заголовок , подпись и средства массовой информации.
Если вы посетите "daily_product", у вас будет экран, который запрашивает только заголовок , цена, резюме и т.д.
3 answers
Привет @Джонатан Сэмпсон:
Существует несколько плагинов для упрощения пользовательских типов записей , а некоторые из них также позволяют определять пользовательские поля без определенного порядка:
- Типы простых сообщений WP
- GD Пользовательские Записи И Инструменты Таксономии
- Пользовательский интерфейс пользовательского типа записи
- Простые поля
Как я уже упоминал выше, я работал над тем, что не предоставляет пользовательский интерфейс, подобный этому, вместо расширяемого API для сложных типов полей (и простых тоже). Но потратив час на то, чтобы упаковать его, я понял, что он еще не готов к распространению. Может быть, через несколько недель.
Эти плагины, перечисленные выше, должны удовлетворять вашим основным потребностям на данный момент, и я постараюсь сделать мои совместимыми с данными, хранящимися всеми из них в будущем, на случай, если вы решите использовать мои в будущем.
Вы также можете найти этот пост немного помощи тоже:
Вы можете добавить meta_boxes, чтобы в них хранились данные пользовательских полей. поскольку add_meta_box может быть установлен в соответствии с типом post_type, это позволит вам добавлять разные meta_box к разным типам сообщений.
Посмотрите на это сообщение для полного примера изменения пользовательского типа записи new/edit scree.
Недавно мне понадобилось решить очень похожую проблему при работе в рамках темы. Основа кода была взята из этого поста , и я изменил часть кода
Ниже приведена первая часть кода, которую я изменил.
add_action('init', 'limited_post_type');
function my_custom_limited_post_type()
{
$labels = array(
'name' => _x('Limited Post Type', 'post type general name'),
'singular_name' => _x('Film - DVD', 'post type singular name')
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
'show_in_nav_menus' => true
);
register_post_type('limited_post_type', $args);
}
Ниже приведена вторая часть кода, которую я изменил.
foreach ( $scope as $scopeItem ) {
switch ( $scopeItem ) {
case "post": {
// Output on any post screen
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
$output = true;
break;}
case "page": {
// Output on any page screen
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
$output = true;
break;}
case "limited_post_type": {
// Output on limited post_type onlye
if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
$output = true;
break;
}
Если хотите, пожалуйста, пришлите мне сообщение, и я с радостью отправлю вам свой functions.php файл для вашей справки. Это определенно способ сделай так, чтобы это произошло, хотя бы потому, что я пережил много ночей, когда выдергивал волосы, как ты сам.