Las funciones mas usadas en WordPress

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