Crear Custom Post Types de forma avanzada con php

26 de /marzo03 de /2023
3m 19s
wordpress
0 comentarios
15685

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

Quizás te interese ...

Utilizamos cookies para mejorar tu experiencia

Utilizamos cookies propias y de terceros para personalizar el contenido, analizar nuestros servicios, ofrecer funciones de redes sociales, analizar el tráfico y mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación.

Permitir todas las cookies Configurar Política de cookies