Advertisement
miriamdepaula

WordPress: Custom Post Type, Taxonomy and Metabox

Nov 20th, 2012
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.44 KB | None | 0 0
  1. <?php
  2. // 1) Registro o meu post type "documento"
  3. function wpmidia_register_cpt_documento() {
  4.     $labels = array(
  5.         'name' => _x( 'Documentos', 'documento' ),
  6.         'singular_name' => _x( 'Documento', 'documento' ),
  7.         'add_new' => _x( 'Adicionar novo', 'documento' ),
  8.         'all_items' => _x( 'Documentos', 'documento' ),
  9.         'add_new_item' => _x( 'Adicionar novo documento', 'documento' ),
  10.         'edit_item' => _x( 'Editar documento', 'documento' ),
  11.         'new_item' => _x( 'Novo documento', 'documento' ),
  12.         'view_item' => _x( 'Ver documento', 'documento' ),
  13.         'search_items' => _x( 'Procurar documentos', 'documento' ),
  14.         'not_found' => _x( 'Nenhum documento encontrado', 'documento' ),
  15.         'not_found_in_trash' => _x( 'Nenhum documento encontrado na lixeira', 'documento' ),
  16.         'parent_item_colon' => _x( 'Documento pai:', 'documento' ),
  17.         'menu_name' => _x( 'Documentos', 'documento' ),
  18.     );
  19.  
  20.     $args = array(
  21.         'labels' => $labels,
  22.         'hierarchical' => false,
  23.         'public' => true,
  24.         'show_ui' => true,
  25.         'show_in_menu' => true
  26.     );
  27.  
  28.     register_post_type( 'documento', $args );
  29. }
  30. add_action( 'init', 'wpmidia_register_cpt_documento' );
  31.  
  32. // 2) Registro minha taxonomia "categorias"
  33. function wpmidia_register_taxonomy_categorias() {
  34.  
  35.     $labels = array(
  36.         'name' => _x( 'Categorias', 'categorias' ),
  37.         'singular_name' => _x( 'Categoria', 'categorias' ),
  38.         'search_items' => _x( 'Procurar categorias', 'categorias' ),
  39.         'popular_items' => _x( 'Categorias mais usadas', 'categorias' ),
  40.         'all_items' => _x( 'Todas as categorias', 'categorias' ),
  41.         'parent_item' => _x( 'Categoria pai', 'categorias' ),
  42.         'parent_item_colon' => _x( 'Categoria pai:', 'categorias' ),
  43.         'edit_item' => _x( 'Editar categoria', 'categorias' ),
  44.         'update_item' => _x( 'Atualizar categoria', 'categorias' ),
  45.         'add_new_item' => _x( 'Adicionar nova categoria', 'categorias' ),
  46.         'new_item_name' => _x( 'Nova categoria', 'categorias' ),
  47.         'separate_items_with_commas' => _x( 'Separar categorias com vírgulas', 'categorias' ),
  48.         'add_or_remove_items' => _x( 'Adicionar ou remover categorias', 'categorias' ),
  49.         'choose_from_most_used' => _x( 'Escolha entre as categorias mais usadas', 'categorias' ),
  50.         'menu_name' => _x( 'Categorias', 'categorias' ),
  51.     );
  52.  
  53.     $args = array(
  54.         'labels' => $labels,
  55.         'public' => true,
  56.         'show_in_nav_menus' => true,
  57.         'show_ui' => true,
  58.         'show_tagcloud' => true,
  59.         'hierarchical' => true,
  60.         'rewrite' => true,
  61.         'query_var' => true,
  62.    
  63.     //opcional: se quiser usar sistema de permissões
  64.     'capabilities' => array(
  65.         'manage_terms'=>'manage_categorias',
  66.         'edit_terms'=>'edit_categorias',
  67.         'delete_terms'=>'delete_categorias',
  68.         'assign_terms'=>'assign_categorias'
  69.     )
  70.     );
  71.  
  72.     register_taxonomy( 'categorias', array('documento'), $args );
  73. }
  74. add_action( 'init', 'wpmidia_register_taxonomy_categorias', 0 );
  75.  
  76. // 3) Removo o metabox padrão da taxonomia "categorias" que aparece na lateral direita do cadastro dos posts
  77. function wpmidia_remove_tax_metabox() {
  78.     remove_meta_box('categoriasdiv', 'documento', 'normal');   
  79. }
  80. add_action( 'admin_menu' , 'wpmidia_remove_tax_metabox' );
  81.  
  82. // 4) Crio um metabox para inserir a listagem de categorias dentro do contexto do cadastramento de posts
  83. add_action( 'add_meta_boxes', 'wpmidia_categoria_meta_box' );
  84.  
  85. function wpmidia_categoria_meta_box()
  86. {
  87.     add_meta_box( 'wpmidia_categoria_meta_box', 'Detalhes do Documento', 'wpmidia_categoria_meta_box_setup', 'documento', 'advanced', 'high' );
  88. }
  89.  
  90. function wpmidia_categoria_meta_box_setup(){
  91.    
  92.     global $post;
  93.    
  94.     wp_nonce_field( plugin_basename( __FILE__ ), 'wpmidia_info_meta_box_nonce_name' );
  95.        
  96.     $doc_categoria = get_post_meta( $post->ID, '_doc_categoria', true);
  97.    
  98. ?> 
  99.     <table class="form-table">
  100.  
  101.         <tr>
  102.                 <td width="15%"><label for="doc_categoria"><strong>Categoria:</strong></label></td>
  103.                     <td>
  104.                         <select id="doc_categoria" name="doc[categoria]" class="req">
  105.                             <option value="0">-Selecione-</option>  
  106.                         <?php
  107.                     $categorias = get_terms( 'categorias', array( 'hide_empty' => 0 ) );
  108.                         if($categorias){
  109.                             foreach($categorias as $categoria){
  110.                                 echo '<option value="'.$categoria->term_id.'" '.selected($doc_categoria, $categoria->term_id, false). '>'.$categoria->name.'</option>';
  111.                             }
  112.                         }              
  113.             ?>              
  114.                         </select>
  115.                     </td>        
  116.             </tr>  
  117.         </table>
  118.  
  119. <?php }
  120.  
  121. // salvando os dados do metabox
  122. function wpmidia_meta_box_save( $post_id ) {
  123.    
  124.     if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
  125.       return;
  126.      
  127.     if ( !wp_verify_nonce( $_POST['wpmidia_info_meta_box_nonce_name'], plugin_basename( __FILE__ ) ) )
  128.       return;
  129.    
  130.     //check permissions
  131.         if ( ! current_user_can( 'edit_post', $post_id ) ) return $post_id;
  132.    
  133.     $doc = $_POST['doc'];      
  134.     update_post_meta($post_id, '_doc_categoria', $doc['categoria']);   
  135.    
  136.     //salvando como termo para que possamos utilizar o sistema nativo de templates do WordPress taxonomy.php ou taxonomy-categorias.php
  137.     wp_set_post_terms( $post_id, array($doc['categoria']), 'categorias' ); 
  138.        
  139.         return $post_id;
  140.    
  141. }
  142. // save metabox
  143. add_action( 'save_post', 'wpmidia_meta_box_save' );
  144.  
  145. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement