Intereting Posts
Как добавить пользовательские цветовые образцы для всех редакторов WYSIWYG? WP Rest API V2 Custom Тип сообщения Категория Количество сообщений Сообщение об ошибке «Cheatin 'uh?» В многострочных каталогах темы Как мне не включить проигрыватель SoundCloud? Я просто хочу ссылку Не удается заставить wp_insert_post работать Могу ли я использовать темы WordPress без WordPress? Как удалить кнопку «Добавить новую» в настраиваемом типе сообщений Добавление функций к крючкам внутри класса удалить фото тег в rtmedia Есть ли способ установить активную вкладку по умолчанию на вкладке Post UI Tab pluggin? Лучшая практика, чтобы избежать меньших запросов require_once не работает Фильтрация метаданных WP_Query по числовым значениям не работает Перемещенный сайт, старые ссылки на страницах, все еще указывающие на старый хост Как я могу настроить пользовательский порядок, используя эту функцию

Динамическое создание настраиваемых элементов типа сообщения и их обновление

Я создаю плагин, который использует настраиваемый тип сообщения. Мой вопрос – две складки:

(1) после активации моего плагина, как мне создать элементы моих пользовательских типов сообщений. Например: если мой тип сообщения был … «Лучшие рестораны». Я хочу создать 10 пользовательских элементов сообщений, поскольку мой плагин будет нуждаться в этой информации. Как мне это сделать? Есть ли функция, которую я могу использовать, которая добавляет элемент сообщения вместе со своими пользовательскими данными?

и (2) Когда мой плагин обновлен, скажем, я выпустил новую версию, что лучший способ изменить этот список? Я думал об удалении всех элементов с определенным типом сообщения, а затем вставлял новые, но это может быть излишним.

Заранее спасибо.

Solutions Collecting From Web of "Динамическое создание настраиваемых элементов типа сообщения и их обновление"

Да @wyrfel прав, вы используете wp_insert_post() для создания своих сообщений. Используя пример из 50 штатов США, я создал код, который вы можете зайти в functions.php вашей темы, чтобы увидеть, как он работает (хотя вы, вероятно, не захотите вызывать add_states_if_not_yet_added() для каждой загрузки страницы, но этот пример проще показать это так):

 <?php add_action('init','init_us_states'); function init_us_states() { register_us_states_post_type(); add_states_if_not_yet_added(); } function add_states_if_not_yet_added() { foreach(get_50_us_states() as $state_code => $state_name) { if (!get_page_by_path($state_code,OBJECT,'us-state')) wp_insert_post(array( 'post_type' => "us-state", 'post_content' => "Information about {$state_name}", 'post_title' => $state_name, // ie 'Georgia' 'post_name' => $state_code, // ie 'GA'; this is for the URL 'post_status' => "publish", 'comment_status' => "closed", 'ping_status' => "closed", 'post_parent' => "0", )); } } function register_us_states_post_type() { register_post_type('us-state',array( 'labels' => array( 'name' => _x('States', 'post type general name'), 'singular_name' => _x('State', 'post type singular name'), 'add_new' => _x('Add New', 'us-state'), 'add_new_item' => __('Add New State'), 'edit_item' => __('Edit State'), 'new_item' => __('New State'), 'view_item' => __('View State'), 'search_items' => __('Search States'), 'not_found' => __('No States found'), 'not_found_in_trash' => __('No States found in Trash'), 'parent_item_colon' => '', 'menu_name' => 'States' ), 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array('slug'=>'states'), 'capability_type' => 'post', 'has_archive' => 'states', 'hierarchical' => false, 'supports' => array('title','editor','author','thumbnail','excerpt') )); } function get_50_us_states() { return array( 'AL' => 'Alabama', 'AK' => 'Alaska', 'AZ' => 'Arizona', 'AR' => 'Arkansas', 'CA' => 'California', 'CO' => 'Colorado', 'CT' => 'Connecticut', 'DE' => 'Delaware', 'FL' => 'Florida', 'GA' => 'Georgia', 'HI' => 'Hawaii', 'ID' => 'Idaho', 'IL' => 'Illinois', 'IN' => 'Indiana', 'IA' => 'Iowa', 'KS' => 'Kansas', 'KY' => 'Kentucky', 'LA' => 'Louisiana', 'ME' => 'Maine', 'MD' => 'Maryland', 'MA' => 'Massachusetts', 'MI' => 'Michigan', 'MN' => 'Minnesota', 'MS' => 'Mississippi', 'MO' => 'Missouri', 'MT' => 'Montana', 'NE' => 'Nebraska', 'NV' => 'Nevada', 'NH' => 'New Hampshire', 'NJ' => 'New Jersey', 'NM' => 'New Mexico', 'NY' => 'New York', 'NC' => 'North Carolina', 'ND' => 'North Dakota', 'OH' => 'Ohio', 'OK' => 'Oklahoma', 'OR' => 'Oregon', 'PA' => 'Pennsylvania', 'RI' => 'Rhode Island', 'SC' => 'South Carolina', 'SD' => 'South Dakota', 'TN' => 'Tennessee', 'TX' => 'Texas', 'UT' => 'Utah', 'VT' => 'Vermont', 'VA' => 'Virginia', 'WA' => 'Washington', 'WV' => 'West Virginia', 'WI' => 'Wisconsin', 'WY' => 'Wyoming', ); } 

И вот некоторые скриншоты, показывающие это в использовании:

Страница WordPress 3.1 для СШАСписок штатов США на странице архива WordPress 3.1Список типов сообщений штата США в WordPress 3.1 admin

Для (1): используйте wp_insert_post() .

Для (2): Одна идея заключалась бы в том, чтобы вставить сообщения, как указано выше, и сохранить идентификаторы вставки в массиве. Затем сохраните этот массив в качестве опции. При обновлении прочитайте эту опцию и сделайте «wp_update_post ()» на этих десяти постах, у которых теперь есть идентификатор.