Esta función te permite generar una breadcrumb personalizada sin depender de plugins. Es útil cuando quieres tener control total sobre la...
Crear Custom Post Types de forma avanzada con php
Crear Custom Post Types en WordPress puede ser relativamente sencillo, podemos utilizar un plugin o crearlos cada vez por cada uno que necesitemos, pero en proyectos con un número elevado de este tipo de necesidades puede que el archivo functions se nos haga interminable, por lo que lo mejor es recurrir a php orientado a objetos y crear una clase para ello, por ejemplo creamos una carpeta en la raiz del tema e incluimos el archivo php con la siguiente clase:
class CustomPostType {
public $nombre;
public $nombre_plural;
public $genero;
public $args;
function __construct($name, $plural_name, $genre, $args = array()) {
$this->nombre = $name;
$this->nombre_plural = $plural_name;
$this->genero = $genre;
$this->args = (array)$args;
$this->init(array(&$this, "register_post_type"));
}
function init($callback) {
add_action("init", $callback);
}
function register_post_type() {
$label_name = ucwords($this->nombre);
$label_plural_name = $this->nombre_plural;
$label_genre = $this->genero;
$labels = array(
'name' => $label_plural_name,
'singular_name' => $label_name,
'add_new' => 'Añadir nuev' . $label_genre,
'add_new_item' => 'Añadir nuev' . $label_genre . $label_name,
'edit_item' => 'Editar ' . $label_name,
'new_item' => 'Nuev' . $label_genre . $label_name,
'all_items' => 'Tod' . $label_genre . 's l' . $label_genre . 's ' . $label_plural_name,
'view_item' => 'Ver ' . $label_name,
'search_items' => 'Buscar ' . $label_plural_name,
'not_found' => 'No se encuentran ' . $label_plural_name,
'not_found_in_trash' => 'No se encuentran ' . $label_plural_name,
'parent_item_colon' => '',
'menu_name' => $label_plural_name
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'query_var' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'exclude_from_search' => true,
'menu_icon' => 'dashicons-admin-post',
'taxonomies' => array( 'category', 'post_tag' ),
'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', 'custom-fields', 'page-attributes' ),
'capability_type' => 'post',
'has_archive' => true
);
$args = array_merge($args, $this->args);
register_post_type($this->nombre, $args);
}
}Esto es solo un ejemplo, aunque bastante avanzado se puede mejorar y mucho, una vez creado lo llamamos desde el archivo functions con un require:
require('nombre_carpeta/nombre_archivo');Una vez cargado la construcción de cada post type será mucho más simple y sencilla, tan solo debemos pasarle al objeto las propiedades que necesita que son 4 (Nombre singular, Nombre plural, genero (a/o) y por último un array con los parámetros que queramos, ejemplo:
$productos = new CustomPostType('Producto', 'Productos', 'o', array(
'capability_type' => 'post',
'supports' => array( 'title', 'editor', 'thumbnail', 'revisions', 'custom-fields', 'page-attributes', 'excerpt' ),
'taxonomies' => array( '', '' ),
'menu_position' => 8,
'menu_icon' => 'dashicons-layout',
'has_archive' => false,
'rewrite' => array('slug' => 'productos','with_front' => false),
));A partir de aquí podemos crear todos los Custom Post Types que necesitemos utilizando el objeto CustomPostType, mucho más limpio y más NRY ¿no?
Quizás te interese ...
Esta regla sirve para detectar si un contenido tiene un padre asignado. Es muy útil cuando trabajas con contenidos jerárquicos, como cursos...
Hoy vamos a ver cómo añadir a ACF una regla muy útil llamada Has Children. Esta regla te permite mostrar u ocultar campos dependiendo de si...
En ocasiones los títulos de nuestros proyectos son demasiado extensos como para mostrarlos completos en las migas de pan de nuestro sitio web,...
Valoraciones
Sé el primero en valorar