Как добавить пользовательские поля в пользовательский тип сообщения?


18

Итак, я зарегистрировал несколько пользовательских типов сообщений и несколько таксономий. Теперь я не могу понять, какой код мне нужен, чтобы добавить настраиваемое поле в свой тип поста.

Мне нужен выпадающий и однострочный текстовой области. Но мне также нужно иметь отдельные поля для типов записей. Итак, скажем, тип записи один имеет 3 поля, а тип записи 2 имеет 4 поля, но поля разные.

Любые советы помогут, я посмотрел на кодекс и нашел что-то, но не могу понять, что мне нужно добавить в мой functions.phpфайл


Ответы:


19

Это, вероятно, сложнее, чем вы думаете, я хотел бы изучить использование фреймворка:

Если вы хотите написать свой собственный, вот несколько достойных уроков:


1
на самом деле это было бы так сложно. Я думал, что это будет так же просто, как добавить код регистра к моим функциям, как мы делаем с типами записей и таксономиями.
xLRDxREVENGEx

1
Я добавлю еще один ответ, но он не слишком сложный. Ссылка на thinkvitamin.com отлично объясняет, как добавлять метабоксы и сохранять их. Ссылка на sltaylor.co.uk - это замечательное руководство по использованию некоторых замечательных методов кодирования. Мое предостережение - будьте осторожны при использовании save_postкрючка. Это называется в странные времена. Убедитесь, что для переменной WP_DEBUG установлено значение true, чтобы увидеть возможные ошибки, возникающие при ее использовании.
Tollmanz

1
Просто обновление, я использовал ссылку thinkvitamin, и это мне очень помогло, и это была просто прогулка по настройке пользовательских полей
xLRDxREVENGEx

25

Добавьте / отредактируйте supportsаргумент (при использовании register_post_type), чтобы включить custom-fieldsэкран редактирования поста вашего пользовательского типа поста:

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

Источник: https://codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields


2
Не могли бы вы объяснить, почему это может решить проблему?
s_ha_dum

1
Да, это работает. Кто -1 ответил. Можете ли вы взять его обратно? С уважением,
Джунаид Кадир

6
...а потом.........?
Марк

9

Хотя вам нужно добавить некоторую проверку, это действие не кажется сложным для текущей версии WordPress.

По сути, вам нужно два шага, чтобы добавить пользовательское поле в пользовательский тип сообщения:

  1. Создайте метабокс, содержащий ваше пользовательское поле
  2. Сохраните свое пользовательское поле в базу данных

Эти шаги глобально описаны здесь: http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

Пример:

Добавьте пользовательское поле с именем «function» в пользовательский тип сообщения, называемый «prefix-teammembers».

Сначала добавьте метабокс:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

Если вы добавляете или редактируете «prefix-teammembers», add_meta_boxes_{custom_post_type}ловушка срабатывает. См. Http://codex.wordpress.org/Function_Reference/add_meta_box для этой add_meta_box()функции. В приведенном выше вызове add_meta_box()есть prefix_teammembers_metaboxes_htmlобратный вызов для добавления поля формы:

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

На втором шаге у вас есть настраиваемое поле для базы данных. При сохранении save_post_{custom_post_type}ловушка запускается (начиная с версии 3.7, см .: /programming/5151409/wordpress-save-post-action-for-custom-posts ). Вы можете подключить это, чтобы сохранить ваше настраиваемое поле:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   

msgstr "почему prefix_teammembers_save_post вызывается добавлением нового?" Вы нашли ответ, я также спотыкаюсь о дополнительном триггере функции, который я не могу вспомнить?
Алекс

«Добавьте настраиваемое поле с именем« function »в настраиваемый тип записи, называемый« prefix-teammembers ».« Что означает «named»? Имя? Имя единственного числа? Метка? Может быть, это строка, используемая в качестве первого аргумента в register_post_type или, может быть, не имеет значения, что это такое, пока оно непротиворечиво
arnoldbird

1

Существуют различные плагины для пользовательских мета-блоков и пользовательских полей. Если вы посмотрите на плагин, который ориентирован на разработчиков, то вам стоит попробовать Meta Box . Это легкий и очень мощный.

Если вы ищете учебник о том, как писать код для мета-бокса / пользовательских полей, то это хорошее начало. Это первая часть серии, которая может помочь вам усовершенствовать код, чтобы его было легко расширять.


-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

Совершенное знание

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.