Cuando se trata de crear un tipo de publicación personalizada dentro de un complemento de WordPress, siempre existe el mismo problema: es necesario crear una personalizada single- [cpt_slug] .php archivo en la carpeta de temas si no desea utilizar el valor predeterminado single.php archivo de su tema.
En esta publicación me gustaría cubrir dos aspectos del uso de plantillas personalizadas. El primer paso es mostrar que podemos usar un archivo personalizado contenido directamente en el complemento en lugar de cargar el archivo predeterminado. single.php, y el segundo es cómo crear su propio archivo personalizado en su carpeta de temas.
Muchos complementos, como Easy Digital Downloads o Shopp, usan este método: el complemento comprueba si define una plantilla personalizada en su carpeta de temas, si es el caso, entonces el archivo se carga, de lo contrario, se carga el archivo de plantilla de complemento predeterminado. En ambos casos el tema por defecto. single.php el archivo no está cargado.
El primer paso es crear un complemento, llamémoslo "Selector de plantillas". Crear un "selector de plantillas"carpeta bajo / wp-content / plugins /, Con la siguiente estructura:
La estructura del pluginLuego abre el archivo principal plantilla-elegir.php y coloca el siguiente código de encabezado del plugin:
/ * Nombre del complemento: Plantilla de CPT Selector URL del complemento: http://wp.tutsplus.com/ Descripción: Carga un archivo de plantilla personalizado en lugar del single.php predeterminado Versión: 0.1 Autor: Remi Corson URI del autor: http: // wp .tutsplus.com / * /
Más adelante en el complemento, necesitaremos recuperar fácilmente la URL del complemento y su ruta, por eso necesitamos definir algunas constantes:
/ * | ----------------------------------------------- --------------------------- | CONSTANTES | ------------------------------------------------ -------------------------- * / if (! defined ('RC_TC_BASE_FILE')) define ('RC_TC_BASE_FILE', __FILE__); if (! defined ('RC_TC_BASE_DIR')) define ('RC_TC_BASE_DIR', dirname (RC_TC_BASE_FILE)); if (! defined ('RC_TC_PLUGIN_URL')) define ('RC_TC_PLUGIN_URL', plugin_dir_url (__FILE__));
Para ir más lejos, tenemos que configurar un nuevo tipo de mensaje personalizado, vamos a crear un "Testimonial"CPT, con algunas funciones y soportes muy básicos. Como el objetivo de la publicación no es enseñar cómo crear un tipo de publicación personalizada, usaré un código bastante simple dividido en 3 partes: las etiquetas de tipo de publicación personalizadas, las ayudas y los argumentos de tipo de publicación personalizados. Todo eso se incrusta en una única función:
/ * | ----------------------------------------------- --------------------------- | DEFINIR EL TIPO DE ENVÍO PERSONALIZADO | -------------------------------------------- ------------------------------ * / / ** * Configuración del tipo de mensaje personalizado * * @since 1.0 * / function rc_tc_setup_post_types () // Etiquetas de tipo de entrada personalizadas $ labels = array ('name' => esc_html __ ('Testimonials', 'rc_tc'), 'singular_name' => esc_html __ ('Testimonial', 'rc_tc'), 'add_new' = > esc_html __ ('Add New', 'rc_tc'), 'add_new_item' => esc_html __ ('Add New Testimonial', 'rc_tc'), 'edit_item' => esc_html __ ('Edit Testimonial', 'rc_tc'), 'new_item '=> esc_html __ (' Nuevo Testimonio ',' rc_tc '),' view_item '=> esc_html __ (' Ver Testimonial ',' rc_tc '),' search_items '=> esc_html __ (' Buscar Testimonial ',' rc_tc '),' not_found '=> esc_html __ (' No se encontró el testimonio ',' rc_tc '),' not_found_in_trash '=> esc_html __ (' No se encontró el testimonio en la basura ',' rc_tc '),' parent_item_colon '=> "); // Apoya $ ayudas = array ('title', 'editor'); // Custom Post Type Supports $ args = array ('labels' => $ labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => array ('slug' => 'testimonials', 'with_front' => true ), 'capacity_type' => 'post', 'hierarchical' => false, 'menu_position' => 25, 'support' => $ support, 'menu_icon' => RC_TC_PLUGIN_URL. '/includes/images/testimonials_icon.png', // puede configurar su propio ícono aquí); // Finalmente registre el tipo de mensaje personalizado "testimonial" register_post_type ('testimonial', $ args); add_action ('init', 'rc_tc_setup_post_types');
Ahora que nuestro tipo de publicación personalizada está registrado, necesitamos crear una función que le indique a WordPress no usar el predeterminado single.php del tema.
Porque sí, de forma predeterminada, cuando se muestra un tipo de publicación personalizada en la interfaz, WordPress comprobará si un archivo llamado single-testimonial.php Existe y lo cargaremos. Si no, buscará la single.php. Pero no queremos usar ninguno de ellos..
Queremos que WordPress cargue un archivo personalizado desde el complemento. Para ello, tenemos que enganchar una nueva función a la "template_include
"filtro. En esta función, el objetivo es verificar el tipo de publicación y actuar en consecuencia:
/ * | ----------------------------------------------- --------------------------- | FILTROS | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser'); / * | ----------------------------------------------- --------------------------- | FUNCIONES DE PLUGIN | ----------------------------------------------- --------------------------- * / / * * Devuelve el archivo de plantilla * * @since 1.0 * / function rc_tc_template_chooser ($ template) // ID de publicación $ post_id = get_the_ID (); // Para todos los demás CPT if (get_post_type ($ post_id)! = 'Testimonial') return $ template; // De lo contrario, use la plantilla personalizada if (is_single ()) return rc_tc_get_template_hierarchy ('single');
Como puede ver, en la línea 33 estamos llamando a una nueva función rc_tc_get_template_hierarchy ()
. Esta es la función que verificará si WordPress tiene que cargar el archivo personalizado desde el complemento o la plantilla desde la carpeta del tema.
Tenga en cuenta que cuando estoy hablando de la "plantilla de la carpeta de temas", estoy hablando de un archivo personalizado cargado en lugar de la single.php.
Supongamos que no desea cargar la plantilla incluida en el complemento, pero cree su propia plantilla personalizada, todo lo que tiene que hacer es crear una nueva carpeta en la carpeta del tema, asígnele el nombre "plugin_template"y dentro de esta carpeta cree un single.php expediente. Este será tu nuevo defecto single.php cargado solo para los testimonios que se muestran en la interfaz.
¿Sigues conmigo? Bien, entonces vamos a crear la función:
/ ** * Obtener la plantilla personalizada si está establecida * * @since 1.0 * / function rc_tc_get_template_hierarchy ($ template) // Obtener la plantilla slug $ template_slug = rtrim ($ template, '.php'); $ template = $ template_slug. '.php'; // Verifique si existe una plantilla personalizada en la carpeta del tema, si no, cargue el archivo de la plantilla del complemento if ($ theme_file = Locate_template (array ('plugin_template /'. $ Template))) $ file = $ theme_file; else $ file = RC_TC_BASE_DIR. '/ includes / templates /'. $ plantilla; return apply_filters ('rc_repl_template_'. $ template, $ file); / * | ---------------------------------------------- ---------------------------- | FILTROS | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser');
Ahora crea un nuevo testimonio en la administración. Luego abrir incluye / templates / single.php y luego copiar y pegar este código simple:
estamos en el archivo personalizado del plugin
Si visualiza el testimonio en el frontend, debería ver "estamos en el archivo personalizado del complemento". Eso es lo que queríamos. Pero si el archivo de plantilla de complemento no se ajusta a sus necesidades o si simplemente desea crear un diseño más personal, puede crear un archivo en su carpeta de temas.
Para crear una plantilla personalizada que no use la predeterminada del complemento, puede crear una nueva carpeta llamada "plugin_templates"en su carpeta de temas. Cree un nuevo archivo llamado single.php y coloque este código:
estamos en el tema de archivo personalizado
Entonces, ¿qué hicimos exactamente? Bueno, creamos un complemento que registra un tipo de publicación personalizado "Testimonial". Logramos la funcionalidad de cargar un archivo personalizado almacenado en la carpeta del complemento en lugar del predeterminado single.php o single-testimonial.php archivos de la carpeta de temas. También logramos cargar un archivo personalizado desde la carpeta de tema ubicada en "plugin_templates
".
¿Por qué es esto agradable? Porque cuando crea su propio complemento, puede proporcionar una plantilla predeterminada para mostrar el tipo de publicación personalizada, por lo que le está dando la opción al usuario final de usar su propia plantilla o no..