{"id":90225,"date":"2022-09-04T21:19:51","date_gmt":"2022-09-04T19:19:51","guid":{"rendered":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/"},"modified":"2021-03-03T13:50:57","modified_gmt":"2021-03-03T16:50:57","slug":"agregar-plantillas-de-pagina-a-wordpress-con-un-complemento","status":"publish","type":"post","link":"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/","title":{"rendered":"Add page templates to WordPress with a plugin"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#EL-CODIGO\" >EL C\u00d3DIGO<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#Obtener-instancia-de-clase\" >Obtener instancia de clase<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#Filtros-de-WordPress\" >Filtros de WordPress<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#register-project-templates\" >register_project_templates ()<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#view-project-template\" >view_project_template ()<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#CODIGO-COMPLETO\" >C\u00d3DIGO COMPLETO<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#EL-PLUGIN\" >EL PLUGIN<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#PRIMER-PLANO-DEL-EDITOR\" >PRIMER PLANO DEL EDITOR<\/a><\/li><\/ul><\/nav><\/div>\n<div class=\"container-med\">\n<div class=\"entry atype\">\n<div class=\"gray-box clr\"><strong>Actualizar<\/strong>: El c\u00f3digo se ha actualizado recientemente para funcionar en WordPress 4.7+<\/div>\n<p>\u00bfAlguna vez ha querido crear sus propias plantillas de p\u00e1gina, pero no ha tenido acceso al tema en s\u00ed?  Yo, como autor de complementos de WordPress, he encontrado que este problema es particularmente molesto al desarrollar mis complementos.  \u00a1Por suerte, la soluci\u00f3n es bastante simple!  Lo llevar\u00e9 r\u00e1pidamente a trav\u00e9s de las pocas l\u00edneas de c\u00f3digo que necesitar\u00e1 para crear din\u00e1micamente Plantillas de p\u00e1gina de WordPress de forma directa a trav\u00e9s de PHP.<\/p>\n<p>La inspiraci\u00f3n para este art\u00edculo y la genialidad detr\u00e1s de la soluci\u00f3n de c\u00f3digo proviene de <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" title=\"Tom McFarlin WordPress PHP Page Template\" href=\"https:\/\/github.com\/tommcfarlin\">Tom McFarlin<\/a>: Estoy usando mi versi\u00f3n editada de su c\u00f3digo original, que puede encontrar en su GitHub.  He guardado sus comentarios (a la vez de agregar algunos de los m\u00edos), ya que lo encuentro muy \u00fatil para explicar lo que est\u00e1 sucediendo. \u00a1Yo mismo no podr\u00eda haberlo dicho mejor!<\/p>\n<p><strong>Puede encontrar el c\u00f3digo en su totalidad y un complemento de ejemplo al final de esta publicaci\u00f3n.<\/strong><\/p>\n<p>\u00bfDeber\u00edamos empezar?<\/p>\n<h2><span class=\"ez-toc-section\" id=\"EL-CODIGO\"><\/span>EL C\u00d3DIGO<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Crearemos nuestra funci\u00f3n PHP usando una clase PHP.  Para aquellos de ustedes que no est\u00e1n bien familiarizados con las clases PHP, una clase se define como un objeto que contiene una colecci\u00f3n de funciones y variables que trabajan juntas.  Revisar la <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" title=\"PHP.net Introduction\" href=\"http:\/\/uk3.php.net\/oop5.basic\">Introducci\u00f3n a PHP.net<\/a> para obtener m\u00e1s detalles sobre la sintaxis y la teor\u00eda.<\/p>\n<p>Nuestro contenedor solo necesitar\u00e1 3 variables:<\/p>\n<ol>\n<li><strong>El plugin Slug:<\/strong> Esto simplemente se usa como un identificador \u00fanico para el complemento.<\/li>\n<li><strong>Instancia de clase:<\/strong> Como estamos agregando una instancia de esta clase al encabezado de WordPress, ser\u00e1 mejor que la almacenemos.<\/li>\n<li><strong>Matriz de plantillas:<\/strong> Como probablemente pueda adivinar, esta es una matriz que contiene los nombres y t\u00edtulos de las plantillas.<\/li>\n<\/ol>\n<p>Aqu\u00ed est\u00e1n en c\u00f3digo:<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">class PageTemplater {\r\n\r\n\t\t\/**\r\n         * A Unique Identifier\r\n         *\/\r\n\t\t protected $plugin_slug;\r\n\r\n        \/**\r\n         * A reference to an instance of this class.\r\n         *\/\r\n        private static $instance;\r\n\r\n        \/**\r\n         * The array of templates that this plugin tracks.\r\n         *\/\r\n        protected $templates;<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Obtener-instancia-de-clase\"><\/span>Obtener instancia de clase<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Como dije previamente, agregaremos una instancia de nuestra clase al encabezado de WordPress usando el <strong>A\u00f1adir filtro()<\/strong> funci\u00f3n.  Por lo tanto, necesitaremos un m\u00e9todo que nos devuelva (o cree) esta instancia.<\/p>\n<p>Para esto, necesitaremos un m\u00e9todo simple, que se llamar\u00e1 &#8216;get_instance&#8217;.  Compru\u00e9balo a continuaci\u00f3n;<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">\/**\r\n * Returns an instance of this class. \r\n *\/\r\npublic static function get_instance() {\r\n\r\n\tif( null == self::$instance ) {\r\n\t\tself::$instance = new PageTemplater();\r\n\t} \r\n\r\n\treturn self::$instance;\r\n\r\n}<\/code><\/pre>\n<p>Este ser\u00e1 el m\u00e9todo llamado cuando nuestra clase se agregue al encabezado de WordPress usando &#8216;add_action ()&#8217;.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Filtros-de-WordPress\"><\/span>Filtros de WordPress<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ahora que hemos resuelto el m\u00e9todo &#8216;get_instance&#8217;, tenemos que aclarar qu\u00e9 sucede cuando realmente se crea una instancia.<\/p>\n<p>Usaremos el software incorporado de WordPress. <strong>A\u00f1adir filtro()<\/strong> funci\u00f3n para agregar una instancia de nuestra clase en puntos clave a lo largo de la l\u00ednea de tiempo de inicializaci\u00f3n de WordPress.  Con este m\u00e9todo, insertaremos los datos de nuestras plantillas de p\u00e1gina en espacios relevantes, como decirle a WordPress qu\u00e9 archivo usar como plantilla cuando se llama a la p\u00e1gina y el t\u00edtulo para mostrar en el men\u00fa desplegable del Editor de p\u00e1gina.<\/p>\n<p>Para esto, necesitamos usar el <strong>&#8216;__construir&#8217;<\/strong> m\u00e9todo (esto se ejecutar\u00e1 cuando la clase sea instanciada).<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">\/**\r\n * Initializes the plugin by setting filters and administration functions.\r\n *\/\r\nprivate function __construct() {\r\n\r\n\t$this-&gt;templates = array();\r\n\r\n\t\/\/ Add a filter to the attributes metabox to inject template into the cache.\r\n\tif ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.7', '&lt;' ) ) {\r\n\r\n\t\t\/\/ 4.6 and older\r\n\t\tadd_filter(\r\n\t\t\t'page_attributes_dropdown_pages_args',\r\n\t\t\tarray( $this, 'register_project_templates' )\r\n\t\t);\r\n\r\n\t} else {\r\n\r\n\t\t\/\/ Add a filter to the wp 4.7 version attributes metabox\r\n\t\tadd_filter(\r\n\t\t\t'theme_page_templates', array( $this, 'add_new_template' )\r\n\t\t);\r\n\r\n\t}\r\n\r\n\t\/\/ Add a filter to the save post to inject out template into the page cache\r\n\tadd_filter(\r\n\t\t'wp_insert_post_data', \r\n\t\tarray( $this, 'register_project_templates' ) \r\n\t);\r\n\r\n\t\/\/ Add a filter to the template include to determine if the page has our \r\n\t\/\/ template assigned and return it's path\r\n\tadd_filter(\r\n\t\t'template_include', \r\n\t\tarray( $this, 'view_project_template') \r\n\t);\r\n\r\n\t\/\/ Add your templates to this array.\r\n\t$this-&gt;templates = array(\r\n\t\t'goodtobebad-template.php' =&gt; 'It's Good to Be Bad',\r\n\t);\r\n\r\n}<\/code><\/pre>\n<p>Aqu\u00ed est\u00e1n sucediendo 4 cosas diferentes (ignorando &#8216;$ this-> templates = array ();&#8217;, que solo est\u00e1 preparando la variable para su uso);<\/p>\n<ol>\n<li><strong>L\u00edneas 9 &#8211; 13<\/strong>: Este filtro agrega &#8216;register_project_templates&#8217; al gancho &#8216;page_attributes_dropdown_pages_args&#8217;.  Esto est\u00e1 llenando el cach\u00e9 de WordPress con nuestras nuevas plantillas, &#8216;enga\u00f1ando&#8217; a WordPress haci\u00e9ndole creer que los archivos de plantilla de p\u00e1gina existen realmente en el directorio de plantillas.  Esto agrega las plantillas de p\u00e1gina a la lista desplegable en el meta cuadro de atributos de p\u00e1gina en el editor de p\u00e1ginas.<\/li>\n<li><strong>L\u00edneas 16 &#8211; 20<\/strong>: Aqu\u00ed estamos haciendo esencialmente lo mismo que el bloque de c\u00f3digo anterior, excepto que esta vez estamos agregando nuestra plantilla de p\u00e1gina (si est\u00e1 seleccionada) a los datos de publicaci\u00f3n guardados al mismo tiempo.<\/li>\n<li><strong>L\u00edneas 23-28<\/strong>: Este filtro agrega el &#8216;template_include&#8217; al gancho &#8216;view_project_template&#8217;.  \u00c9sta es una funci\u00f3n muy importante;  esto le dice a WordPress d\u00f3nde est\u00e1 realmente su archivo de plantilla de p\u00e1gina.  WordPress utilizar\u00e1 la ruta proporcionada por este para representar la p\u00e1gina final.<\/li>\n<li><strong>L\u00edneas 31 &#8211; 34<\/strong>: Aunque esto es simple, es muy importante.  Aqu\u00ed es donde especifica las plantillas de p\u00e1gina que desea agregar y el <strong>ruta relativa al archivo<\/strong> donde se encuentra el archivo de plantilla de p\u00e1gina (a modo de ejemplo, &#8216;algo.php&#8217;).  He incluido un ejemplo (que se utilizar\u00e1 en el complemento de ejemplo).  Vea a continuaci\u00f3n un ejemplo general:<\/li>\n<\/ol>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">$this-&gt;templates = array(\r\n\t'FILE_PATH_AND_NAME'               =&gt; 'TEMPLATE_TITLE',\r\n\t'awesome-template.php'             =&gt; 'Awesome',\r\n\t'templates\/organised-template.php' =&gt; 'Organised',\r\n);<\/code><\/pre>\n<p>(Comer, dormir) Codificar, repetir seg\u00fan sea necesario.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"register-project-templates\"><\/span>register_project_templates ()<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>He aludido a este m\u00e9todo previamente;  veamos qu\u00e9 hace realmente.<\/p>\n<p>B\u00e1sicamente, el prop\u00f3sito de este m\u00e9todo es manipular el cach\u00e9 de WordPress, insertando los datos relevantes sobre nuestras plantillas de p\u00e1gina en los lugares correctos.  Primero eche un vistazo al c\u00f3digo y despu\u00e9s lo explicar\u00e9.<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">public function register_project_templates( $atts ) {\r\n\r\n\t\/\/ Create the key used for the themes cache\r\n\t$cache_key = 'page_templates-' . md5( get_theme_root() . '\/' . get_stylesheet() );\r\n\r\n\t\/\/ Retrieve the cache list. \r\n\t\/\/ If it doesn't exist, or it's empty prepare an array\r\n\t$templates = wp_get_theme()-&gt;get_page_templates();\r\n\tif ( empty( $templates ) ) {\r\n\t\t$templates = array();\r\n\t} \r\n\r\n\t\/\/ New cache, therefore remove the old one\r\n\twp_cache_delete( $cache_key , 'themes');\r\n\r\n\t\/\/ Now add our template to the list of templates by merging our templates\r\n\t\/\/ with the existing templates array from the cache.\r\n\t$templates = array_merge( $templates, $this-&gt;templates );\r\n\r\n\t\/\/ Add the modified cache to allow WordPress to pick it up for listing\r\n\t\/\/ available templates\r\n\twp_cache_add( $cache_key, $templates, 'themes', 1800 );\r\n\r\n\treturn $atts;\r\n\r\n}<\/code><\/pre>\n<p>En ese mismo momento.  La l\u00ednea 4 es el primer lugar para buscar.  Como habr\u00e1s adivinado, estamos generando una &#8216;clave de cach\u00e9&#8217;.  Esto se utilizar\u00e1 como un identificador \u00fanico para <strong>nuestro<\/strong> datos de plantilla de p\u00e1gina.  El uso de la funci\u00f3n md5 () simplemente crea un identificador de cadena \u00fanico para evitar enfrentamientos.<\/p>\n<p>A continuaci\u00f3n, en la l\u00ednea 8, estamos buscando y recuperando la cach\u00e9 de la plantilla de p\u00e1gina (si ya existe): esto devolver\u00e1 una matriz de rutas y t\u00edtulos.  En las l\u00edneas 9-11, verificamos si hubo alg\u00fan resultado de la consulta de cach\u00e9.  Si es as\u00ed, genial.  Si no es as\u00ed, cree una matriz local para contener los datos que fusionaremos en la cach\u00e9.<\/p>\n<p>El siguiente paso es crucial.  En la l\u00ednea 14 nosotros <strong>Borrar<\/strong> la cach\u00e9 de plantilla de p\u00e1gina existente.  No se preocupe, no se pierden datos, se almacenan en la variable $ templates.<\/p>\n<p>En la l\u00ednea 18 fusionamos el cach\u00e9 de plantillas de p\u00e1gina existente con nuestras nuevas entradas, y en la l\u00ednea 22 volvemos a insertar todo el cach\u00e9 de plantillas de p\u00e1gina en el sistema de WordPress.<\/p>\n<p>\u00a1Sencillo!<\/p>\n<h3><span class=\"ez-toc-section\" id=\"view-project-template\"><\/span>view_project_template ()<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ahora estamos en nuestro m\u00e9todo final;  aqu\u00ed es donde le decimos a WordPress d\u00f3nde est\u00e1 el archivo de plantilla de p\u00e1gina real.<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">\/**\r\n * Checks if the template is assigned to the page\r\n *\/\r\npublic function view_project_template( $template ) {\r\n\t\r\n\t\/\/ Get global post\r\n\tglobal $post;\r\n\r\n\t\/\/ Return template if post is empty\r\n\tif ( ! $post ) {\r\n\t\treturn $template;\r\n\t}\r\n\r\n\t\/\/ Return default template if we don't have a custom one defined\r\n\tif ( !isset( $this-&gt;templates[get_post_meta( \r\n\t\t$post-&gt;ID, '_wp_page_template', true \r\n\t)] ) ) {\r\n\t\treturn $template;\r\n\t} \r\n\r\n\t$file = plugin_dir_path(__FILE__). get_post_meta( \r\n\t\t$post-&gt;ID, '_wp_page_template', true\r\n\t);\r\n\r\n\t\/\/ Just to be safe, we check if the file exist first\r\n\tif ( file_exists( $file ) ) {\r\n\t\treturn $file;\r\n\t} else {\r\n\t\techo $file;\r\n\t}\r\n\r\n\t\/\/ Return template\r\n\treturn $template;\r\n\r\n}<\/code><\/pre>\n<p>Bien, entonces, este m\u00e9todo se comparar\u00e1 con la variable $ post global (l\u00ednea 6).  Comprueba si se ha configurado una plantilla de p\u00e1gina (&#8216;_wp_page_template&#8217;) para la publicaci\u00f3n (lo que significa que debe ser una p\u00e1gina).  Si no es as\u00ed, no importa: las no p\u00e1ginas no pueden tener plantillas de p\u00e1gina.<\/p>\n<p>La l\u00ednea 16 especifica la ubicaci\u00f3n del archivo de plantilla de p\u00e1gina.  Como he establecido previamente, verifica el archivo de plantilla de p\u00e1gina especificado en el directorio ra\u00edz de su complemento.  (A pesar de todo, esto se puede cambiar f\u00e1cilmente; consulte a continuaci\u00f3n).<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">\/\/ Just changing the page template path\r\n\/\/ WordPress will now look for page templates in the subfolder 'templates',\r\n\/\/ instead of the root\r\n$file = plugin_dir_path(__FILE__). 'templates\/' .get_post_meta( \r\n\t$post-&gt;ID, '_wp_page_template', true \r\n);<\/code><\/pre>\n<p>Posteriormente de esto, en las l\u00edneas 21-24, solo tenemos un poco de validaci\u00f3n que verifica si el archivo realmente existe.  Si es as\u00ed, \u00a1genial!  Si no es as\u00ed, vaya\u2026 Lo m\u00e1s probable es que reciba un mensaje de error de PHP si WordPress no puede encontrar el archivo de plantilla, o incluso una pantalla en blanco.  Si alguno de estos s\u00edntomas le suena familiar, simplemente verifique la ruta del archivo de la plantilla imprimiendo la variable $ file en la pantalla.<\/p>\n<p>Si planea usar este c\u00f3digo comercialmente (lo cual es libre de hacer, mi versi\u00f3n del c\u00f3digo viene sin licencia, de este modo, puede hacer con \u00e9l lo que quiera), realmente recomiendo invertir algo de tiempo en el manejo de errores para obtener el m\u00e1ximo fiabilidad.<\/p>\n<p>Eso es eso.  Con nuestra clase completada, solo queda una cosa por hacer: agregarla al encabezado de WordPress.<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">add_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) );<\/code><\/pre>\n<p>\u00a1Felicidades si lo lograste!  Espero que haya encontrado \u00fatil lo que tengo que decir y se beneficie de ello en el futuro.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"CODIGO-COMPLETO\"><\/span>C\u00d3DIGO COMPLETO<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A continuaci\u00f3n se muestra el c\u00f3digo completo del complemento para copiar y pegar f\u00e1cilmente.<\/p>\n<pre class=\"prism-pre line-numbers language-php\"><code class=\"language-php\">&lt;?php\r\n\/*\r\nPlugin Name: Page Template Plugin : 'Good To Be Bad'\r\nPlugin URI: http:\/\/www.wpexplorer.com\/wordpress-page-templates-plugin\/\r\nVersion: 1.1.0\r\nAuthor: R Marketing Digital\r\nAuthor URI: http:\/\/www.wpexplorer.com\/\r\n*\/\r\n\r\nclass PageTemplater {\r\n\r\n\t\/**\r\n\t * A reference to an instance of this class.\r\n\t *\/\r\n\tprivate static $instance;\r\n\r\n\t\/**\r\n\t * The array of templates that this plugin tracks.\r\n\t *\/\r\n\tprotected $templates;\r\n\r\n\t\/**\r\n\t * Returns an instance of this class. \r\n\t *\/\r\n\tpublic static function get_instance() {\r\n\r\n\t\tif ( null == self::$instance ) {\r\n\t\t\tself::$instance = new PageTemplater();\r\n\t\t} \r\n\r\n\t\treturn self::$instance;\r\n\r\n\t} \r\n\r\n\t\/**\r\n\t * Initializes the plugin by setting filters and administration functions.\r\n\t *\/\r\n\tprivate function __construct() {\r\n\r\n\t\t$this-&gt;templates = array();\r\n\r\n\r\n\t\t\/\/ Add a filter to the attributes metabox to inject template into the cache.\r\n\t\tif ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.7', '&lt;' ) ) {\r\n\r\n\t\t\t\/\/ 4.6 and older\r\n\t\t\tadd_filter(\r\n\t\t\t\t'page_attributes_dropdown_pages_args',\r\n\t\t\t\tarray( $this, 'register_project_templates' )\r\n\t\t\t);\r\n\r\n\t\t} else {\r\n\r\n\t\t\t\/\/ Add a filter to the wp 4.7 version attributes metabox\r\n\t\t\tadd_filter(\r\n\t\t\t\t'theme_page_templates', array( $this, 'add_new_template' )\r\n\t\t\t);\r\n\r\n\t\t}\r\n\r\n\t\t\/\/ Add a filter to the save post to inject out template into the page cache\r\n\t\tadd_filter(\r\n\t\t\t'wp_insert_post_data', \r\n\t\t\tarray( $this, 'register_project_templates' ) \r\n\t\t);\r\n\r\n\r\n\t\t\/\/ Add a filter to the template include to determine if the page has our \r\n\t\t\/\/ template assigned and return it's path\r\n\t\tadd_filter(\r\n\t\t\t'template_include', \r\n\t\t\tarray( $this, 'view_project_template') \r\n\t\t);\r\n\r\n\r\n\t\t\/\/ Add your templates to this array.\r\n\t\t$this-&gt;templates = array(\r\n\t\t\t'goodtobebad-template.php' =&gt; 'It's Good to Be Bad',\r\n\t\t);\r\n\t\t\t\r\n\t} \r\n\r\n\t\/**\r\n\t * Adds our template to the page dropdown for v4.7+\r\n\t *\r\n\t *\/\r\n\tpublic function add_new_template( $posts_templates ) {\r\n\t\t$posts_templates = array_merge( $posts_templates, $this-&gt;templates );\r\n\t\treturn $posts_templates;\r\n\t}\r\n\r\n\t\/**\r\n\t * Adds our template to the pages cache in order to trick WordPress\r\n\t * into thinking the template file exists where it doens't really exist.\r\n\t *\/\r\n\tpublic function register_project_templates( $atts ) {\r\n\r\n\t\t\/\/ Create the key used for the themes cache\r\n\t\t$cache_key = 'page_templates-' . md5( get_theme_root() . '\/' . get_stylesheet() );\r\n\r\n\t\t\/\/ Retrieve the cache list. \r\n\t\t\/\/ If it doesn't exist, or it's empty prepare an array\r\n\t\t$templates = wp_get_theme()-&gt;get_page_templates();\r\n\t\tif ( empty( $templates ) ) {\r\n\t\t\t$templates = array();\r\n\t\t} \r\n\r\n\t\t\/\/ New cache, therefore remove the old one\r\n\t\twp_cache_delete( $cache_key , 'themes');\r\n\r\n\t\t\/\/ Now add our template to the list of templates by merging our templates\r\n\t\t\/\/ with the existing templates array from the cache.\r\n\t\t$templates = array_merge( $templates, $this-&gt;templates );\r\n\r\n\t\t\/\/ Add the modified cache to allow WordPress to pick it up for listing\r\n\t\t\/\/ available templates\r\n\t\twp_cache_add( $cache_key, $templates, 'themes', 1800 );\r\n\r\n\t\treturn $atts;\r\n\r\n\t} \r\n\r\n\t\/**\r\n\t * Checks if the template is assigned to the page\r\n\t *\/\r\n\tpublic function view_project_template( $template ) {\r\n\t\t\r\n\t\t\/\/ Get global post\r\n\t\tglobal $post;\r\n\r\n\t\t\/\/ Return template if post is empty\r\n\t\tif ( ! $post ) {\r\n\t\t\treturn $template;\r\n\t\t}\r\n\r\n\t\t\/\/ Return default template if we don't have a custom one defined\r\n\t\tif ( ! isset( $this-&gt;templates[get_post_meta( \r\n\t\t\t$post-&gt;ID, '_wp_page_template', true \r\n\t\t)] ) ) {\r\n\t\t\treturn $template;\r\n\t\t} \r\n\r\n\t\t$file = plugin_dir_path( __FILE__ ). get_post_meta( \r\n\t\t\t$post-&gt;ID, '_wp_page_template', true\r\n\t\t);\r\n\r\n\t\t\/\/ Just to be safe, we check if the file exist first\r\n\t\tif ( file_exists( $file ) ) {\r\n\t\t\treturn $file;\r\n\t\t} else {\r\n\t\t\techo $file;\r\n\t\t}\r\n\r\n\t\t\/\/ Return template\r\n\t\treturn $template;\r\n\r\n\t}\r\n\r\n} \r\nadd_action( 'plugins_loaded', array( 'PageTemplater', 'get_instance' ) );<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"EL-PLUGIN\"><\/span>EL PLUGIN<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Al mismo tiempo puede descargar el c\u00f3digo completo como complemento <a rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\/\/github.com\/wpexplorer\/page-templater\">en Github<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PRIMER-PLANO-DEL-EDITOR\"><\/span>PRIMER PLANO DEL EDITOR<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Aqu\u00ed hay un primer plano del complemento en acci\u00f3n.  \u00bfVe la plantilla de p\u00e1gina agregada en Atributos de p\u00e1gina?<\/p>\n<p><img alt='gtbb1-9342144' loading=\"lazy\" class=\"fancyimg fullimg\" src='https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/GTBB1-9342144.jpg' alt=\"GTBB1\" width=\"1898\" height=\"959\"><\/p>\n<\/div>\n<p><script type=\"application\/ld+json\">{\"@context\":\"http:\/\/schema.org\",\"@type\":\"BlogPosting\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wpexplorer.com\/wordpress-page-templates-plugin\/\"},\"headline\":\"Add Page Templates to WordPress with a Plugin\",\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\/\/www.wpexplorer.com\/wp-content\/uploads\/HBTPageTemplater.png\",\"width\":900,\"height\":504},\"datePublished\":\"2014-02-25T15:09:50-06:00\",\"dateModified\":\"2019-06-15T21:43:25-06:00\",\"author\":{\"type\":\"Person\",\"name\":\"harri\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"R Marketing Digital\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\/\/www.wpexplorer.com\/wp-content\/themes\/wpexplorer\/images\/wpexplorer-organization-logo.png\",\"width\":400,\"height\":60}},\"description\":\"Harri takes you through the code you need to dynamically create WordPress Page Templates directly through PHP without having to access the theme itself.\"}<\/script><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Actualizar: El c\u00f3digo se ha actualizado recientemente para funcionar en WordPress 4.7+ \u00bfAlguna vez ha querido crear sus propias plantillas de p\u00e1gina, pero no ha tenido acceso al tema en&#8230;<\/p>","protected":false},"author":1,"featured_media":90226,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1351],"tags":[],"class_list":["post-90225","post","type-post","status-publish","format-standard","has-post-thumbnail","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Agregar plantillas de p\u00e1gina a WordPress con un complemento - R Marketing Digital<\/title>\n<meta name=\"description\" content=\"Actualizar: El c\u00f3digo se ha actualizado recientemente para funcionar en WordPress 4.7+ \u00bfAlguna vez ha querido crear sus propias plantillas de p\u00e1gina, pero\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Agregar plantillas de p\u00e1gina a WordPress con un complemento\" \/>\n<meta property=\"og:description\" content=\"Actualizar: El c\u00f3digo se ha actualizado recientemente para funcionar en WordPress 4.7+ \u00bfAlguna vez ha querido crear sus propias plantillas de p\u00e1gina, pero\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/\" \/>\n<meta property=\"og:site_name\" content=\"R Marketing Digital\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-04T19:19:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/HBTPageTemplater-6754373.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"504\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"R Marketing Digital\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/\"},\"author\":{\"name\":\"R Marketing Digital\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"headline\":\"Agregar plantillas de p\u00e1gina a WordPress con un complemento\",\"datePublished\":\"2022-09-04T19:19:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/\"},\"wordCount\":1396,\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/HBTPageTemplater-6754373.png\",\"articleSection\":[\"Wordpress\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/\",\"name\":\"Agregar plantillas de p\u00e1gina a WordPress con un complemento - R Marketing Digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/HBTPageTemplater-6754373.png\",\"datePublished\":\"2022-09-04T19:19:51+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"description\":\"Actualizar: El c\u00f3digo se ha actualizado recientemente para funcionar en WordPress 4.7+ \u00bfAlguna vez ha querido crear sus propias plantillas de p\u00e1gina, pero\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/wordpress\\\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/HBTPageTemplater-6754373.png\",\"contentUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/HBTPageTemplater-6754373.png\",\"width\":900,\"height\":504,\"caption\":\"hbtpagetemplater-6754373-8883455-png\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/\",\"name\":\"R Marketing Digital\",\"description\":\"Agencia SEO | Publicidad redes sociales | Community Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rmarketingdigital.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\",\"name\":\"R Marketing Digital\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"caption\":\"R Marketing Digital\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Add Page Templates to WordPress with a Plugin - R Marketing Digital","description":"Update: The code has recently been updated to work on WordPress 4.7+ Have you ever wanted to create your own page templates, but","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/","og_locale":"en_US","og_type":"article","og_title":"Agregar plantillas de p\u00e1gina a WordPress con un complemento","og_description":"Actualizar: El c\u00f3digo se ha actualizado recientemente para funcionar en WordPress 4.7+ \u00bfAlguna vez ha querido crear sus propias plantillas de p\u00e1gina, pero","og_url":"https:\/\/rmarketingdigital.com\/en\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/","og_site_name":"R Marketing Digital","article_published_time":"2022-09-04T19:19:51+00:00","og_image":[{"width":900,"height":504,"url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/HBTPageTemplater-6754373.png","type":"image\/png"}],"author":"R Marketing Digital","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#article","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/"},"author":{"name":"R Marketing Digital","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"headline":"Agregar plantillas de p\u00e1gina a WordPress con un complemento","datePublished":"2022-09-04T19:19:51+00:00","mainEntityOfPage":{"@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/"},"wordCount":1396,"image":{"@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/HBTPageTemplater-6754373.png","articleSection":["Wordpress"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/","url":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/","name":"Add Page Templates to WordPress with a Plugin - R Marketing Digital","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#primaryimage"},"image":{"@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/HBTPageTemplater-6754373.png","datePublished":"2022-09-04T19:19:51+00:00","author":{"@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"description":"Update: The code has recently been updated to work on WordPress 4.7+ Have you ever wanted to create your own page templates, but","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rmarketingdigital.com\/wordpress\/agregar-plantillas-de-pagina-a-wordpress-con-un-complemento\/#primaryimage","url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/HBTPageTemplater-6754373.png","contentUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/09\/HBTPageTemplater-6754373.png","width":900,"height":504,"caption":"hbtpagetemplater-6754373-8883455-png"},{"@type":"WebSite","@id":"https:\/\/rmarketingdigital.com\/#website","url":"https:\/\/rmarketingdigital.com\/","name":"R Digital Marketing","description":"SEO Agency | Advertising social networks | Community Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rmarketingdigital.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e","name":"R Digital Marketing","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","caption":"R Marketing Digital"}}]}},"_links":{"self":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/posts\/90225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/comments?post=90225"}],"version-history":[{"count":0,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/posts\/90225\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/media\/90226"}],"wp:attachment":[{"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/media?parent=90225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/categories?post=90225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/en\/wp-json\/wp\/v2\/tags?post=90225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}