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?

Valoraciones


Sé el primero en valorar

* Tu valoración puede tardar hasta 72 horas en publicarse.

He leido y acepto el Aviso legal y condiciones de uso

CAPTCHA


Utilizamos cookies propias y de terceros para el correcto funcionamiento de la web, personalizar el contenido y mostrar publicidad en función de las preferencias del visitante. Puedes encontrar más información en nuestra Política de cookies.

ACEPTAR
Aviso de cookies