Plantas de WordPress agregadas con un suplemento
Actualizar: El código actualiza los receptores para la funcionalidad de WordPress 4.7+
Alguna vez ha querido crear sus propias plantillas de pá Aftunadamate, ¡la solución es bastante sencilla! Lo lévarérápídá a través de las pocas líneas de código que necesitará para crear dinámicamente Plantillas de página de WordPress Directing to the grass of PHP.
La inspiración para este artículo y el genio infantil de la solución codificada de Tom McFarlin: Esta es también mi versión de la versión codificada original, que se puede encontrar en GitHub. He guarded your comments (ademáengunos de ademáegunos de ademáegunos de ademáegunos de ademáenóquelos) para explicar lo que está sucediendo. ¡Yo no podría haberlo dicho mejor!
Puede encontrar el código completo y agregar el ejemplo al final de esta publicación.
¿Celebramos?
El código
Creamos nuestra función PHP usando una clase PHP. Para aquellos que están ahorrando pero no están familiarizados con las clases de PHP, una clase se define como un objeto que contiene una colección de funciones y variables que requieren trabajo. Consulte la introducción de PHP.net para obtener más información sobre la sintaxis y la teoría.
Nuestro candidato solo necesita 3 variables:
- El complemento de babosa: Esto se usa simplemente como el identificador único para el complemento en los EE. UU.
- instancia de clase: Dado que estamos agregando una instancia de esta clase en la colección de WordPress, esto es lo mejor que podemos hacer.
- Matriz vegetal: Como posible adición, puede agregar una matriz que contenga los números y títulos de las plantas.
Aquí está el código:
class PageTemplater { /** * A Unique Identifier */ protected $plugin_slug; /** * A reference to an instance of this class. */ private static $instance; /** * The array of templates that this plugin tracks. */ protected $templates;
Obtener instancia de clase
Como antes, agregamos nuestra instancia de nuestra colección de WordPress con el añadir filtros () Función. Por cierto, necesitamos un método que nos haga devorar esta instancia (en cree).
Para hacer esto, necesitamos un método simple que pueda usarse en 'get_instance'. Orden Continuo;
/** * Returns an instance of this class. */ public static function get_instance() { if( null == self::$instance ) { self::$instance = new PageTemplater(); } return self::$instance; }
Este será el m © methodo llamado cuando nuestro klase se acuerde al encabezado de WordPress uses 'add_action ()'.
filtro de WordPress
Si desea obtener un resultado get_instance, debe recomendar un solucionador para crear una instancia.
Utilice el software integrado en WordPress. añadir filtros () Funciona para agregar una instancia de nuestra clase a puntos clave en el momento de la zona horaria de inicialización de WordPress. Con este método insertamos los datos de nuestras plantas de interés en lugares relevantes, como digo, en el archivo de WordPress que usamos como planta cuando se trata del árbol y el título para mostrar el menú en el editor de pá Gina.
no queremos usarlo '__Constructor' método (este ejercicio se crea a partir de una instancia de clase).
/** * Initializes the plugin by setting filters and administration functions. */ private function __construct() { $this->templates = array(); // Add a filter to the attributes metabox to inject template into the cache. if ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.7', 'templates = array( 'goodtobebad-template.php' => 'It's Good to Be Bad', ); }
Aquí está sucediendo 4 cosas diferentes (ignorira '$this->templates = array();', que solo está preparando la promenliva za nas);
- Leones 9 - 13: Este filtro filtra 'register_project_templates' también 'page_attributes_dropdown_pages_args'. Este es un excelente caché de WordPress con nuestras nuevas plantas 'enganchadas' a WordPress para crear lo que los archivos de la planta realmente contienen en el directorio de la planta. Esta compilación de plantas en la lista está disponible en el metabox de atributos de Pina y en el editor de Pina Gina.
- Leones 16 - 20: Aquà estamos haciendo mucho lo mismo que el bloque de código anterior, s izkljucenje na que esta vez estamos agregando nuestra plantilla de página (si está seleccionada) a los datos de publikación guardados también n.
- Leones 23-28: Este filtrado incluye "template_include" y "view_project_template". Esta es una característica muy importante; Esto le dice a WordPress dónde está realmente el archivo de plantilla de su página.WordPress utilizará la ruta proporcionada por este para representar la página final.
- Leones 31-34: Eso es fácil, muy importante. Aquí están las plantas específicas de la planta que agregan y el ruta relativa al archivo donde está el archivo de plantilla de página (por ejemplo, 'algo.php'). Incluye un ejemplo (que se utiliza en el suplemento de ejemplo). Vea una continuación de un ejemplo general:
$this->templates = array( 'FILE_PATH_AND_NAME' => 'TEMPLATE_TITLE', 'awesome-template.php' => 'Awesome', 'templates/organised-template.php' => 'Organised', );
(Comer, dormir) Codificar, probar según sea necesario.
registrarse_proyecto_plantillas ()
Ha aludido a este método con anterioridad; realmente queremos
El método de este método consiste sobre todo en manipular el cuadro de WordPress e insertar los datos relevantes sobre nuestras plantas en los lugares correctos. Primero, veamos el código y el lugar para la explicación.
public function register_project_templates( $atts ) { // Create the key used for the themes cache $cache_key = 'page_templates-' . md5( get_theme_root() . "https://blogging-techies.com/" . get_stylesheet() ); // Retrieve the cache list. // If it doesn't exist, or it's empty prepare an array $templates = wp_get_theme()->get_page_templates(); if ( empty( $templates ) ) { $templates = array(); } // New cache, therefore remove the old one wp_cache_delete( $cache_key , 'themes'); // Now add our template to the list of templates by merging our templates // with the existing templates array from the cache. $templates = array_merge( $templates, $this->templates ); // Add the modified cache to allow WordPress to pick it up for listing // available templates wp_cache_add( $cache_key, $templates, 'themes', 1800 ); return $atts; }
En este momento estamos. La cuarta línea es el primer lugar para buscar. Como si estuvieras enganchado, generamos un 'caché de'. Esto se debe usar como un identificador único. nuestro Los datos de la planta al usar la función md5() simplemente crean un identificador único para evitar contratos.
En la continuación, en la línea 8, buscamos y recuperamos el caché de la planta de ginebra (si lo hay): este es un cambio en la matriz de rutas y títulos. En las líneas 9-11 podemos comprobar que el resultado del consejo de café es correcto. Eres genial. Si no, cree una matriz local para mantener el contenido. ©.
El siguiente paso es crucial. En línea 14 noches Eliminar la caché de plantilla de página existente. No se preocupe, no se pierden datos, se almacenan en la promenli $chabloni.
En la línea de 18 fusionamos el caché de plantillas de página existente con nuestras nuevas entradas, y en la línea 22 volvemos a insertar todo el caché © plantillas de página en el sistema na WordPress.
sencillo!
ver_proyecto_plantilla ()
Ahora estamos en nuestro método final; Estas son algunas de las palabras en WordPress donde se encuentra el archivo de plantas de Jina istinska.
/** * Checks if the template is assigned to the page */ public function view_project_template( $template ) { // Get global post global $post; // Return template if post is empty if ( ! $post ) { return $template; } // Return default template if we don't have a custom one defined if ( !isset( $this->templates[get_post_meta( $post->ID, '_wp_page_template', true )] ) ) { return $template; } $file = plugin_dir_path(__FILE__). get_post_meta( $post->ID, '_wp_page_template', true ); // Just to be safe, we check if the file exist first if ( file_exists( $file ) ) { return $file; } else { echo $file; } // Return template return $template; }
Bueno, entonces este método se compara con la variable global $post (línea 6). Se ha configurado para publicar un archivo adjunto ('_wp_page_template') (lo que significa que puede ser una página). Si no hacemos eso, no podemos importar: no tenemos Ginas, podemos tener plantas en Gina.
La línea 16 especifica la ubicación del archivo de activos de la planta. Como se estableció anteriormente, consulte los archivos de la planta de Pá (Sin embargo, esto puede modificarse a la brevedad; consultar continuamente).
// Just changing the page template path // WordPress will now look for page templates in the subfolder 'templates', // instead of the root $file = plugin_dir_path(__FILE__). 'templates/' .get_post_meta( $post->ID, '_wp_page_template', true );
Después de eso, en las líneas 21-24 tenemos una verificación de validación válida que verifica el archivo existente. usted es maravilloso Si no le gusta, por favor... Tengo un problema al recibir un mensaje de error de PHP y WordPress sin poder encontrar el archivo de la planta que incluye un libro blanco. En algunos casos, esta es la familia Suena, que simplemente revisa la ruta de la variable de archivo de la planta y cambia el archivo en el tablero.
Si planea usar este código comercialmente (como si fuera gratis, mi versión del código no tiene licencia, por el bien de eso, puede hacerlo con cualquiera que lo desee), realmente le recomiendo que recurra a It's Mine error que algo anda mal. . .
Eso es todo Solo hay una cosa que hacer con nuestra clase completa: agregar a la colección de WordPress.
add_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) );
¡Felicitaciones si te pierdes la final! Espero haber encontrado lo que tengo que decir y poder beneficiarme de ello en el futuro.
Código completado
La secuela del maestro es el código completo del suplemento para copiar y jugar hasta el núcleo.
templates = array(); // Add a filter to the attributes metabox to inject template into the cache. if ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.7', 'templates = array( 'goodtobebad-template.php' => 'It's Good to Be Bad', ); } /** * Adds our template to the page dropdown for v4.7+ * */ public function add_new_template( $posts_templates ) { $posts_templates = array_merge( $posts_templates, $this->templates ); return $posts_templates; } /** * Adds our template to the pages cache in order to trick WordPress * into thinking the template file exists where it doens't really exist. */ public function register_project_templates( $atts ) { // Create the key used for the themes cache $cache_key = 'page_templates-' . md5( get_theme_root() . "https://blogging-techies.com/" . get_stylesheet() ); // Retrieve the cache list. // If it doesn't exist, or it's empty prepare an array $templates = wp_get_theme()->get_page_templates(); if ( empty( $templates ) ) { $templates = array(); } // New cache, therefore remove the old one wp_cache_delete( $cache_key , 'themes'); // Now add our template to the list of templates by merging our templates // with the existing templates array from the cache. $templates = array_merge( $templates, $this->templates ); // Add the modified cache to allow WordPress to pick it up for listing // available templates wp_cache_add( $cache_key, $templates, 'themes', 1800 ); return $atts; } /** * Checks if the template is assigned to the page */ public function view_project_template( $template ) { // Get global post global $post; // Return template if post is empty if ( ! $post ) { return $template; } // Return default template if we don't have a custom one defined if ( ! isset( $this->templates[get_post_meta( $post->ID, '_wp_page_template', true )] ) ) { return $template; } $file = plugin_dir_path( __FILE__ ). get_post_meta( $post->ID, '_wp_page_template', true ); // Just to be safe, we check if the file exist first if ( file_exists( $file ) ) { return $file; } else { echo $file; } // Return template return $template; } } add_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) );
El complemento
También puede descargar el código completo como complemento de Github.
Plan primario del editor de la publicación.
Aquí hay un ejemplo de un plan de acción. ¿Ve la plantilla de página agregada en Attributes de pá Džina?
Deja una respuesta