Intereting Posts
Основной вопрос PHP (отображение заголовка сообщения над миниатюрами) Время публикации публикации / публикации не достаточно точное Получить изображение из галереи сообщения Получите имя описание категории ссылок Сложность создания и обработки сложного типа сообщений Вложение фрагментов кода в сообщениях с отступом Изменение сообщений на странице и смещение с помощью pre_get_posts Исключить категорию из раскрывающегося списка Как отобразить цену, включая налог с форматированием? Запросить сообщения из идентификатора терминов детской таксономии Показывать поля ACF только на определенной странице в бэкэнд Как правильно добавить мои стили, переопределяющие текущие стили Проблема WP_query – побочные результаты Как сделать меню боковой панели администратора всегда сворачиваться по коду Избранные изображения и Facebook

Пользовательские метаполя для специального настраиваемого типа

У меня есть специальный curiculum типа curiculum и метабокс, который сохраняет ценность в настраиваемом поле. Однако это настраиваемое поле добавляется к другому настраиваемому типу сообщений (созданному плагином для электронной коммерции) wpsc-product .

Это фрагмент кода, который связан с обменом. Вопрос в том, как предотвратить добавление пользовательского поля в wpsc-product ?

 /* Curiculum Date Metabox */ function curiculum_date_fields() { if ( get_post_type() == 'curiculum'): global $post; $custom = get_post_custom( $post->ID ); $curiculum_date_from = $custom["curiculum_date_from"][0]; ?> <p> <label for="curiculum_date_from">Date:</label><br /> <input size="32" type="text" name="curiculum_date_from" id="curiculum_date_from" value="<?php echo $curiculum_date_from; ?>" /> <?php endif; } function add_curiculum_date_box() { add_meta_box("curiculum_date_info", "Event Date", "curiculum_date_fields", "curiculum", "side"); } function save_curiculum_date() { global $post; update_post_meta($post->ID, "curiculum_date_from", $_POST["curiculum_date_from"]); } add_action('admin_init', 'add_curiculum_date_box'); add_action('save_post', 'save_curiculum_date'); add_action('publish_post', 'save_curiculum_date'); 

EDIT: Код для curiculum пользовательских сообщений:

 add_action('init', 'curiculum_register'); function curiculum_register() { $labels = array( 'name' => _x('CV Events', 'post type general name'), 'singular_name' => _x('CV Event', 'post type singular name'), 'add_new' => _x('Add New', 'testimonials item'), 'add_new_item' => __('Add New Event'), 'edit_item' => __('Edit Event'), 'new_item' => __('New Event'), 'view_item' => __('View Event'), 'search_items' => __('Search Events'), 'not_found' => __('Nothing found'), 'not_found_in_trash' => __('Nothing found in Trash'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => 7, 'exclude_from_search' => true, 'supports' => array('title','editor', 'custom-fields') ); register_post_type( 'curiculum' , $args ); } 

Solutions Collecting From Web of "Пользовательские метаполя для специального настраиваемого типа"

EDIT : Я также рекомендую вам использовать nonces для проверки вашего поля перед сохранением.

EDIT2 : Nonces

Как раз перед полем, определите nonce:

 wp_nonce_field( 'curiculum_meta_box_nonce', 'meta_box_nonce' ); 

Ваша функция сохранения неверна, используйте вместо этого:

  function save_curiculum_date($postid) { //stop if autosave if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // if our nonce isn't there, or we can't verify it, stop if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'curiculum_meta_box_nonce' ) ) return; // if our current user can't edit this post, stop if( !current_user_can( 'edit_post' ) ) return; update_post_meta($postid, "curiculum_date_from", $_POST["curiculum_date_from"]); } 

Функция полей неверна, используйте вместо этого:

 $curiculum_date_from = get_post_meta(get_the_ID(),'curiculum_date_from',true); ?> <p> <label for="curiculum_date_from">Date:</label><br /> <input size="32" type="text" name="curiculum_date_from" id="curiculum_date_from" value="<?php echo $curiculum_date_from; ?>" /> 

После удаления действия:

add_action('admin_init', 'add_curiculum_date_box');

Вы можете попробовать следующее:

 function add_curiculum_date_box($post){ add_meta_box( "curriculum_date_info", "Event Date", "curiculum_date_fields", $post->post_type, "side" ); } 

И добавьте это в свои CPT $ args:

'register_meta_box_cb' => 'add_curiculum_date_box'

Когда этот тип записи зарегистрирован, он также устанавливает в события движения, которые будут создавать мета-окно на соответствующем экране записи. Это избавляет от необходимости использовать отдельный вызов add_action для установки мета-поля. Он также сохраняет весь код для отдельного типа сообщения в одном месте. Функционально он выполняет то же самое, что и переменная переменной add_meta_boxes. Это просто другой способ выполнить ту же задачу.

кредиты

на случай, если вам не удастся найти простое, но элегантное решение для этого, или если кто-то еще наткнулся на это (или подобную проблему), с помощью WordPress Creation Kit от пользователей wordpress.org можно легко создать CPT или добавить мета- убирает их (если есть какие-либо сомнения, не стесняйтесь читать описание плагина).