Cuando creamos un tema personalizado a menudo nos faltan campos en las entradas para acabar de customizar nuestro contenido y facilitar la inserción de texto en un blog o web. Pues bien, EL vietnamita Tran Ngoc Tuan Anh, aka rilwis y editor de deluxeblogtips.com; ha creado un plugin para wordpress muy útil: meta-box.

La verdad es que es muy práctico y fácil de usar. A continuación os defino unos sencillos pasos para integrarlo en vuestro tema de wordpress:

  1. Descárgate el plugin de github: github.com/rilwis/meta-box (si no funciona puedes coger de aquí la versión 4.3.6)
  2. Copia todo el contenido del zip en tu tema de wordpress (englobado en una carpeta o más, pero no menos)
  3. Ahora debes crear el config.php en la raíz del plugin (al mismo nivel de meta-box.php). Deberá tener una apariencia tal que así:

    <?php
    function pages_register_meta_boxes()
    {
    	if ( !class_exists( 'RW_Meta_Box' ) )
    		return;
     
    	$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
     
    	$meta_boxes = array();
     
    	$meta_boxes[] = array(
    		'id' => 'id-de-la-caja',
    		'title' => 'Título de la caja',
    		'pages' => array('post'), // define en qué tipo de post se mostrarán las cajas (post, page, custom-post...)
     
    		'fields' => array(
    			array(
    				'name'  => 'Nombre del campo',
    				'id'    => 'id-del-campo',
    				'type'  => 'text', // define el tipo de campo que puede ser texto, número, combox... esto tenéis ejemplos de todo en la carpera demo/demo.php
    				'std'   => 'valor por defecto'
    			)
    		)
    	);
     
    	foreach ( $meta_boxes as $meta_box )
    	{
    		if ( isset( $meta_box['only_on'] ) && !rw_maybe_include( $meta_box['only_on'] ) ) {
    			continue;
    		}
    		new RW_Meta_Box( $meta_box );
    	}
    }
     
     
    add_action( 'admin_init', 'pages_register_meta_boxes' );
     
     
    function rw_maybe_include( $conditions ) {
    	if ( ! defined( 'WP_ADMIN' ) || ! WP_ADMIN ) return false;
     
    	if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) return true;
     
    	if ( isset( $_GET['post'] ) ) $post_id = $_GET['post']; elseif ( isset( $_POST['post_ID'] ) ) $post_id = $_POST['post_ID']; else $post_id = false;
     
    	$post_id = (int) $post_id;
    	$post    = get_post( $post_id );
     
    	foreach ( $conditions as $cond => $v ) {
    		if ( ! is_array( $v ) ) $v = array( $v );
     
    		switch ( $cond ) {
    			case 'id':
    				if ( in_array( $post_id, $v ) ) {
    					return true;
    				}
    			break;
    			case 'parent':
    				$post_parent = $post->post_parent;
    				if ( in_array( $post_parent, $v ) ) {
    					return true;
    				}
    			break;
    			case 'slug':
    				$post_slug = $post->post_name;
    				if ( in_array( $post_slug, $v ) ) {
    					return true;
    				}
    			break;
    			case 'template':
    				$template = get_post_meta( $post_id, '_wp_page_template', true );
    				if ( in_array( $template, $v ) ) {
    					return true;
    				}
    			break;
    		}
    	}
     
    	return false;
    }
    ?>

    Si quisiésemos más cajas tendríamos que definir más $meta_boxes[] duplicando esas líneas de código y si quisiésemos más campos, añadiríamos más arrays a los $fields.

  4. Ahora tenemos que definirlo en el functions.php de nuestro tema, pegando éste código al final

    <?php
    // Re-define meta box path and URL
    define( 'RWMB_URL', trailingslashit( get_stylesheet_directory_uri() . '/inc/meta-box/' ) );
    define( 'RWMB_DIR', trailingslashit( STYLESHEETPATH . '/inc/meta-box/' ) );
    // Include the meta box script
    require_once RWMB_DIR . 'meta-box.php';
    // Include the meta box definition (the file where you define meta boxes, see `demo/demo.php`)
    include RWMB_DIR . '/config.php';
    ?>

    En mi caso he metido el plugin dentro de una carpeta inc por si en un futuro tengo más plugins qué meter.

  5. ¡Y listo!

Espero que os haya servido tanto cómo a mi este fantástico plugin.

Categorías: Wordpress
Etiquetas:, ,
Si necesitas una url corta puede usar: codygo.es/830

Deja un comentario