Intereting Posts
Вызов короткого кода внутри другого обратного вызова Shortcodes Можно ли восстановить удаленных пользователей? Использование загрузчика панели мониторинга вместо FTP Постоянная ссылка настраиваемого типа добавляет имя типа сообщения до имени сообщения Добавление кнопок в wp-admin / edit-comments Пользовательский одиночный шаблон для определенной категории Как удалить текст нижнего колонтитула администратора из внутренней дочерней темы? Очистка имени файла после загрузки изображения с URL-адресом, который содержит `% 20` Вертикальные столбцы в алфавитном порядке Как я могу реализовать функцию поиска для сайта членства? Как обрабатывать данные динамической формы с повторяющимися полями? add_rewrite_rule не действует в WordPress? .htaccess не обновляется Функция типа in_category для пользовательских таксономий Изменить по умолчанию WordPress MU Blog Как я могу надежно найти URL-адрес для скрипта или другого файла?

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

Я работаю над небольшим плагином – для этого нужно добавить несколько мета-полей для всех настраиваемых типов сообщений. Я пробовал цикл через мой массив настраиваемых типов портов различными способами, но я продолжаю получать ошибки, которые я уже назвал функциями, такими как 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']); }