Пользовательский Метабокс с раскрывающимся списком Таксономии - Проблема сохранения


Моя цель была проста- создать пользовательский тип записи с пользовательским метабоксом с простым выпадающим списком терминов таксономии вместо использования тегов или флажков. Причина заключалась в том, чтобы редактор мог выбрать только один термин из списка таксономии.

После проб и ошибок мне, наконец, удалось найти способ использовать отличные инструменты для создания метабоксов, которые я использую в WP-Alchemy(http://farinspace.com/wpalchemy-metabox /) для создания моего метабокс и попросите его отобразить применимые термины в раскрывающемся списке.

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

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

Как уже упоминалось, я в настоящее время он отображает список терминов в раскрывающемся списке, и у меня также есть правильное отображение любого термина, который может быть связан.

У меня проблемы только с сохранением новых значений.

Из обширных исследований "кажется", что решение предполагает использование функций wordpress "wp_set_post_terms", которые далее объясняются здесь: http://codex.wordpress.org/Function_Reference/wp_set_post_terms Однако я не уверен, как правильно его использовать, чтобы добиваюсь желаемого результата.

Ниже я включил код, который я использую. Вполне возможно, что есть лучший способ сделать это, и я был бы признателен за любые предложения, которые у вас, ребята, могут возникнуть, также могли бы гарантировать, что соответствующие "проверки" выполняются, чтобы гарантировать, что данные не могут быть вставлены пользователями, которые не авторизованы.

FUNCTIONS.PHP ФАЙЛ (НИЖЕ ПОКАЗАНО СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ТИПА ЗАПИСИ И ТАКСОНОМИИ.

//////////////////////////////////////////////////////////////////////////////
// CUSTOM POSTTYPE FOR -- SERVICES  
//////////////////////////////////////////////////////////////////////////////

add_action('init', 'services');
function services() {
 register_post_type('services', array(
  'labels' => array(
   'name'   => __('Services'),
   'singular_label'  => __('Service'),
   'new_item'   => __('Add a Service'),
   'add_new'   => __('Add a Service'),
   'add_new_item'  => __('Add a Service'),
   'edit'   => __('Edit Service'),
   'edit_item'   => __('Edit Service'),
   'view'   => __('View Service'),
   'view_item'   => __('View Service'),
   'search_items'  => __('Search Services'),
   'not_found'   => __('No Services Found'),
   'not_found_in_trash' => __('No Services Found in Trash'),
       'parent_item'  => __('Parent Service'),
   'parent_item_colon' => __('Parent Service:')
   ),
  'can_export'    => true,
  'menu_position'   => 7,
  'public'    => false,
  'show_ui'    => true,
  'publicly_queryable'  => true,
  'hierarchical'   => true,
  'query_var'    => true,
  'capability_type'   => 'post',
  'exclude_from_search'  => false,
  'supports' => array(
   'title',
   'editor',
   'revisions',
   'page-attributes'
   ),
  'rewrite' => array( 
   'slug'   => 'disability-services', 
   'with_front'   => false
   )
 ));
}

ВОТ ГДЕ Я РЕГИСТРИРУЮ ТАКСОНОМИЮ, КОТОРОЙ Я ЯВЛЯЮСЬ ПОПЫТКА РАБОТАТЬ С

// CUSTOM TAXONOMY METABOX POSTTYPE - AGE GROUPS
   register_taxonomy('theme', array('services'), array(
    'hierarchical'          => false, 
    'singular_label'            => 'Age Group', 
    'query_var'                 => 'theme',
    'public'                => true,
    'show_ui'               => true,
    'show_tagcloud'             => false,
    'show_in_nav_menus'             => true,    
    'rewrite'               => array( 'slug' => 'age-groups', 'with_front' => false ),
    'labels' => array(
        'name'          => __( 'Age Groups' ),
        'singular_name'         => __( 'Age Groups' ),
        'search_items'      => __( 'Search Age Groups' ),
        'all_items'             => __( 'All Age Groups' ),
        'parent_item'       => __( 'Parent Age Group' ),
        'parent_item_colon'         => __( 'Parent Age Group:' ),
        'edit_item'             => __( 'Edit Age Group' ), 
        'update_item'       => __( 'Update Age Group' ),
        'add_new_item'      => __( 'Add Age Group' ),
        'new_item_name'         => __( 'New Name of Age Group' ),
        'popular_items'         => __( 'Popular Age Groups' ),
        'separate_items_with_commas'=> __( 'Separate Age Groups with commas' ),
        'add_or_remove_items'   => __( 'Add or remove Age Groups' ),
        'choose_from_most_used' => __( 'Select Popular Age Groups' ), 
        ),
   ));
   wp_insert_term('Kids', 'theme');
   wp_insert_term('Teens', 'theme');
   wp_insert_term('Adults', 'theme');

ЭТО ОСТАТОК КОДА, КОТОРЫЙ Я ИСПОЛЬЗУЮ В ФАЙЛЕ ФУНКЦИЙ, И КОД ДЛЯ СОЗДАНИЯ МЕТАБОКСА НА ОСНОВЕ WPALECHEMY. В этой попытке я попытался включить "save_filter" => "wp_set_post_terms($post->идентификатор, "тема")", надеясь, что это сохранит соответствующие данные, но этого не произошло.

// CUSTOM METABOX POSTTYPE - SERVICE DETAILS
   $custom_metabox_service_details = new WPAlchemy_MetaBox(array (
    'id'        => '_service_details-metaboxes',        // underscore prefix hides fields from the custom fields area
    'title'     => 'Age Groups',            // title added automatically to the custom metabox
    'types'     => array('services'),           // added only for custom post type "name-of-post-type" can also be "page" or "post"
    'context'   => 'normal',                    // same as above, defaults to "normal" but can use "advanced" or "side"
    'priority'  => 'high',                  // same as above, defaults to "high" but can use "low" as well
    'mode'  => WPALCHEMY_MODE_EXTRACT,
    'save_filter' => "wp_set_post_terms( $post->ID, 'theme' )",
    'template'  => TEMPLATEPATH . '/admin-metabox/service_details-metaboxes.php'  // contents for the meta box
    ));

Я ТАКЖЕ ДОЛЖЕН ОТМЕТИТЬ, ЧТО ДИМАС ИЗ WPALECHMEY ТОЛЬКО ЧТО ДОБАВИЛ НОВЫЙ КОД В СВОЮ ВЕРСИЮ GITHUB 1.3.2, КОТОРАЯ ПОЗВОЛЯЕТ ВЫШЕУКАЗАННОМУ КОДУ ВКЛЮЧАТЬ

'save_filter' => "custom-function", 

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

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

<?php 
// This function gets called in edit-form-advanced.php
echo '<input type="hidden" name="taxonomy_noncename" id="taxonomy_noncename" value="' . wp_create_nonce( 'taxonomy_theme' ) . '" />';

// Get all theme taxonomy terms
$themes = get_terms('theme', 'hide_empty=0'); 
?>

<select name='post_theme' id='post_theme'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
<?php $names = wp_get_object_terms($post->ID, 'theme'); ?>
<option class='theme-option' value='' <?php if (!count($names)) echo "selected";?>>None</option>
<?php foreach ($themes as $theme) {
 if (!is_wp_error($names) && !empty($names) && !strcmp($theme->slug, $names[0]->slug)) 
 echo "<option class='theme-option' value='" . $theme->slug . "' selected>" . $theme->name . "</option>\n"; 
 else
 echo "<option class='theme-option' value='" . $theme->slug . "'>" . $theme->name . "</option>\n"; 
}
?>
</select>

Я предполагаю, что сохранение данных должно быть простым, как пирог, но, думаю, я путаю себя в том, как это сделать.

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

Должен заранее поблагодарить!

Author: NetConstructor.com, 2010-09-07

1 answers

Для всех, кому интересно, я ответил на этот вопрос в другом посте:

Сохранение Терминов Таксономии

 1
Author: NetConstructor.com, 2017-04-13 12:37:53