Intereting Posts
Как получить сообщения на другом языке из WPML Plugin Стандарты кодирования сэндвича Использование ajax при редактировании страницы редактирования категории? Невозможно отобразить заголовки таблиц в ответном расположении таблицы Есть ли способ увеличить скорость этого запроса? посты WP 4.7 сломал get_post_type или требует явного целочисленного значения? Пользовательские значения метаданных отправляются с помощью автосохранения Объединение двух баз данных: OLD SITE -> NEW SITE Как получить текущий образ в WP_image_editor? Разрешить не-админам доступ к странице темы «Настроить» как я могу установить пост-автора сообщения, которое я только что создал с помощью php? Следующие методы оптимизации производительности Web для вывода статических и динамических css Запретить применение add_filter к страницам wp-admin Способы управления промежуточными и производственными сайтами WordPress?

Серьезно застрял с некоторыми обычными мета-коробками / плагинами

Я работаю над небольшим плагином – для этого нужно добавить несколько мета-полей для всех настраиваемых типов сообщений. Я пробовал цикл через мой массив настраиваемых типов портов различными способами, но я продолжаю получать ошибки, которые я уже назвал функциями, такими как add_meta_box. Скрипт ниже – мое последнее усилие, это не сохранение значений из последних трех мета-полей (только первый).

Я действительно хочу уменьшить размер этого. Я использую класс, в соответствии с некоторыми материалами, которые я изучил в плагине на чистых машинах. Он работает нормально для других вещей, но PHP не моя сила, и поэтому я чертовски застрял! Может ли кто-нибудь помочь мне пройти или передать массив пользовательских типов сообщений в функцию add_meta_box?

Вот часть соответствующего сценария, жаль, что это большой большой.

//meta boxes... public function meta_boxes(){ //load the array into a var $all_post_types = $this->post_types; $just_trades = array(); foreach($all_post_types as $trade){ $just_trades[] = $trade['post_type_name']; } //call the action add_action('add_meta_boxes','make_meta_box'); function make_meta_box(){ //make array of all meta boxes we want to show.. add_meta_box('landline','Landline Phone Number','landline_function',$just_trades);//id, UI, the function, what page it shows on add_meta_box('mobile','Mobile Phone Number','mobile_function',$just_trades);//id, UI, the function, what page it shows on add_meta_box('email','Email Address','email_function',$just_trades);//id, UI, the function, what page it shows on add_meta_box('website','Website URL','website_function',$just_trades);//id, UI, the function, what page it shows on } function landline_function($post){ // function that makes the HTML for the admin UI $landline = get_post_meta($post->ID,'landline',true);// id is available, the key we want, return a single or array value. Single for this. ?> <label for="landline">Landline Number: </label> <input type="text" class="widefat" name="landline" id="landline" value="<?php echo $landline;?>" /> <?php } add_action('save_post','save_landline'); function save_landline($id){ // ID is available by default if(isset($_POST['landline'])){ update_post_meta($id,'landline',strip_tags($_POST['landline'])); } } function mobile_function($post){ // function that makes the HTML for the admin UI $mobile = get_post_meta($post->ID,'mobile',true);// id is available, the key we want, return a single or array value. Single for this. ?> <label for="mobile">Mobile Number: </label> <input type="text" class="widefat" name="mobile" id="mobile" value="<?php echo $mobile;?>" /> <?php } add_action('save_post','save_mobile'); function save_mobile($id){ // ID is available by default if(isset($_POST['mobile'])){ update_post_meta($id,'mobile',strip_tags($_POST['mobile'])); } } function email_function($post){ // function that makes the HTML for the admin UI $email = get_post_meta($post->ID,'email',true);// id is available, the key we want, return a single or array value. Single for this. ?> <label for="email">Email: </label> <input type="text" class="widefat" name="email" id="email" value="<?php echo $email;?>" /> <?php } add_action('save_post','save_email'); function save_email($id){ // ID is available by default if(isset($_POST['email'])){ update_post_meta($id,'email',strip_tags($_POST['email'])); } } function website_function($post){ // function that makes the HTML for the admin UI $website = get_post_meta($post->ID,'website',true);// id is available, the key we want, return a single or array value. Single for this. ?> <label for="website">Website: </label> <input type="text" class="widefat" name="website" id="website" value="<?php echo $website;?>" /> <?php } add_action('save_post','save_website'); function save_website($id){ // ID is available by default if(isset($_POST['website'])){ update_post_meta($id,'website',strip_tags($_POST['website'])); } } } 

