En ocasiones los títulos de nuestros proyectos son demasiado extensos como para mostrarlos completos en las migas de pan de nuestro sitio web,...
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 ...
WordPress límita por seguridad ciertas extensiones de archivo, en algunos casos necesitamos subir archivo de tipo .svg o .webp que serán...
Yo no sé vosotros pero yo de momento me niego a utilizar el nuevo editor de WordPress Guttenberg, de momento sigo utilizando el editor...
Uno de los grandes problemas hoy en día en un proyecto es la optimización de los recursos que bloquean la carga de la página, una solución...
Valoraciones
Sé el primero en valorar