{"id":347,"date":"2018-03-11T22:01:44","date_gmt":"2018-03-11T21:01:44","guid":{"rendered":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/?p=347"},"modified":"2018-03-16T13:20:54","modified_gmt":"2018-03-16T12:20:54","slug":"personalizacion-del-sitio-web-mediante-php","status":"publish","type":"post","link":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/","title":{"rendered":"Personalizaci\u00f3n del sitio web mediante PHP"},"content":{"rendered":"<p>Acabamos de ver en los art\u00edculos anteriores que es posible modificar el comportamiento del framework Genesis mediante la <a href=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-de-los-sitios-mediante-css\/\">manipulaci\u00f3n del CSS<\/a>, a\u00f1adiendo <a href=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-de-los-sitios-mediante-javascript\/\">scripts en JavaScript<\/a> o modificando el comportamiento de las <a href=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-tema-mediante-php\/\">\u00e1reas de hooks<\/a>. Y esto no es todo, ya que tambi\u00e9n es posible crear funciones que no solo afecten al comportamiento de los temas de la familia Genesis, sino a cualquier otro aspecto de WordPress: es decir, el funconamiento del n\u00facleo de la aplicaci\u00f3n, o de cualquiera de sus temas y plugins. Para hacerlo con seguridad y de forma eficiente, utilizaremos el plugin <a href=\"https:\/\/wordpress.org\/plugins\/code-snippets\/\" target=\"_blank\" rel=\"noopener\">Code Snippets<\/a>, que ha sido instalado y activado en los sitios de pr\u00e1ctica de los alumnos y alumnas del curso.<!--more--><\/p>\n<h2><span id=\"2_Manipular_el_codigo_CSS_de_forma_segura_y_eficiente\" class=\"ez-toc-section\">1. Manipular el c\u00f3digo PHP de forma segura y eficiente<\/span><\/h2>\n<p>WordPress incorpora un editor interno que permite modificar los ficheros de los temas o de los plugins directamente, desde el propio interfaz de administraci\u00f3n de WordPress. Sin embargo, en las instalaciones de WordPress del PNTE este procedimiento est\u00e1 desactivado, no solo por motivos de seguridad, sino para evitar que la manipulaci\u00f3n del c\u00f3digo CSS o PHP haga imposible el mantenimiento futuro de los sitios web. En efecto, si el c\u00f3digo se modifica directamente, sin ninguna clase de control y sin posibilidad de diferenciar el c\u00f3digo original de sus modificaciones, es imposible para los servicios del PNTE realizar las actualizaciones necesarias y prestar el adecuado soporte a los responsables de los sitios web entonces.<\/p>\n<p>\u00bfQu\u00e9 hacer entonces si se quiere personalizar el funcionamiento de un sitio web m\u00e1s all\u00e1 de las opciones que ofrece el tema seleccionado o los plugins disponibles? La respuesta la proporciona el plugin Code Snippets, que una vez activado aparece en el men\u00fa de administraci\u00f3n mediante la etiqueta <em>Snippets<\/em>.<\/p>\n<h2>2. El plugin Code Snippets<\/h2>\n<p>El plugin Code Snippets permite definir funciones personalizadas en c\u00f3digo PHP, y activarlas una por una, lo cual es muy \u00fatil para modificar el comportamiento de un sitio web hasta sus m\u00e1s rec\u00f3nditos rincones. Aunque esta tarea se puede llevar a cabo de diversas maneras, las ventajas de trabajar con este plugin son muchas:<\/p>\n<ul>\n<li>Ejecuta las funciones definidas al final del proceso de carga de WordPress. Esto significa que dichas funciones pueden modificar cualesquiera otras que existan en el n\u00facleo de la aplicaci\u00f3n o en cualquiera de los temas o plugins instalados.<\/li>\n<li>Permite estructurar en unidades discretas (que se denominan <em>snippets<\/em>) las modificaciones a que se somete un sitio web. En la pr\u00e1ctica, esto significa que si hay que definir cinco funciones para personalizar un sitio web, habr\u00e1 que crear cinco snippets,\u00a0cada uno de ellos diferenciado de los dem\u00e1s. Esto simplifica el c\u00f3digo y permite gestionarlo de manera muy simple y eficiente. Adem\u00e1s, la divisi\u00f3n del c\u00f3digo personalizado en fragmentos peque\u00f1os reduce las posibilidades de cometer errores graves.<\/li>\n<li>Ofrece una gran facilidad de gesti\u00f3n de los fragmentos de c\u00f3digo, ya que los snippets se tratan de forma muy parecida a las entradas o p\u00e1ginas. Es decir, los snippets se pueden crear, modificar, eliminar y publicar en modo \u00abborrador\u00bb, lo cual significa que no est\u00e1n activos. Adem\u00e1s, los snippets se pueden activar o desactivar selectivamente.<\/li>\n<li>Incorpora un editor de c\u00f3digo que facilita la escritura y advierte de algunos posibles errores (conviene tener en cuenta que el plugin no es capaz de impedir todos los errores que un ser humano es capaz de cometer). Adem\u00e1s, el editor incorpora un mecanismo de seguridad que detecta algunos errores de sintaxis e impide que se ejecuten los snippets que tienen ciertos fallos (no todos).<\/li>\n<li>Permite activar o desactivar a voluntad cada uno de los snippets de c\u00f3digo definidos. Esto facilita el mantenimiento del sitio, ya que en funci\u00f3n de las necesidades existentes a lo largo de su vida pueden eliminarse o a\u00f1adirse scripts a voluntad.<\/li>\n<li>Los snippets se pueden activar para el \u00e1rea de administraci\u00f3n (el backend), las p\u00e1ginas p\u00fablicas (el frontend), o para backend y frontend a la vez.\u00a0 Tambi\u00e9n existe la posibilidad de ejecutar algunos snippets una \u00fanica vez, lo cual resulta muy \u00fatil para aquellas funciones que solo deben ejecutarse en una \u00fanica ocasi\u00f3n.<\/li>\n<li>En las instalaciones multisitio, el plugin permite definir funciones globales que se ejecutan a nivel de todo el multisitio, y, si se desea, para todos y cada uno de los sitios o blogs existentes.<\/li>\n<li>Los snippets son independientes de los temas; por tanto, una funci\u00f3n bien definida puede seguir funcionando incluso aunque el tema cambie. Por supuesto, tambi\u00e9n es posible definir funciones vinculadas al tema activado en un sitio web.<\/li>\n<li>El plugin dispone de un mecanismo para describir y etiquetar los snippets, lo cual resulta muy \u00fatil para hacer comentarios, citar fuentes, etc.<\/li>\n<li>Permite importar y exportar los snippets definidos en formato <a href=\"https:\/\/es.wikipedia.org\/wiki\/JSON\" target=\"_blank\" rel=\"noopener\">JSON<\/a>, con lo cual estos son reutilizables en otros sitios web, tanto si tienen instalado el plugin como si no lo tienen; para que esta segunda opci\u00f3n sea viable, los snippets, en lugar de exportarse, deben descargarse, lo cual genera un fichero en c\u00f3digo PHP.<\/li>\n<li>El plugin incorpora un mecanismo de seguridad para desactivar todos los snippets en caso de que se haya generado un error de sistema irrecuperable. El procedimiento para ello consiste en a\u00f1adir una constante al fichero de configuraci\u00f3n de WordPress,\u00a0<a href=\"https:\/\/codex.wordpress.org\/Editing_wp-config.php\" target=\"_blank\" rel=\"noopener\">wp-config.php<\/a>. Aunque la manipulaci\u00f3n de este fichero requiere conocimientos avanzados de administraci\u00f3n de WordPress, la reparaci\u00f3n de errores catastr\u00f3ficos es sencill\u00edsima para quien sabe ponerla en pr\u00e1ctica.<\/li>\n<li>Dispone de una ayuda contextual que, adem\u00e1s de explicar las funciones principales del plugin, proporciona enlaces a varios sitios que contienen colecciones de snippets muy interesantes:\u00a0<a href=\"http:\/\/wp-snippets.com\/\">WP-Snippets<\/a>, <a href=\"http:\/\/wpsnipp.com\/\">WP Snipp<\/a>, <a href=\"http:\/\/www.catswhocode.com\/blog\/snippets\">Cats Who Code<\/a> y <a href=\"http:\/\/www.wpfunction.me\/\">WP Function Me<\/a>.<\/li>\n<\/ul>\n<h2>3. C\u00f3mo se utiliza el plugin Code Snippets<\/h2>\n<p>Dejando a un lado las dificultades inherentes a programar en PHP, utilizar el plugin es muy sencillo. Basta con ir al men\u00fa <em>Snippets<\/em>, crear un nuevo snippet haciendo clic en el bot\u00f3n <em>A\u00f1adir nuevo<\/em>, escribir el c\u00f3digo, la descripci\u00f3n (siempre que hay que declarar lo que hace el c\u00f3digo y, en su caso, de d\u00f3nde lo hemos tomado) y las etiquetas, y por \u00faltimo guardarlo. El snippet se puede guardar sin activar, o guardarlo y activarlo a la vez; en este segundo caso, la funci\u00f3n definida por el c\u00f3digo estar\u00e1 operativa y ser\u00e1 plenamente funcional (siempre que haya sido correctamente programada, claro est\u00e1). A continuaci\u00f3n podemos ver un videotutorial que explica claramente el procedimiento:<\/p>\n<div class=\"wptuts-video-container\"><iframe src=\"\/\/www.youtube.com\/embed\/n9Z5tmU38UU\" height=\"240\" width=\"320\" allowfullscreen=\"\" frameborder=\"0\"><\/iframe><\/div>\r\n    <!--.wptuts-video-container-->\n<h2><span id=\"3_Ejemplos_de_codigo_para_las_areas_de_hooks\" class=\"ez-toc-section\">4. Ejemplos de c\u00f3digo para utilizar con Code Snippets<\/span><\/h2>\n<p>Con el plugin Code Snippets se pueden definir funciones muy sencillas o muy complicadas, dependiendo de las necesidades del caso. Los ejemplos que vamos a incluir a continuaci\u00f3n los presentaremos por orden creciente de complejidad, a fin de garantizar que todos los niveles de aprendizaje quedan cubiertos y atendidos.<\/p>\n<p>1. Eliminaci\u00f3n de la barra de administraci\u00f3n.\u00a0Este snippet, que suprime la barra de administraci\u00f3n en el frontend de WordPress, ha sido tomado de <a href=\"http:\/\/www.wpfunction.me\/.\" target=\"_blank\" rel=\"noopener\">WP FUNCTION ME<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_filter( 'show_admin_bar', '__return_false' );<\/pre>\n<p>2. Personalizaci\u00f3n del formulario de b\u00fasqueda de cualquiera de los temas de la familia Genesis. Este snippet permite modificar el texto que aparece dentro de la caja del formulario de b\u00fasqueda de WordPress, y ha sido tomado de <a href=\"https:\/\/my.studiopress.com\/documentation\/snippets\/search-form\/customize-the-search-form-input-box\/\" target=\"_blank\" rel=\"noopener\">Customize The Search Form\u00a0Input Box<\/a>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_filter( 'genesis_search_text', 'elarequi_search_text' );\r\n\r\nfunction elarequi_search_text( $text ) {\r\n  return esc_attr( '\u00a1A buscar...!' );\r\n}<\/pre>\n<p>3. Refuerzo de la seguridad de WordPress ante inicios de sesi\u00f3n incorrectos. Cuando se intenta iniciar sesi\u00f3n en WordPress y se introduce un nombre de usuario o contrase\u00f1a incorrectos, WordPress advierte del tipo de error cometido, lo cual puede dar pistas a los hackers. Para reforzar la seguridad del sitio, se puede utilizar este script, que no da ninguna pista sobre el tipo de informaci\u00f3n que se ha introducido err\u00f3neamente. El c\u00f3digo ha sido tomado de\u00a0<a href=\"http:\/\/www.wpbeginner.com\/wp-tutorials\/25-extremely-useful-tricks-for-the-wordpress-functions-file\/\" target=\"_blank\" rel=\"noopener\">32 Extremely Useful Tricks for the WordPress Functions File<\/a>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">function elarequi_no_wordpress_errors(){\r\n  return '\u00a1Algo ha salido mal, pero no te vamos a dar pistas!';\r\n}\r\n\r\nadd_filter( 'login_errors', 'elarequi_no_wordpress_errors' );<\/pre>\n<p>4. Modificaci\u00f3n del contenido de la etiqueta \u00abmore\u00bb, para personalizarla. Este snippet sustituye el texto que aparece tras la etiqueta \u00abmore\u00bb por un texto personalizado. El snippet ha sido adaptado del ejemplo que aparece en\u00a0<a href=\"http:\/\/www.wpbeginner.com\/wp-tutorials\/25-extremely-useful-tricks-for-the-wordpress-functions-file\/\" target=\"_blank\" rel=\"noopener\">32 Extremely Useful Tricks for the WordPress Functions File<\/a>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">function elarequi_modify_read_more_link() {\r\n    return '&lt;a class=\"more-link\" href=\"' . get_permalink() . '\"&gt;Sigue leyendo, hay m\u00e1s&lt;\/a&gt;';\r\n}\r\nadd_filter( 'the_content_more_link', 'elarequi_modify_read_more_link' );<\/pre>\n<p>5. Eliminaci\u00f3n del men\u00fa \u00abEnlaces\u00bb de WordPress. Este snippet, que permite suprimir el men\u00fa \u00abEnlaces\u00bb del backend (de hecho, WordPress ha prescindido de esta funci\u00f3n en las instalaciones \u00abnormales\u00bb desde la <a href=\"https:\/\/codex.wordpress.org\/Version_3.5\" target=\"_blank\" rel=\"noopener\">versi\u00f3n 3.5<\/a>), ha sido copiado de <a href=\"http:\/\/wpsnipp.com\/index.php\/functions-php\/remove-links-manager-admin-menu\/\" target=\"_blank\" rel=\"noopener\">How To Remove Links Manager Admin Menu<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_action( 'admin_menu', 'elarequi_remove_links_menu' );\r\n\r\nfunction elarequi_remove_links_menu() {\r\n  remove_menu_page('link-manager.php');\r\n}<\/pre>\n<p>6. Creaci\u00f3n del shortcode [agradecimiento]. Al incluir este shortcode al final de una entrada, se genera autom\u00e1ticamente el siguiente texto: \u00abGracias por leer este art\u00edculo. Esperamos que vuelvas pronto por nuestro sitio web.\u00bb. El shortcode ha sido creado siguiendo las instrucciones del art\u00edculo\u00a0<a href=\"https:\/\/boluda.com\/tutorial\/crear-shortcodes-de-contenido-en-wordpress\/\" target=\"_blank\" rel=\"noopener\">Crear shortcodes de contenido en WordPress<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">function elarequi_shortcode_de_agradecimiento() {\r\n  return '&lt;p&gt;Gracias por leer este art\u00edculo. Esperamos que vuelvas pronto por nuestro sitio web.&lt;\/p&gt;';\r\n}\r\n\r\nadd_shortcode('agradecimiento', 'elarequi_shortcode_de_agradecimiento');<\/pre>\n<p>7. Definici\u00f3n de un nuevo tama\u00f1o de imagen para el tema eleven40 Pro, del <a href=\"http:\/\/consejoescolar.educacion.navarra.es\/web1\/\" target=\"_blank\" rel=\"noopener\">Consejo Escolar de Navarra<\/a>. Este snippet permite definir dos tama\u00f1os personalizados de im\u00e1genes (uno de 809&#215;350 p\u00edxels, y el otro de 388&#215;144 p\u00edxels, acordes con el dise\u00f1o del citado tema. Con estos dos tama\u00f1os de imagen se puede generar un dise\u00f1o de entradas en cuadr\u00edcula con un elemento inicial destacado, tal como se ve en la p\u00e1gina de inicio de este tema. El snippet est\u00e1 basado en las instrucciones de\u00a0<a href=\"https:\/\/wpsites.net\/web-design\/how-to-change-the-image-size-in-genesis-blog-archives\/\" target=\"_blank\" rel=\"noopener\">How to Change the Image Size in Genesis Blog Archives<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">\/\/ Se define un nuevo tama\u00f1o para la miniatura de la primera imagen de la p\u00e1gina de inicio\r\nadd_image_size( 'grid-featured-first-post', 809, 350, TRUE );\r\n\r\n\/\/ Se define un nuevo tama\u00f1o para las miniaturas de la p\u00e1gina de inicio\r\n\r\nadd_image_size( 'grid-featured-new', 388, 144, TRUE );<\/pre>\n<p>8. Modificaci\u00f3n del pie de p\u00e1gina del framework Genesis. Este c\u00f3digo permite personalizar los cr\u00e9ditos del pie de p\u00e1gina en cualquiera de los temas de la familia Genesis. Ha sido tomado de <a href=\"https:\/\/my.studiopress.com\/documentation\/snippets\/footer\/customize-the-credits-text\/\" target=\"_blank\" rel=\"noopener\">Customize The Credits Text<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_filter('genesis_footer_creds_text', 'elarequi_footer_creds_filter');\r\n\r\nfunction elarequi_footer_creds_filter( $creds ) {\r\n  $creds = 'Pie de p\u00e1gina modificado de acuerdo con el procedimiento descrito en el &lt;a href=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/\" title=\"Curso de WordPress 2018\" target=\"_blank\"&gt;Curso de WordPress 2018&lt;\/a&gt;';\r\n  return $creds;\r\n}<\/pre>\n<p>9. Activaci\u00f3n de un dise\u00f1o por defecto para los art\u00edculos individuales del sitio web. Este c\u00f3digo sirve para que todos los art\u00edculos de este sitio web (tanto entradas como p\u00e1ginas) adquieran el dise\u00f1o con barra lateral a la derecha, aun a pesar de que el dise\u00f1o por defecto del tema sea sin barras laterales. El snippet se ha adaptado a partir de\u00a0<a href=\"https:\/\/wpsites.net\/web-design\/change-layout-genesis\/\" target=\"_blank\" rel=\"noopener\">Change Layout On Posts, Pages &amp; Archives in Genesis<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_filter( 'genesis_pre_get_option_site_layout', 'elarequi_full_width_layout_single_posts' );\r\n\r\nfunction elarequi_full_width_layout_single_posts( $opt ) {\r\nif ( is_singular( array ('post', 'page' ) ) ) {\r\n    $opt = 'content-sidebar'; \r\n    return $opt;\r\n    } \r\n}<\/pre>\n<p>10. Configuraci\u00f3n de un orden personalizado de entradas. Este c\u00f3digo permite que las entradas aparezcan en el frontend en el mismo orden cronol\u00f3gico en que han sido publicadas, es decir, al rev\u00e9s que como WordPress lo hace por defecto. El snippet se utiliza en este mismo sitio web, y ha sido adaptado de\u00a0<a href=\"http:\/\/www.wpexplorer.com\/order-custom-post-type-posts-wordpress\/\" target=\"_blank\" rel=\"noopener\">How To Reorder Standard &amp; Custom Post Type Posts In WordPress<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">function elarequi_order_category( $query ) {\r\n  \/\/ La funci\u00f3n solo se ejecuta en el frontend, y siempre que sea la consulta principal\r\n  if ( is_admin() || ! $query-&gt;is_main_query() ) {\r\n    return;\r\n  }\r\n  \/\/ Las p\u00e1ginas de archivo se ordenan por fecha, en sentido ascendente\r\n  if ( is_category() || is_home() || is_archive() ) {\r\n    $query-&gt;set( 'order' , 'asc' );\r\n    $query-&gt;set( 'orderby', 'date');\r\n    return;\r\n  }\r\n}\r\nadd_action( 'pre_get_posts', 'elarequi_order_category', 1 );<\/pre>\n<p>11. Exclusi\u00f3n de ciertas categor\u00edas de las p\u00e1ginas de archivo o \u00edndice. El c\u00f3digo, que se utiliza en este mismo sitio web, sirve para que en las p\u00e1ginas de archivo (los listados de entradas) no aparezcan los art\u00edculos correspondientes a la categor\u00eda \u00abActividades\u00bb, cuyo identificador es el 3; naturalmente, en la p\u00e1gina de la categor\u00eda \u00abActividades\u00bb las entradas s\u00ed deben aparecer. El snippet ha sido adaptado a partir de las instrucciones de estos dos art\u00edculos:\u00a0<span class=\"head-background\"><a href=\"https:\/\/www.wpstuffs.com\/exclude-posts-category-front-page-genesis\/\" target=\"_blank\" rel=\"noopener\">How to Exclude Posts of Particular Category from Front Page : Genesis Framework<\/a> y\u00a0<\/span><a href=\"https:\/\/designorbital.com\/snippets\/exclude-specific-categories-from-the-wordpress-loop\/\" target=\"_blank\" rel=\"noopener\">Exclude Specific Categories From The WordPress Loop<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_action( 'pre_get_posts', 'elarequi_exclude_category_from_blog' );\r\n\r\nfunction elarequi_exclude_category_from_blog( $query ) {\r\n    if( $query-&gt;is_main_query() &amp;&amp; $query-&gt;is_home() || ( is_archive() &amp;&amp; ! is_category('actividades') ) ) {\r\n    $query-&gt;set( 'cat', '-3' );\r\n    }\r\n}<\/pre>\n<p>12. Modificaci\u00f3n de las dimensiones predeterminadas del \u00e1rea de cabecera del tema News Pro, utilizado en el sitio web del <a href=\"https:\/\/biurdanabhi.educacion.navarra.es\/web1\/\" target=\"_blank\" rel=\"noopener\">IES Biurdana<\/a>. Este c\u00f3digo modifica el tama\u00f1o inicialmente previsto, a fin de que el centro pueda utilizar una imagen de cabecera de 1140 p\u00edxels de ancho y 250 p\u00edxels de alto. Para que funcione adecuadamente, el snippet debe operar en coordinaci\u00f3n con una serie de estilos CSS personalizados. Las instrucciones para hacerlo pueden leerse en el art\u00edculo\u00a0<a href=\"https:\/\/wpsites.net\/web-design\/news-pro-full-container-width-header-image\/\" target=\"_blank\" rel=\"noopener\">News Pro Theme Full Width Header Image<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">add_theme_support( 'custom-header', array(\r\n  'header_image'    =&gt; '',\r\n  'header-selector' =&gt; '.site-title a',\r\n  'header-text'     =&gt; false,\r\n  'height'          =&gt; 250,\r\n  'width'           =&gt; 1140,\r\n) );<\/pre>\n<h2>5. Algunos consejos con respecto al uso de Code Snippets<\/h2>\n<p>Antes de plantearse siquiera el uso del plugin Code Snippets para manipular y personalizar una instalaci\u00f3n de WordPress, conviene tener en cuenta algunos consejos b\u00e1sicos:<\/p>\n<ol>\n<li>Se debe actuar con mucha cautela y paso a paso, yendo siempre de lo m\u00e1s f\u00e1cil y conocido a lo m\u00e1s complejo, a fin de cobrar experiencia y confianza. Es necesario tener en\u00a0cuenta que una funci\u00f3n mal definida en PHP puede hacer que un sitio web se torne completamente inoperativo. Aunque el plugin Code Snippets dispone de un mecanismo de seguridad que hace posible recuperarse de un error grave, siempre es mejor ser prudente que correr riesgos.<\/li>\n<li>Hay que verificar exhaustivamente cada script creado y activado, ya que algunos pueden tener efectos que no son perceptibles a primera vista. Para una verificaci\u00f3n detallada y en profundidad, aconsejamos <a href=\"https:\/\/raiolanetworks.es\/docuwp\/tip\/como-activar-el-modo-debug-en-wordpress\/\" target=\"_blank\" rel=\"noopener\">activar el modo de depuraci\u00f3n de WordPress<\/a>, que debe desactivarse inmediatamente despu\u00e9s de haberse utilizado.<\/li>\n<li>No hay que programar funciones o scripts solo porque resulte f\u00e1cil hacerlo, o por el af\u00e1n de singularizar a toda costa el sitio web. Toda personalizaci\u00f3n debe tener tener un claro prop\u00f3sito funcional y no debe ser utilizada como un mero adorno.<\/li>\n<li>Cada vez que se a\u00f1ade c\u00f3digo a una instalaci\u00f3n de WordPress mediante el plugin Code Snippets, hay que incluir la correspondiente descripci\u00f3n, que servir\u00e1 a posteriori para identificar y entender lo que se ha hecho (no nos olvidemos de que la memoria es fr\u00e1gil). Si hemos copiado y adaptado el c\u00f3digo a partir de una fuente externa, tambi\u00e9n conviene anotar la fuente de donde hemos tomado la informaci\u00f3n, porque as\u00ed podremos acudir a ella en el futuro.<\/li>\n<li>Para poder avanzar en el conocimiento de la programaci\u00f3n de scripts y funciones, es necesario investigar, buscar informaci\u00f3n, y hacer pruebas. En Internet hay una verdadera multitud de tutoriales y una cantidad interminable de ejemplos, pero a veces hay que invertir mucho tiempo en encontrar exactamente lo que se est\u00e1 buscando.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.<\/p>\n","protected":false},"author":1,"featured_media":502,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":""},"categories":[7],"tags":[131,130,129,105,132],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Personalizaci\u00f3n del sitio web mediante PHP - Curso de WordPress 2018<\/title>\n<meta name=\"description\" content=\"Personalizaci\u00f3n del sitio web mediante PHP. Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Personalizaci\u00f3n del sitio web mediante PHP - Curso de WordPress 2018\" \/>\n<meta property=\"og:description\" content=\"Personalizaci\u00f3n del sitio web mediante PHP. Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/\" \/>\n<meta property=\"og:site_name\" content=\"Curso de WordPress 2018\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-11T21:01:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-03-16T12:20:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-content\/uploads\/2018\/03\/funciones.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"1067\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Administrador\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Administrador\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/\",\"url\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/\",\"name\":\"Personalizaci\u00f3n del sitio web mediante PHP - Curso de WordPress 2018\",\"isPartOf\":{\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#website\"},\"datePublished\":\"2018-03-11T21:01:44+00:00\",\"dateModified\":\"2018-03-16T12:20:54+00:00\",\"author\":{\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#\/schema\/person\/66915292b50e141a7c1d01acb5eb0f84\"},\"description\":\"Personalizaci\u00f3n del sitio web mediante PHP. Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.\",\"breadcrumb\":{\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Personalizaci\u00f3n del sitio web mediante PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#website\",\"url\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/\",\"name\":\"Curso de WordPress 2018\",\"description\":\"Curso avanzado sobre WordPress en el CAP de Pamplona\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#\/schema\/person\/66915292b50e141a7c1d01acb5eb0f84\",\"name\":\"Administrador\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/636dfeeef5d663d0784baecccc697b02?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/636dfeeef5d663d0784baecccc697b02?s=96&d=identicon&r=g\",\"caption\":\"Administrador\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Personalizaci\u00f3n del sitio web mediante PHP - Curso de WordPress 2018","description":"Personalizaci\u00f3n del sitio web mediante PHP. Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.","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:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/","og_locale":"es_ES","og_type":"article","og_title":"Personalizaci\u00f3n del sitio web mediante PHP - Curso de WordPress 2018","og_description":"Personalizaci\u00f3n del sitio web mediante PHP. Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.","og_url":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/","og_site_name":"Curso de WordPress 2018","article_published_time":"2018-03-11T21:01:44+00:00","article_modified_time":"2018-03-16T12:20:54+00:00","og_image":[{"width":1600,"height":1067,"url":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-content\/uploads\/2018\/03\/funciones.jpg","type":"image\/jpeg"}],"author":"Administrador","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Administrador","Tiempo de lectura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/","url":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/","name":"Personalizaci\u00f3n del sitio web mediante PHP - Curso de WordPress 2018","isPartOf":{"@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#website"},"datePublished":"2018-03-11T21:01:44+00:00","dateModified":"2018-03-16T12:20:54+00:00","author":{"@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#\/schema\/person\/66915292b50e141a7c1d01acb5eb0f84"},"description":"Personalizaci\u00f3n del sitio web mediante PHP. Personalizaci\u00f3n del sitio web mediante la definici\u00f3n de funciones en PHP, programadas y gestionadas mediante el plugin Code Snippets.","breadcrumb":{"@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/personalizacion-del-sitio-web-mediante-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/"},{"@type":"ListItem","position":2,"name":"Personalizaci\u00f3n del sitio web mediante PHP"}]},{"@type":"WebSite","@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#website","url":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/","name":"Curso de WordPress 2018","description":"Curso avanzado sobre WordPress en el CAP de Pamplona","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#\/schema\/person\/66915292b50e141a7c1d01acb5eb0f84","name":"Administrador","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/636dfeeef5d663d0784baecccc697b02?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/636dfeeef5d663d0784baecccc697b02?s=96&d=identicon&r=g","caption":"Administrador"}}]}},"_links":{"self":[{"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/posts\/347"}],"collection":[{"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/comments?post=347"}],"version-history":[{"count":0,"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/posts\/347\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/media\/502"}],"wp:attachment":[{"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/media?parent=347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/categories?post=347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cursoswp.educacion.navarra.es\/cursowp2018\/wp-json\/wp\/v2\/tags?post=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}