Archivo de la categoría: Wordpress

Añadir un metabox a varios tipos de post en WordPress

En WordPress, a veces tenemos que añadir un meta_box a TODOS los tipos de post, sean del tipo que sean… o tal vez a muchos de ellos.

He visto que mucha gente lo que hace es coger el hook “add_meta_box” y llamarlo dentro de un foreach con los tipos a los que se lo quiere añadir… lo cual yo creo que no es correcto,y que debería hacerse como sigue

<?php
function poner_mi_metabox( $tipo ) {

	$post_types = array_values( get_post_types() );
	$excluded_types = array('excluido1', 'excluido2');

	$post_types = array_diff($post_types, $excluded_types);

	if( in_array($tipo, $post_types) ){
		add_meta_box( 'mamor_meta_box', 'Título del metabox',
		'display_el_meta_box', "$tipo", 'side', 'high' );

	}

}

function display_el_meta_box(){
	echo "contenido del meta box";
        //no me pongas aqui el HTML por favor! hazte una plantillica o algo
}

add_action( 'add_meta_boxes', 'poner_mi_metabox' );
?>

Lo que hemos hecho es que cuando se lance el hook “add_meta_boxes” se llame a la funcion “poner_mi_metabox”, que recibe, en cada llamada, el tipo de post que se está evaluando.

Tomamos todos los tipos de posts existentes en nuestro wordpress y le quitamos los que no nos interesen (por ejemplo, attachment sería un candidato en mi caso…), de manera que, si el tipo de post que se está evaluando es de uno de nuestros tipos aceptados, le añadimos la meta box.

Así de simple!

Y bueno, si lo que queremos es sacar solo una lista de los custom_post_types que tenemos, podemos hacerlo usando los argumentos que admite la función… tal y como está en la web de WordPress:

<?php
$args=array(
  'public'   => true,
  '_builtin' => false
);
$output = 'names'; // names or objects, note names is the default
$operator = 'and'; // 'and' or 'or'
$post_types=get_post_types($args,$output,$operator);
  foreach ($post_types  as $post_type ) {
    echo '<p>'. $post_type. '</p>';
  }
?>