Pregunta

Mi objetivo era simple --- para crear un tipo de mensaje personalizado con un METABOX personalizada con una simple lista desplegable de los términos de la taxonomía en lugar de la utilización de las etiquetas o las casillas de verificación abajo. La razón era asegurar que el editor sólo puede seleccionar un solo término de la lista taxonomía.

Después de ensayo y error que finalmente logró encontrar una manera de utilizar las excelentes herramientas de creación METABOX que estoy usando desde WP-Alchemy (http://farinspace.com/wpalchemy-metabox/) para crear mi METABOX y lo han mostrar las condiciones de las mismas en una lista desplegable.

El problema que estoy teniendo es que me parece que no puede obtener una nueva selección en el menú desplegable para guardar el valor seleccionado.

Para que quede claro ... es importante que sólo un único término se asocia con cada mensaje en este tipo de envío personalizado lo que significa que cada vez que un valor diferente se seleccione en el menú desplegable y el puesto se guarda que necesita para asegurar la selección previa es no registrado.

Como se ha mencionado que actualmente tiene que mostrar la lista de términos en una lista desplegable y también tengo que mostrar correctamente cualquier término que podría estar asociado.

Sólo el ahorro de los nuevos valores es donde estoy teniendo problemas.

A partir de una amplia investigación que "parece" como la solución implica el uso de los wordpress "wp_set_post_terms" funciones que se explican más aquí: http://codex.wordpress.org/Function_Reference/wp_set_post_terms Sin embargo, estoy seguro de cómo utilizar correctamente para lograr el resultado deseado.

A continuación he incluido el código Estoy utilizando. Es muy posible que hay una mejor manera de hacer esto y yo apreciaría cualquier sugerencia que ustedes podrían tener también podría asegurar que los "controles" aplicables se están haciendo para asegurar que los datos no pueden ser insertados por los usuarios que no están autorizadas.

ARCHIVO functions.php (muestra la creación de la costumbre Post Tipo y taxonomía ABAJO.

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

Es aquí donde estoy registrando la taxonomía que estoy tratando de trabajar con

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

Es el resto del código que estoy utilizando en las funciones de archivo y el código para crear la METABOX Basado de WPALECHEMY. En este intento Traté de incluir 'save_filter' => "wp_set_post_terms ($ post-> ID, 'tema')", con la esperanza de que esto guardar los datos aplicables, pero no fue así.

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

I DEBERÍA también señalan que DIMAS encima en WPALECHMEY SOLO añadido algunos nuevos código en HIS 1.3.2 VERSIÓN DE GitHub que permite que el ARRIBA código para incluir A

'save_filter' => "custom-function", 

Este código le permite crear una función personalizada o supongo que llamar a una función personalizada, que es ejecutado al presionar el botón de publicar lo que tal vez es la mejor manera de guardar los datos?

En cualquier caso, yo estoy utilizando el siguiente código para el METABOX personalizado para mostrar la lista desplegable real que muestra los términos de la taxonomía.

<?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>

Estoy asumiendo guardar los datos debe ser simple como el pastel pero supongo que estoy confundiendo a mí mismo en la forma de lograr esto.

Como se mencionó Le agradecería si usted podría también proporcionar sugerencias sobre el código para garantizar los controles necesarios se realizan para asegurar que los datos se guarda correctamente y sólo ser las personas autorizadas correctamente.

debe gracias de antemano!

¿Fue útil?

Solución

Para cualquier persona que esté interesada, respondí esta pregunta en un poste diferente:

Términos ahorro Taxonomía

Licenciado bajo: CC-BY-SA con atribución
scroll top