web-development-kb-pt.site

Metabox personalizado com lista suspensa de taxonomia - problema de economia

Meu objetivo era simples: criar um tipo de postagem personalizado com um metabox personalizado com uma lista suspensa simples de termos de taxonomia, em vez de utilizar as tags ou caixas de seleção. O motivo era garantir que o editor pudesse selecionar apenas um único termo da lista de taxonomia.

Após tentativa e erro, finalmente consegui descobrir uma maneira de utilizar as excelentes ferramentas de criação de metabólitos que estou usando da WP-Alchemy (http://farinspace.com/wpalchemy-metabox/) para criar meu metabox e exibi-las. termos em uma lista suspensa.

O problema que estou tendo é que não consigo obter uma nova seleção no menu suspenso para salvar o valor selecionado.

Para ser claro ... é importante que apenas um único termo seja associado a cada postagem nesse tipo de postagem personalizada, significando que sempre que um valor diferente for selecionado no menu suspenso e a postagem for salva, será necessário garantir que a seleção anterior seja cancelada.

Como mencionei, atualmente ele exibe a lista de termos em uma lista suspensa e também exibo corretamente qualquer termo que possa estar associado.

Apenas o salvamento dos novos valores é onde estou tendo problemas.

A partir de uma extensa pesquisa, "parece" que a solução envolve o uso das funções wordpress "wp_set_post_terms", que são explicadas aqui: http://codex.wordpress.org/Function_Reference/wp_set_post_terms No entanto, não tenho certeza de como utilizá-lo corretamente para alcançar o resultado desejado.

Abaixo eu incluo o código que estou utilizando. É muito possível que exista uma maneira melhor de fazer isso e eu gostaria de receber sugestões que possam ter também garantir que as "verificações" aplicáveis ​​estejam sendo feitas para garantir que os dados não possam ser inseridos por usuários que não estejam autorizados.

FUNCTIONS.PHP FILE (MOSTRA A CRIAÇÃO DO CUSTOM POST TYPE AND TAXONOMY ABAIXO.

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

AQUI IS ONDE ESTOU REGISTRANDO A TAXONOMIA QUE ESTOU TENTE TRABALHAR COM

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

ESTE IS O PERMANENTE DO CÓDIGO QUE ESTOU USANDO NO ARQUIVO DE FUNÇÕES E O CÓDIGO PARA CRIAR A METABOX BASEADA NA WPALECHEMY. Nesta tentativa, tentei incluir 'save_filter' => "wp_set_post_terms ($ post-> ID, 'theme')", com a esperança que isso salvaria os dados aplicáveis, mas isso não aconteceu.

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

DEVO TAMBÉM OBSERVAR QUE DIMAS SOBRE AT WPALECHMEY APENAS ADICIONADO ALGUM NOVO CÓDIGO EM SUA 1.3.2 VERSÃO DE GITHUB QUE PERMITE QUE O CÓDIGO ACIMA INCLUA UM

'save_filter' => "custom-function", 

Este código permite que você crie uma função personalizada ou eu acho que chamar uma função personalizada que é executada ao apertar o botão de publicação, então talvez essa seja a melhor maneira de salvar os dados?

Em qualquer caso, estou utilizando o código a seguir para o metabox personalizado para exibir a lista suspensa real que exibe os termos de taxonomia.

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

Eu estou supondo que salvar os dados deve ser simples como torta, mas eu acho que estou me confundindo em como conseguir isso.

Como mencionado, eu agradeceria se você também pudesse fornecer sugestões sobre o código para garantir que quaisquer verificações necessárias sejam feitas para garantir que os dados sejam salvos corretamente e que apenas as pessoas corretamente autorizadas.

Deve agradecer antecipadamente!

3
NetConstructor.com

Para quem estiver interessado, respondi a esta pergunta em outro post:

Salvando Termos de Taxonomia

1
NetConstructor.com