Пользовательский метабокс с выпаданием таксономии - проблема экономии

wordpress.stackexchange https://wordpress.stackexchange.com/questions/1449

Вопрос

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

После проб и ошибок мне наконец-то удалось найти способ использовать превосходные инструменты создания метабокс, которые я использую из 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-> id, 'theme')", с надеждой, что это сохранит применимые данные, но это не так.

// 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
    ));

Я также должен отметить, что Dimas at at 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>

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top