.. Любая помощь была бы замечательной. Дан.

Solutions Collecting From Web of "Серьезно застрял с некоторыми обычными мета-коробками / плагинами"

Вот простой пример, который добавляет мета-поле для всех типов публичных сообщений:

 // All public post types $post_types = array_merge( array('page' => 'page', 'post' => 'post'), get_post_types(array('_builtin' => FALSE)), ); // Add meta box for each post type foreach ($post_types as $post_type) { add_meta_box('id', 'title', 'callback', $post_type); } 

WP Codex: get_post_types() , add_meta_box() .

переработал какой-то материал. добавлено действие nonce и некоторые другие разрешения для действия save_post. объединил все мета в 1 массив и объединил все поля в 1 мета-окно. лучшая идея? кто знает, но это почти так же, как метабокс, над которым я сейчас работаю. Надеюсь, поможет.

 //call the action add_action('add_meta_boxes','make_meta_box'); function make_meta_box(){ // All public post types $post_types = array_merge( array('page' => 'page', 'post' => 'post'), get_post_types(array('_builtin' => FALSE)) ); // Add meta box for each post type foreach ($post_types as $post_type) { //make array of all meta boxes we want to show.. add_meta_box('contact','Contact Information','contact_function',$post_type);//id, UI, the function, what page it shows on } } function contact_function($post){ // function that makes the HTML for the admin UI // first thing we'll need is a nonce ?> <input type="hidden" name="contact_noncename" value="<?php echo wp_create_nonce( "_contact_meta" );?>" /> <?php $meta = get_post_meta($post->ID,'_contact_meta',true); // landline phone number $landline = isset($meta['landline']) ? $meta['landline'] : ""; ?> <label for="landline">Landline Number: </label> <input type="text" class="widefat" name="_contact_meta[landline]" id="landline" value="<?php echo $landline;?>" /> <?php // mobile phone number $mobile = isset($meta['mobile']) ? $meta['mobile'] : ""; ?> <label for="mobile">Mobile Number: </label> <input type="text" class="widefat" name="_contact_meta[mobile]" id="mobile" value="<?php echo $mobile;?>" /> <?php // email address $email = isset($meta['email']) ? $meta['email'] : ""; ?> <label for="email">Email: </label> <input type="text" class="widefat" name="_contact_meta[email]" id="email" value="<?php echo $email;?>" /> <?php // website $website = isset($meta['website']) ? $meta['website'] : ""; ?> <label for="website">Website: </label> <input type="text" class="widefat" name="_contact_meta[website]" id="website" value="<?php echo $website;?>" /> <?php } add_action('save_post','save_contact'); function save_contact($post_id, $post){ // ID is available by default if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post->ID; if ( !wp_verify_nonce( $_POST['contact_noncename'], "_contact_meta" )) 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; } // sanitize some things : could do a foreach if you want to strip_tags from all $_POST['_contact_meta']['landline'] = strip_tags($_POST['_contact_meta']['landline']); $_POST['_contact_meta']['mobile'] = strip_tags($_POST['_contact_meta']['mobile']); $_POST['_contact_meta']['email'] = strip_tags($_POST['_contact_meta']['email']); $_POST['_contact_meta']['website'] = strip_tags($_POST['_contact_meta']['website']); update_post_meta($post_id, '_contact_meta', $_POST['_contact_meta']); }