• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Core / Creación dinámica de Custom Post Types en WordPress

Creación dinámica de Custom Post Types en WordPress

Creación dinámica de Custom Post Types en WordPress

[ hace 4 semanas ] [ Actualizado: hace 4 semanas ]
[ Autor: Jhon Marreros Guzmán ][ Core - Avanzado] [ ]

funcionalidad optimización

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

En un artículo anterior vimos cómo crear Custom Post Type (CPT) en WordPress, sin embargo si quieres crear más de un CPT no es necesario repetir todo el código. En este artículo veremos cómo crear CPT dinámicamente.

 

Generalidades

Recientemente tuve que realizar un proyecto en donde se tenían que crear varios CPT con código. A raíz de esto busque una forma de no repetir el código ya que los CPT eran similares y sólo tenían ciertas variaciones.

En la siguiente imagen vemos que inicialmente había creado un archivo por cada CPT, sin embargo al final sólo me quedé con un archivo que tiene código genérico y que se puede parametrizar para crear los CPT.

Generación CPT

 

Código del archivo genérico

El siguiente código es parte del archivo generic_cpt.php que colocaremos en la carpeta cpt del tema hijo.

Este archivo crea una clase GenericCPT que al instanciar podemos pasar un array con los CPT a crear con sus respectivos parámetros.

<?php

class GenericCPT {
	protected $settings;

	function __construct( $settings ) {
		$this->settings = $settings;
		add_action( 'init', [ $this, 'add_custom_post_types' ] );
	}

	function add_custom_post_types() {

		foreach ( $this->settings as $type => $data ) {

			$labels = array(
				'name'                  => _x( ucfirst( $type ), 'Post Type General Name', 'domain-child' ),
				'singular_name'         => _x( ucfirst( $type ), 'Post Type Singular Name', 'domain-child' ),
				'menu_name'             => __( ucfirst( $data['plural'] ), 'domain-child' ),
				'name_admin_bar'        => __( ucfirst( $data['plural'] ), 'domain-child' ),
				'archives'              => __( 'Archivo ' . $data['plural'], 'domain-child' ),
				'attributes'            => __( 'Atributos ' . $type, 'domain-child' ),
				'parent_item_colon'     => __( ucfirst( $data['plural'] ) . ' padre:', 'domain-child' ),
				'all_items'             => __( 'Todos', 'domain-child' ),
				'add_new_item'          => __( 'Agregar nuevo', 'domain-child' ),
				'add_new'               => __( 'Agregar', 'domain-child' ),
				'new_item'              => __( 'Nuevo', 'domain-child' ),
				'edit_item'             => __( 'Editar', 'domain-child' ),
				'update_item'           => __( 'Actualizar', 'domain-child' ),
				'view_item'             => __( 'Ver ' . $type, 'domain-child' ),
				'view_items'            => __( 'Ver ' . $data['plural'], 'domain-child' ),
				'search_items'          => __( 'Buscar ' . $type, 'domain-child' ),
				'insert_into_item'      => __( 'Insertar ' . $type, 'domain-child' ),
				'uploaded_to_this_item' => __( 'Subir ' . $type, 'domain-child' ),
				'items_list'            => __( 'Lista ' . $type, 'domain-child' ),
				'items_list_navigation' => __( 'Navegación ' . $data['plural'], 'domain-child' ),
				'filter_items_list'     => __( 'Filtro ' . $data['plural'], 'domain-child' ),
			);

			$rewrite = array(
				'slug'       => $type,
				'with_front' => true,
				'pages'      => true,
				'feeds'      => true,
			);

			$args = array(
				'label'               => __( ucfirst( $type ), 'domain-child' ),
				'description'         => __( 'Contenido de ' . $data['plural'], 'domain-child' ),
				'labels'              => $labels,
				'supports'            => array( 'title', 'editor' ),
				'taxonomies'          => $data['taxonomies'] ?? [],
				'hierarchical'        => false,
				'public'              => true,
				'show_ui'             => true,
				'show_in_menu'        => true,
				'menu_position'       => 5,
				'menu_icon'           => $data['icon'],
				'show_in_admin_bar'   => true,
				'show_in_nav_menus'   => true,
				'can_export'          => true,
				'has_archive'         => true,
				'exclude_from_search' => false,
				'publicly_queryable'  => true,
				'rewrite'             => $rewrite,
				'capability_type'     => 'page',
				'show_in_rest'        => true,
			);

			register_post_type( $type, $args );
		}
		flush_rewrite_rules();
	}
}

 

Usando la clase GenericCPT

Puedes usar el siguiente código desde el archivo functions.php de tu tema hijo.

Como puedes ver pasamos un array con los distingos CPT y sus diferentes parámetros, estos parámetros serán usados en la clase GenericCPT.

include_once "cpt/generic_cpt.php";

$cpt = [
	"equipo" => [
		"plural" => "equipos",
		"icon"   => "dashicons-groups",
		"taxonomies" => ['category']
	],
	"jugador" => [
		"plural" => "jugadores",
		"icon"   => "dashicons-smiley",
		"taxonomies" => ['category']
	],
	"resultado" => [
		"plural" => "resultados",
		"icon"   => "dashicons-calendar-alt"
	]
];

new GenericCPT ( $cpt );

 

Conclusión

Como has podido comprobar, para evitar repetir código en la creación de un CPT puedes usar una clase genérica y pasar los parámetros correspondientes por cada CPT.

 
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.

Suscríbete a DecodeCMS:  

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Eliminar el slug de la URL de un Custom Post TypeEliminar el slug de la URL de un Custom Post Type
  • Cambiar el tipo de Custom Post Type en WordPressCambiar el tipo de Custom Post Type en WordPress
  • Custom Post Types en WordPressUsando Custom Post Types en WordPress
  • Cómo usar el Modo de Recuperación de WordPressCómo usar el Modo de Recuperación de WordPress
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (2 votos, promedio: 5,00 de 5)
Cargando...

Interacciones con los lectores

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Presentación

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Jooble
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad social woocommerce

Populares

Agregar animaciones de aparición sin plugins en WordPress

Mostrar la fecha de actualización en las entradas de WordPress

Plantillas de página en WordPress

Mover el precio de variaciones de producto en WooCommerce

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2023 Todos los derechos reservados