Crear taxonomías a medida
Las taxonomías son útiles cuando tenemos que asignar algunas características comunes a ciertos post, asi de forma sencilla podemos escoger ciertos valores especificos asi como si fuera un tag.
// === TAXONOMIAS A MEDIDA === // function mis_taxonimias_a_medida() { register_taxonomy( 'tecnologia', // nombre interno = nombre de las taxonomia para las máquinas 'trabajos', // Objeto relacionado = post, página, link, or tipos de post a medida array( 'hierarchical' => true, 'label' => 'Tecnologias empleadas', // Nombre a mostrar 'query_var' => true, // habilitar las busquedas por taxonomia 'rewrite' => array( 'slug' => 'trabajos-por-tecnologia' ), // enlace permanente slug. ) ); register_taxonomy( 'portfolio-categorias', 'trabajos', array( 'hierarchical' => false, 'label' => 'Categorías para trabajos', 'query_var' => true, 'rewrite' => array( 'slug' => 'trabajos-portfolio' ), ) ); register_taxonomy( 'agencias', 'trabajos', array( 'hierarchical' => false, 'label' => 'Agencias', 'query_var' => true, 'rewrite' => array( 'slug' => 'trabajos-agencias' ), ) ); } add_action('init', 'mis_taxonimias_a_medida', 0); |
Crear nuestros post a medida
Con la siguiente funcion podemos crear un post a medida, nos aparece en el menu de la izquierda dentro del panel de control de WordPress, en este caso lo creamos con las taxonomías a mediad. Este es el que uso para crear mi portfolio.
// === POST A MEDIDA === // function crear_post_a_medida() { register_post_type( 'trabajos', array( 'labels' => array( 'name' => __( 'Trabajos' ), 'singular_name' => __( 'trabajo' ), 'add_new_item' => 'Añadir Trabajo', 'edit_item' => 'Editar Trabajo', 'new_item' => 'Nuevo Trabajo', 'search_items' => 'Buscar Trabajos', 'not_found' => 'No se han encontrado trabajos', 'not_found_in_trash' => 'No hay ningun trabajo en la papelera', ), '_builtin' => false, 'public' => true, 'hierarchical' => false, 'taxonomies' => array( 'tecnologia', 'portfolio-categorias'), 'supports' => array( 'title', 'editor', 'excerpt' ), 'rewrite' => array( 'slug' => 'trabajos', 'with_front' => false ) ) ); } add_action( 'init', 'crear_post_a_medida' ); |
Añadir metaboxes a medida
Con la siguiente funcion podemos crear metaboxes, que son campos personalizados dentro de post a medida, páginas o post en general, necesitamos dos funciones extras, la que nos muestra el campo editable dentro del panel de control y el que guarda los datos en la base de datos.
// === META BOXES A MEDIDA === // function meta_boxes_a_medida(){ $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ; // Podemos llamarlo por el post_ID if ($post_id == '111184') { add_meta_box('nombre_del_meta_box', 'Nombre a mostar del meta box', 'meta_boxes_a_medida_print', 'page', 'normal', 'high'); } $template_file = get_post_meta($post_id,'_wp_page_template',TRUE); // Llamamamos segun la plantilla que estemos usando if ($template_file == 'page.php' ) { add_meta_box('page_primarytext', 'Título de la página','meta_boxes_a_medida_page', 'page', 'normal', 'high'); add_meta_box('page_secondarytext', 'Sub-título de la página','meta_boxes_a_medida_page', 'page', 'normal', 'high'); add_action('save_post', array(&$this,'salvar_metaboxes_a_medida_pages') ); } // tambien podemos añadirlos a nuestros tipos de post a medida a meta box for custom page types, en un array foreach (array('trabajos','post') as $type) { add_meta_box('imagen_principal', 'imagen principal','meta_boxes_a_medida_imagen', $type, 'normal', 'high'); add_action('save_post','salvar_metaboxes_a_medida_trabajos'); } } add_action( 'add_meta_boxes', 'meta_boxes_a_medida' ); // === MOSTRAMOS LAS BOXES A MEDIDA EN EL FORMULARIO === // function meta_boxes_a_medida_page( $post ) { // Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), 'trabajos_noncename' ); // The actual fields for data entry echo '<label for="page_primarytext">Titulo de la Página</label> '; echo '<input type="text" id="page_primarytext" name="page_primarytext" value="" size="45" />'; echo '<label for="page_primarytext">Sub-Titulo de la Página</label> '; echo '<input type="text" id="page_secondarytext" name="page_secondarytext" value="" size="45" />'; } // === GUARDAMOS LOS METABOXES EN LA BASE DE DATOS === // function salvar_metaboxes_a_medida_pages( $post_id ) { global $meta_box; // Verificamos si viene de un autosave // si no hemos dado a guardar datos, no hacemos nada. if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; // verificamos que proviene de nuestra ventana y los permisos de los usuarios. if ( !wp_verify_nonce( $_POST['trabajos_noncename'], plugin_basename( __FILE__ ) ) ) return; // Check permissions if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return; } // OK, estamos dentro y lso permisos vienen bien, guardamos. foreach ($meta_box['fields'] as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } } |
