{"id":5450,"date":"2017-09-04T21:40:05","date_gmt":"2017-09-04T19:40:05","guid":{"rendered":"https:\/\/blog.hostinger.io\/es-tutoriales\/?p=5450"},"modified":"2025-12-18T22:51:14","modified_gmt":"2025-12-18T21:51:14","slug":"tutorial-wordpress-plugins-crear-plugin-wordpress","status":"publish","type":"post","link":"\/es\/tutoriales\/tutorial-wordpress-plugins-crear-plugin-wordpress","title":{"rendered":"C\u00f3mo crear un plugin de WordPress"},"content":{"rendered":"<p>WordPress dispone de una enorme colecci&oacute;n de plugins que introducen funcionalidades personalizadas. Es m&aacute;s, los plugins pueden a&ntilde;adir nuevas funciones a tu sitio web de WordPress sin tener que cambiar el c&oacute;digo principal.<\/p><p>Aunque hay toneladas de plugins gratuitos y premium entre los que elegir, puede haber ocasiones en las que necesites funciones espec&iacute;ficas de WordPress que no est&eacute;n disponibles. Para ello, es posible que tengas que crear tu propio plugin de WordPress.<\/p><p>En este tutorial aprender&aacute;s los pasos para crear un plugin de WordPress. Tambi&eacute;n repasaremos las mejores pr&aacute;cticas y normas de programaci&oacute;n y creaci&oacute;n de plugins.<\/p><p>Adem&aacute;s, este art&iacute;culo cubrir&aacute; las diferencias entre un plugin y un tema y c&oacute;mo funcionan en la plataforma WordPress.<\/p><p>\n\n\n\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-que-necesitas-para-hacer-un-plugin-de-wordpress\">&iquest;Qu&eacute; necesitas para hacer un plugin de WordPress?<\/h2><ul class=\"wp-block-list\">\n<li>Editor de texto<\/li>\n\n\n\n<li><a href=\"\/es\/tutoriales\/configurar-filezilla\">Acceso FTP<\/a> a tu cuenta de hosting<\/li>\n\n\n\n<li>Una <a href=\"\/es\/tutoriales\/como-instalar-wordpress\">instalaci&oacute;n de WordPress<\/a> que funcione<\/li>\n<\/ul><p>Necesitar&aacute;s un editor de texto para escribir el c&oacute;digo del plugin. Algunos de los <a href=\"\/es\/tutoriales\/mejores-editores-html\">editores de HTML<\/a> m&aacute;s populares son <a href=\"https:\/\/notepad-plus-plus.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Notepad++<\/a> y <a href=\"https:\/\/atom.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Atom<\/a><a href=\"https:\/\/netbeans.org\/\" target=\"_blank\" rel=\"noopener\">.<\/a> <\/p><p>Despu&eacute;s de instalar el editor de texto, con&eacute;ctalo a tu servidor FTP para modificar el c&oacute;digo. Puedes aprender a conectar Notepad++ a tu servidor FTP leyendo nuestro tutorial en ingl&eacute;s sobre <a href=\"https:\/\/www.hostinger.com\/tutorials\/how-to-connect-to-ftp-with-notepad\/\">c&oacute;mo conectarte a FTP con Notepad++<\/a>.<\/p><p>Luego, configura un cliente FTP para subir el archivo del plugin a tu sitio web. Recomendamos utilizar la aplicaci&oacute;n <a href=\"\/es\/tutoriales\/configurar-filezilla\">FTP FileZilla<\/a>, ya que es f&aacute;cil de configurar.<\/p><p>Por &uacute;ltimo, aseg&uacute;rate de que tienes una instalaci&oacute;n de WordPress que est&aacute; actualizada y funciona. Hay varias formas de actualizar los archivos del n&uacute;cleo de WordPress si has desactivado las actualizaciones autom&aacute;ticas. <a href=\"\/es\/tutoriales\/una-copia-seguridad-sitio-wordpress\">Haz una copia de seguridad de tus archivos de WordPress<\/a> antes de actualizar el sitio para evitar la p&eacute;rdida de datos.<\/p><p>Como alternativa, considera la posibilidad de <a href=\"\/es\/tutoriales\/instalar-wordpress-en-local\">instalar WordPress localmente<\/a>. Este m&eacute;todo no requiere un sitio web en vivo con un nombre de dominio y un plan de alojamiento, por lo que puedes probar tu plugin en WordPress sin que los visitantes lo vean de inmediato.<\/p><p>Tener un conocimiento b&aacute;sico de PHP beneficiar&aacute; tu proceso de desarrollo de plugins. Tendr&aacute;s que escribir una funci&oacute;n personalizada y llamar a funciones existentes del n&uacute;cleo de WordPress. Como m&iacute;nimo, deber&iacute;as estar familiarizado con las convenciones de nomenclatura de PHP y la estructuraci&oacute;n de archivos.<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"\/es\/hosting-wordpress\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/ES-New-WP_in-text-banner.png\/public\" alt=\"\" class=\"wp-image-40615\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/ES-New-WP_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/ES-New-WP_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/ES-New-WP_in-text-banner.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/ES-New-WP_in-text-banner.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-plugins-de-wordpress-vs-temas-de-wordpress\">Plugins de WordPress vs Temas de WordPress<\/h2><p>La funcionalidad del sitio de WordPress puede modificarse mediante plugins y temas.<\/p><p>Los temas de WordPress tienen un archivo <strong>functions.php<\/strong> almacenado en la carpeta <strong>\/wp-includes\/<\/strong>, que te permite a&ntilde;adir c&oacute;digo personalizado para nuevas funciones.<\/p><p>Aunque este m&eacute;todo funciona para peque&ntilde;as alteraciones, es poco pr&aacute;ctico para implementar cambios importantes que afecten a todo el sitio web.<\/p><p>Esto se debe a que la funcionalidad almacenada en el archivo <strong>functions.php<\/strong> depende de si el tema est&aacute; activo o no. Desactivar el tema de WordPress revertir&aacute; los cambios realizados en dicho archivo y provocar&aacute; un error cuando el sitio llame a las funciones que faltan.<\/p><p>A menos que utilices un tema hijo, la actualizaci&oacute;n del tema tambi&eacute;n sobrescribir&aacute; el archivo <strong>functions.php<\/strong>, oblig&aacute;ndote a restaurar manualmente el c&oacute;digo personalizado de WordPress.<\/p><p>Por eso es &uacute;til crear un plugin personalizado. Hacerlo facilita la modificaci&oacute;n del comportamiento predeterminado de WordPress para adaptarlo a tus necesidades.<\/p><p>Puedes a&ntilde;adir plugins de WordPress a cualquier instalaci&oacute;n de WordPress. Las funciones introducidas por el plugin seguir&aacute;n funcionando aunque cambies de tema. Adem&aacute;s, las actualizaciones no sobrescribir&aacute;n las funciones existentes, lo que te ahorrar&aacute; tiempo y esfuerzo.<\/p><h2 class=\"wp-block-heading\" id=\"h-que-son-los-hooks-de-wordpress\">&iquest;Qu&eacute; son los hooks de WordPress?<\/h2><p>Los Plugins de WordPress interact&uacute;an con c&oacute;digo de n&uacute;cleo utilizando <strong>hooks<\/strong>, que en espa&ntilde;ol se traducir&iacute;an como ganchos. Hay dos tipos diferentes de hooks.<\/p><ol class=\"wp-block-list\">\n<li><strong>Hooks de acci&oacute;n<\/strong>: sirven para agregar o quitar funciones.<\/li>\n\n\n\n<li><strong>Hooks de filtro<\/strong>: sirven para modificar datos arrojados por funciones.<\/li>\n<\/ol><h3 class=\"wp-block-heading\" id=\"h-acciones-y-hooks-de-accion\">Acciones y Hooks de Acci&oacute;n<\/h3><p>Una acci&oacute;n es una funci&oacute;n PHP llamada a trav&eacute;s de un hook de acci&oacute;n espec&iacute;fico cuando un usuario visita una p&aacute;gina web de WordPress. Los desarrolladores web pueden a&ntilde;adir sus propias funciones a la lista de acciones o eliminar las preexistentes a&ntilde;adiendo el script de hook de acci&oacute;n<strong> wp_head()<\/strong> antes de la etiqueta de cierre <strong>(&lt;\/head&gt;<\/strong>) de cualquier p&aacute;gina.<\/p><p>Los ganchos de acci&oacute;n son contextuales: algunos se llaman en cada p&aacute;gina de tu sitio web, otros s&oacute;lo se llaman cuando se visualiza el Panel de control del administrador, etc. Se puede encontrar una lista completa de los hooks de acciones y el contexto en el que se llaman en la p&aacute;gina <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress Plugin API\/Action Reference<\/a>.<\/p><p><strong>A&ntilde;adiendo funciones a un hook de acci&oacute;n usando add_action()<\/strong><\/p><p>Para agregar funciones a un hook de acci&oacute;n en un archivo de plugin se debe llamar a la funci&oacute;n <b>add_action()<\/b> con al menos dos par&aacute;metros.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Hook to the 'init' action, which is called after WordPress is finished loading the core code\nadd_action( 'init', 'add_Cookie' );\n \n\/\/ Set a cookie with the current time of day\nfunction add_Cookie() {\n  setcookie(\"last_visit_time\", date(\"r\"), time()+60*60*24*30, \"\/\");\n}<\/pre><p>El primer par&aacute;metro es el nombre del <strong>hook de acci&oacute;n<\/strong> que quieres adjuntar la llamada de retorno, mientras que el segundo par&aacute;metro contiene el nombre de la<strong> funci&oacute;n<\/strong> que quieres ejecutar.<\/p><p>El tercer par&aacute;metro (opcional) es la <strong>prioridad<\/strong> de la funci&oacute;n que deseas ejecutar. La prioridad predeterminada es 10, poniendo tu funci&oacute;n personalizada despu&eacute;s de cualquiera de las funciones integradas de WordPress. <\/p><p>El cuarto par&aacute;metro (opcional) es el <strong>n&uacute;mero de argumentos<\/strong>, lo que significa cu&aacute;ntos par&aacute;metros tu funci&oacute;n personalizada puede tomar. El valor predeterminado es 1.<\/p><p><strong>Ejemplo de c&oacute;digo de plugin para mostrar texto despu&eacute;s del pie de cada p&aacute;gina<\/strong><\/p><p>Este complemento asocia el hook de acci&oacute;n <strong>wp_footer()<\/strong>, que se llama justo antes de la etiqueta <strong>&lt;\/body&gt;<\/strong> de cierre de cada p&aacute;gina, y a&ntilde;ade una nueva funci&oacute;n llamada <strong>mfp_Add_Text()<\/strong>. Puesto que esto es parte de un plugin y no del tema, continuar&aacute; funcionando as&iacute; actives un tema totalmente diferente. <\/p><p>Puedes guardar este ejemplo como un archivo PHP, cargarlo en la carpeta de <strong>plugins<\/strong>.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\/*\nNombre del Plugin: A&ntilde;adir Texto Al Pie de la P&aacute;gina\n*\/\n \n\/\/ Hook the 'wp_footer' action hook, add the function named 'mfp_Add_Text' to it\nadd_action(\"wp_footer\", \"mfp_Add_Text\");\n \n\/\/ Define 'mfp_Add_Text'\nfunction mfp_Add_Text()\n{\n  echo \"&lt;p style='color: black;'&gt;After the footer is loaded, my text is added!&lt;\/p&gt;\";\n}<\/pre><p>La siguiente captura de pantalla muestra el plugin en acci&oacute;n despu&eacute;s de activarlo a trav&eacute;s del panel de administraci&oacute;n de WordPress: <\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" width=\"800\" height=\"107\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2017\/09\/wordpress-plugin-agregar-texto-al-pie-de-pagina.png\/public\" alt=\"\" class=\"wp-image-5452\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2017\/09\/wordpress-plugin-agregar-texto-al-pie-de-pagina.png\/w=800,fit=scale-down 800w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2017\/09\/wordpress-plugin-agregar-texto-al-pie-de-pagina.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2017\/09\/wordpress-plugin-agregar-texto-al-pie-de-pagina.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2017\/09\/wordpress-plugin-agregar-texto-al-pie-de-pagina.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure><\/div><p>\n\n\n<div><p class=\"important\"><strong>&iexcl;Importante!:<\/strong> PHP eval&uacute;a todo el script antes de ejecutarlo. Escribir las llamadas <strong>add_action()<\/strong> en la parte superior del archivo en el orden en que se ejecutan y, a continuaci&oacute;n, definir tus funciones en el mismo orden, hace que el archivo sea m&aacute;s f&aacute;cil de leer. <\/p><\/div>\n\n\n\n<\/p><p><strong>Eliminando funciones de un hook de acci&oacute;n usando remove_action()<\/strong><\/p><p>Para <strong>eliminar<\/strong> una acci&oacute;n de un hook de acci&oacute;n, debes escribir una nueva funci&oacute;n que llame a <strong>remove_action()<\/strong> y, a continuaci&oacute;n, llama a la funci&oacute;n que has escrito utilizando <strong>add_action()<\/strong>. <\/p><p>La funci&oacute;n  <strong>remove_action()<\/strong> debe contener al menos dos par&aacute;metros.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Hook the 'init' action, which is called after WordPress is finished loading the core code, add the function 'remove_My_Meta_Tags'\nadd_action( 'init', 'remove_My_Meta_Tags' );\n\n\/\/ Remove the 'add_My_Meta_Tags' function from the wp_head action hook\nfunction remove_My_Meta_Tags()\n{\n  remove_action( 'wp_head', 'add_My_Meta_Tags');\n}<\/pre><p>El primer par&aacute;metro requerido es el nombre del <strong>hook de acci&oacute;n<\/strong> al que est&aacute; asociada la funci&oacute;n mientras que el segundo par&aacute;metro requerido es el nombre de la <strong>funci&oacute;n<\/strong> que deseas eliminar.<\/p><p>El tercer par&aacute;metro (opcional) es la <strong>prioridad<\/strong> de la funci&oacute;n original. Este par&aacute;metro debe ser id&eacute;ntico a la prioridad que se defini&oacute; originalmente al agregar la acci&oacute;n al gancho de acci&oacute;n. Si no definiste una prioridad en tu funci&oacute;n personalizada, no incluyas el par&aacute;metro.<\/p><p>Una forma de hacerlo es utilizar la funci&oacute;n PHP date() para obtener el d&iacute;a actual, seguida de etiquetas condicionales para comprobar si es lunes. Despu&eacute;s de analizar la informaci&oacute;n, la p&aacute;gina ejecutar&aacute; la funci&oacute;n remove_action() en todos los posts publicados los lunes.<\/p><p>En el siguiente ejemplo, evitaremos que el texto extra agregado al pie de p&aacute;gina aparezca en las entradas de los lunes.<\/p><p>Una forma de hacerlo es utilizando la funci&oacute;n fecha de PHP para obtener el d&iacute;a actual, seguido de una instrucci&oacute;n condicional para probar si el d&iacute;a actual es lunes. Despu&eacute;s de analizar la informaci&oacute;n, la p&aacute;gina ejecutar&aacute; la funci&oacute;n <strong>remove_action ()<\/strong> en todos los posts publicados los lunes.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n \n\/\/ Hook the 'wp_footer' action, run the function named 'mfp_Add_Text()'\nadd_action(\"wp_footer\", \"mfp_Add_Text\");\n \n\/\/ Hook the 'wp_head' action, run the function named 'mfp_Remove_Text()'\nadd_action(\"wp_head\", \"mfp_Remove_Text\");\n \n\/\/ Define the function named 'mfp_Add_Text('), which just echoes simple text\nfunction mfp_Add_Text()\n{\n  echo \"&lt;p style='color: #FFF;'&gt;After the footer is loaded, my text is added!&lt;\/p&gt;\";\n}\n \n\/\/ Define the function named 'mfp_Remove_Text()' to remove our previous function from the 'wp_footer' action\nfunction mfp_Remove_Text()\n{\n  if (date(\"l\") === \"Monday\") {\n    \/\/ Target the 'wp_footer' action, remove the 'mfp_Add_Text' function from it\n    remove_action(\"wp_footer\", \"mfp_Add_Text\");\n  }\n}<\/pre><h3 class=\"wp-block-heading\" id=\"h-filtros-y-hooks-de-filtro\">Filtros y hooks de filtro<\/h3><p>Un filtro es una funci&oacute;n PHP llamada por un hook de filtro espec&iacute;fico que modifica los datos devueltos por las funciones existentes. Al igual que los hooks de acci&oacute;n, los hooks de filtro tambi&eacute;n son contextuales.<\/p><p>Una lista completa de los hooks de filtro y el contexto en el que se llaman se pueden encontrar en la <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\" target=\"_blank\" rel=\"noopener\">p&aacute;gina de<\/a> <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress Plugin API\/Filter Reference<\/a>.<\/p><p><strong>A&ntilde;adiendo filtros usando add_filter()<\/strong><\/p><p>Para <b>agregar<\/b> una funci&oacute;n de filtro a cualquier gancho de filtro, tu complemento debe llamar a la funci&oacute;n de WordPress <b>add_filter()<\/b>, con al menos dos par&aacute;metros.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Hook the 'the_content' filter hook (content of any post), run the function named 'mfp_Fix_Text_Spacing'\nadd_filter(\"the_content\", \"mfp_Fix_Text_Spacing\");\n\n\/\/ Automatically correct double spaces from any post\nfunction mfp_Fix_Text_Spacing($the_Post)\n{\n $the_New_Post = str_replace(\"  \", \" \", $the_Post);\n \n return $the_New_Post;\n}<\/pre><p>El primer par&aacute;metro requerido es el nombre del <strong>hook&nbsp;del filtro<\/strong> que quieres asociar, mientras que el segundo par&aacute;metro contiene el nombre de la <strong>funci&oacute;n<\/strong> que quieres que se ejecute cuando se aplique el filtro.<\/p><p>El tercer par&aacute;metro (opcional) es la <strong>prioridad<\/strong> de la funci&oacute;n que deseas ejecutar. Puedes asociar cualquier cantidad de funciones de filtro diferentes a un mismo hook de filtro. La prioridad predeterminada es 10, poniendo tu funci&oacute;n personalizada despu&eacute;s de cualquier funci&oacute;n incorporada. <\/p><p>El cuarto par&aacute;metro (opcional) es el <strong>n&uacute;mero de argumentos<\/strong>, lo que significa cu&aacute;ntos par&aacute;metros tu funci&oacute;n de filtro personalizado ser&aacute; capaz de tomar. El valor predeterminado es 1.<\/p><p><strong>Ejemplo de plugin para modificar el extracto de una publicaci&oacute;n<\/strong><\/p><p>WordPress tiene una funci&oacute;n que arroja el extracto de una entrada, est&aacute; funci&oacute;n se llama <strong>get_the_excerpt()<\/strong>, que tambi&eacute;n es un hook de filtro. Esta funci&oacute;n realmente lo que hace es mostrar el extracto que <strong>get_the_excerpt()<\/strong> arroja, es ah&iacute; donde se aplica el filtro y el fragmento se altera antes de ser mostrado. <\/p><p>El siguiente ejemplo de plugin define una funci&oacute;n de filtro que toma el extracto como su &uacute;nico par&aacute;metro de entrada, a&ntilde;ade un texto antes de &eacute;l y devuelve el nuevo valor cada vez que el script llama a la funci&oacute;n <strong>get_the_excerpt().<\/strong><\/p><p>Como el valor devuelto de la funci&oacute;n <strong>get_the_excerpt()<\/strong> es el texto del extracto real, el plugin introducir&aacute; autom&aacute;ticamente el nuevo valor como par&aacute;metro de la funci&oacute;n <strong>$old_Excerpt<\/strong> cuando se llame usando <strong>add_filter()<\/strong>. La funci&oacute;n que definas debe devolver el nuevo valor.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\/*\nPlugin Name: Add Excerpt \n*\/\n\n\/\/ Hook the get_the_excerpt filter hook, run the function named mfp_Add_Text_To_Excerpt\nadd_filter(\"get_the_excerpt\", \"mfp_Add_Text_To_Excerpt\");\n\n\/\/ Take the excerpt, add some text before it, and return the new excerpt\nfunction mfp_Add_Text_To_Excerpt($old_Excerpt)\n{\n  $new_Excerpt = \"&lt;b&gt;Excerpt: &lt;\/b&gt;\" . $old_Excerpt;\n  return $new_Excerpt;\n}<\/pre><p><strong>Eliminando filtros mediante remove_filter ()<\/strong><\/p><p>Eliminar un filtro es mucho m&aacute;s sencillo que eliminar una acci&oacute;n, ya que WordPress te permite llamar a la funci&oacute;n<strong> remove_filter()<\/strong> sin necesidad de definir una nueva funci&oacute;n. <\/p><p>En el siguiente ejemplo, eliminaremos el texto adicional del extracto si el d&iacute;a actual es jueves. Utilizaremos la funci&oacute;n <strong>remove_filter()<\/strong> con al menos dos par&aacute;metros.<\/p><p>El primero debe contener el hook del filtro al que se adjunta la funci&oacute;n. El segundo par&aacute;metro debe ser el nombre del filtro que quieres eliminar. A&ntilde;ade un par&aacute;metro de prioridad si lo has definido al crear la funci&oacute;n.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Hook the get_the_excerpt filter hook, run the function named mfp_Add_Text_To_Excerpt\nadd_filter(\"get_the_excerpt\", \"mfp_Add_Text_To_Excerpt\");\n\n\/\/ If today is a Thursday, remove the filter from the_excerpt()\nif (date(\"l\") === \"Thursday\") {\n  remove_filter(\"get_the_excerpt\", \"mfp_Add_Text_To_Excerpt\");\n}\n\n\/\/ Take the excerpt, add some text before it, and return the new excerpt\nfunction mfp_Add_Text_To_Excerpt($old_Excerpt)\n{\n  $new_Excerpt = \"&lt;b&gt;Excerpt: &lt;\/b&gt;\" . $old_Excerpt;\n  return $new_Excerpt;\n}<\/pre><p>Ahora que tienes una comprensi&oacute;n b&aacute;sica de los ganchos y los filtros, vamos a crear un plugin simple de WordPress que a&ntilde;ade un nuevo enlace y una p&aacute;gina al Panel de control del administrador.<\/p><p>\n\n\n\n<div><p class=\"important\"><strong>&iexcl;Importante! <\/strong>Utilizar un sitio de staging de WordPress para probar nuevos plugins te ayudar&aacute; a evitar errores que puedan causar un tiempo de inactividad. Hay dos maneras de <a href=\"\/es\/tutoriales\/entorno-staging-wordpress\">crear un entorno de staging<\/a>: manualmente o utilizando un plugin como WP Staging. Tambi&eacute;n puedes instalar WordPress localmente en tu ordenador. <\/p><\/div>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-paso-1-almacenamiento-del-plugin\">Paso 1 &ndash; Almacenamiento del plugin<\/h2><p>El primer paso para crear tu plugin de WordPress es crear una carpeta para almacenar todos tus archivos. El nombre de la carpeta debe ser &uacute;nico y descriptivo. Comprueba los nombres de las otras carpetas de plugins dentro de <strong>\/wp-content\/plugins\/<\/strong> para asegurarte de que el nuevo nombre no est&aacute; ya en uso.<\/p><p>Utiliza <a href=\"\/es\/tutoriales\/configurar-filezilla\">un cliente FTP<\/a>  para conectarte a tu cuenta de alojamiento y facilitar el proceso de subida de archivos. Desde el directorio principal de WordPress, navega a <strong>wp-content<\/strong> -&gt; <strong>plugins<\/strong>. Dentro de la <strong>carpeta de plugins<\/strong>, crea una nueva carpeta llamada <strong>my-first-plugin<\/strong> (&laquo;mi primer plugin&raquo; en espa&ntilde;ol): <\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"318\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/public\" alt=\"Una captura de pantalla del cliente FTP mostrando d&oacute;nde crear la carpeta my-first-plugin\" class=\"wp-image-26038\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/w=1536,fit=scale-down 1536w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-crear-una-carpeta.png\/w=2048,fit=scale-down 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>Practicar la gesti&oacute;n de archivos durante el desarrollo de WordPress facilitar&aacute; mucho el proceso a largo plazo. Por esto, te recomendamos separar los distintos archivos que componen tu plugin de WordPress en subcarpetas seg&uacute;n su funcionalidad.<\/p><p>Por ejemplo, guarda los archivos CSS, PHP y JavaScript en carpetas separadas. A medida que desarrolles tu plugin de WordPress personalizado, ser&aacute; m&aacute;s f&aacute;cil localizar archivos espec&iacute;ficos cuando todo tenga un directorio dedicado.<\/p><h2 class=\"wp-block-heading\" id=\"h-paso-2-creacion-del-primer-archivo\">Paso 2 &ndash; Creaci&oacute;n del primer archivo<\/h2><p>El archivo principal del plugin contendr&aacute; la informaci&oacute;n que WordPress necesita para mostrar tu plugin en la lista de plugins, donde podr&aacute;s activarlo.<\/p><p>Crea un nuevo archivo PHP llamado <b>my-first-plugin.php<\/b> en la carpeta que has creado antes. Este archivo principal del plugin contendr&aacute; comentarios de cabecera con informaci&oacute;n adicional para que WordPress la lea o muestre.<\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"363\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/public\" alt=\"Una captura de pantalla del cliente FTP que muestra c&oacute;mo ver o editar tu archivo PHP\" class=\"wp-image-26039\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/w=1536,fit=scale-down 1536w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/ftp-client-ver-o-editar-un-archivo.png\/w=2048,fit=scale-down 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>A continuaci&oacute;n, haz clic con el bot&oacute;n derecho en el archivo y selecciona <strong>Ver\/Editar<\/strong> para a&ntilde;adir el siguiente c&oacute;digo mediante un editor de HTML:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\/*\nPlugin Name: My First Plugin\nDescription: This is my first plugin! It makes a new admin menu link!\nAuthor: Your Name\n*\/<\/pre><p>Puedes consultar este <a href=\"https:\/\/www.php.net\/basic-syntax.instruction-separation\" target=\"_blank\" rel=\"noreferrer noopener\">manual de PHP<\/a> para entender por qu&eacute; la etiqueta de cierre<strong> ?&gt;<\/strong> no es necesaria aqu&iacute;.<\/p><p>Guarda el archivo. A continuaci&oacute;n, navega a la secci&oacute;n de <strong>plugins<\/strong> de tu panel de control de WordPress. Si WordPress ha le&iacute;do correctamente el nuevo archivo, ver&aacute;s <strong>My First Plugin<\/strong> en la lista:<\/p><p><\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"410\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/public\" alt=\"Una captura de pantalla del dahboard de WordPress que muestra d&oacute;nde encontrar tu plugin\" class=\"wp-image-26051\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/w=1536,fit=scale-down 1536w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/nuevo-plugin-adjuntado-wp.png\/w=2048,fit=scale-down 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><h2 class=\"wp-block-heading\" id=\"h-paso-3-escribiendo-las-funciones-del-plugin\">Paso 3 &ndash; Escribiendo las funciones del plugin<\/h2><p>Antes de empezar a escribir las funciones del plugin, es muy recomendable dar a todos los archivos, funciones y variables un prefijo &uacute;nico en su nombre para evitar cualquier conflicto con otros plugins. En nuestro ejemplo, utilizaremos el prefijo <strong>mfp<\/strong>, que es la abreviatura de <strong>My First Plugin<\/strong>.<\/p><p>En la carpeta principal de tu plugin, crea una nueva carpeta llamada <strong>includes<\/strong>. Lo utilizaremos para almacenar los archivos de apoyo utilizados por el archivo principal. En esta carpeta, crea un nuevo archivo PHP y gu&aacute;rdalo como <strong>mfp-functions.php<\/strong>. Debes declarar la apertura con la etiqueta <strong>&lt;?php<\/strong>&nbsp;en la primera l&iacute;nea. <\/p><p>Este nuevo archivo es donde se almacenar&aacute;n todas las funciones de tu plugin.<\/p><p>Ahora regresa a&nbsp;<strong>my-first-plugin.php,&nbsp;<\/strong>en la carpeta principal de tu plugin. Debes incluir el archivo <strong>mfp-functions.php<\/strong> para que puedas usar las nuevas funciones. Utiliza <strong>require_once<\/strong> para asegurarte de que el plugin solo funciona si el archivo de funciones est&aacute; disponible. <\/p><p>Edita <strong>my-first-plugin.php<\/strong> como se muestra a continuaci&oacute;n, luego gu&aacute;rdalo y c&aacute;rgalo una vez m&aacute;s, sobrescribiendo la versi&oacute;n anterior cuando se te pregunte.<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\/*\nPlugin Name: My First Plugin\nDescription: This is my first plugin! It makes a new admin menu link!\nAuthor: Your Name\n*\/\n\n\/\/ Include mfp-functions.php, use require_once to stop the script if mfp-functions.php is not found\nrequire_once plugin_dir_path(__FILE__) . 'includes\/mfp-functions.php';\n<\/pre><p>La funci&oacute;n de WordPress <strong>plugin_dir_path(FILE)<\/strong> te permite incluir archivos de tu carpeta de plugins, dando la ruta completa al directorio que almacena el nuevo plugin.<\/p><p>Ahora, vuelve al archivo <strong>mfp-functions.php <\/strong>en el directorio <strong>Includes<\/strong>. Debido a que nuestro plugin a&ntilde;adir&aacute; un nuevo enlace de nivel superior al men&uacute; de navegaci&oacute;n del panel de control del administrador, utilizaremos una funci&oacute;n personalizada llamada <strong>mfp_Add_My_Admin_Link()<\/strong>. A&ntilde;ade el siguiente bloque de c&oacute;digo al archivo<strong> mfp-functions.php<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\/*\n * Add my new menu to the Admin Control Panel\n *\/\n\/\/ Hook the 'admin_menu' action hook, run the function named 'mfp_Add_My_Admin_Link()'\nadd_action( 'admin_menu', 'mfp_Add_My_Admin_Link' );\n\/\/ Add a new top level menu link to the ACP\nfunction mfp_Add_My_Admin_Link()\n{\n      add_menu_page(\n        'My First Page', \/\/ Title of the page\n        'My First Plugin', \/\/ Text to show on the menu link\n        'manage_options', \/\/ Capability requirement to see the link\n        'includes\/mfp-first-acp-page.php' \/\/ The 'slug' - file to display when clicking the link\n    );\n}<\/pre><p>\n\n\n\n<div><p class=\"important\"> <strong>&iexcl;Importante!<\/strong> Agrupa las funciones similares y a&ntilde;ade una descripci&oacute;n sobre cada una de ellas mediante un comentario de varias l&iacute;neas. Esto facilitar&aacute; las futuras actualizaciones y la depuraci&oacute;n del plugin. <\/p><\/div>\n\n\n\n<\/p><p><strong>mfp_Add_My_Admin_Link()<\/strong> utiliza la funci&oacute;n integrada de WordPress <strong>add_menu_page()<\/strong> con al menos cuatro par&aacute;metros en el siguiente orden:<\/p><ul class=\"wp-block-list\">\n<li><strong>T&iacute;tulo de la p&aacute;gina<\/strong>: el nombre de la p&aacute;gina que se muestra en la pesta&ntilde;a del navegador.<\/li>\n\n\n\n<li><strong>T&iacute;tulo del men&uacute;<\/strong>: el texto utilizado para el elemento del men&uacute;. En nuestro ejemplo, es el nombre del plugin.<\/li>\n\n\n\n<li><strong>Capacidad<\/strong>: requisito de capacidad del usuario para ver el men&uacute; del plugin. Aqu&iacute;, solo los usuarios con la capacidad <strong>manage_options <\/strong>pueden acceder a la p&aacute;gina enlazada.<\/li>\n\n\n\n<li><strong>Slug del men&uacute;<\/strong>: el archivo que se utilizar&aacute; para mostrar la p&aacute;gina real. Crearemos el archivo <strong>mfp-first-acp-page.php<\/strong> vinculado en la carpeta <strong>Includes<\/strong> en la siguiente secci&oacute;n.<\/li>\n\n\n\n<li><strong>Funci&oacute;n (opcional)<\/strong>: la funci&oacute;n que produce el contenido de la p&aacute;gina.<\/li>\n<\/ul><p>Adjuntar la funci&oacute;n personalizada mediante <strong>add_action()<\/strong> permite que el plugin llame al hook de acci&oacute;n en determinadas circunstancias. A&ntilde;adir <strong>admin_menu <\/strong>como primer par&aacute;metro llamar&aacute; a la funci&oacute;n cuando un usuario acceda al men&uacute; de administraci&oacute;n. Mientras tanto, <strong>mfp_Add_My_Admin_Link<\/strong> es la funci&oacute;n que se ejecutar&aacute; cuando se especifique como segundo par&aacute;metro.<\/p><p>Por &uacute;ltimo, sube el archivo del plugin <strong>mfp-functions.php<\/strong> a la carpeta <strong>Includes<\/strong>.<\/p><h2 class=\"wp-block-heading\" id=\"h-paso-4-creacion-de-la-nueva-pagina-de-administracion\">Paso 4 &ndash; Creaci&oacute;n de la nueva p&aacute;gina de administraci&oacute;n<\/h2><p>Despu&eacute;s de definir las funciones del plugin, es hora de construir la p&aacute;gina a la que nos llevar&aacute; el bot&oacute;n del men&uacute;. Crea un nuevo archivo PHP llamado <strong>mfp-first-acp-page.php<\/strong> en la subcarpeta <strong>Includes<\/strong> y a&ntilde;ade el siguiente c&oacute;digo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;div class=\"wrap\"&gt;\n  &lt;h1&gt;Hello!&lt;\/h1&gt;\n  &lt;p&gt;This is my plugin's first page&lt;\/p&gt;\n&lt;\/div&gt;<\/pre><p>Al crear las p&aacute;ginas de administraci&oacute;n, WordPress recomienda adjuntar tu propio HTML con una etiqueta &nbsp;<strong>&lt;div&gt;&nbsp;<\/strong>y darle la clase <strong>&laquo;wrap&raquo;<\/strong>, como se muestra arriba. Esto garantiza que todo tu contenido aparezca en el lugar correcto, al igual que cualquier otra p&aacute;gina de administraci&oacute;n. Hacerlo tambi&eacute;n ayuda a mantener el c&oacute;digo organizado.<\/p><p>Por &uacute;ltimo, ve a la secci&oacute;n de <strong>plugins<\/strong> de tu panel de control de WordPress y activa el nuevo plugin. Si el proceso tiene &eacute;xito, el enlace del panel de administraci&oacute;n de tu primer plugin aparecer&aacute; en la parte inferior del men&uacute; de navegaci&oacute;n. <\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"386\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/public\" alt=\"Una captura de pantalla del panel de control de WordPress que muestra tu plugin en la parte inferior del men&uacute; de navegaci&oacute;n\" class=\"wp-image-26049\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/w=1536,fit=scale-down 1536w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/imagen-nuevo-plugin-en-WP.png\/w=2048,fit=scale-down 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>&iexcl;Enhorabuena! Has creado con &eacute;xito tu primer plugin de WordPress.<\/p><p>Si has creado el plugin en un sitio de staging, tendr&aacute;s que <a href=\"\/es\/tutoriales\/plugins-en-wordpress-gratis\">instalar el plugin<\/a> en el sitio real. Los siguientes pasos te mostrar&aacute;n c&oacute;mo hacerlo:<\/p><ol class=\"wp-block-list\">\n<li>En FileZilla, haz clic con el bot&oacute;n derecho en la carpeta de <strong>my-new-plugin<\/strong> y selecciona <strong>Descargar<\/strong>. A continuaci&oacute;n, comprime los archivos en un archivo ZIP.<\/li>\n<\/ol><figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"379\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/public\" alt=\"Una captura de pantalla de FileZilla mostrando c&oacute;mo descargar tu plugin\" class=\"wp-image-26041\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/w=1536,fit=scale-down 1536w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/descargar-plugin-ftp-client.png\/w=2048,fit=scale-down 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><ol class=\"wp-block-list\" start=\"2\">\n<li>Ve al men&uacute; de <strong>plugins<\/strong> desde tu panel de control de WordPress. A continuaci&oacute;n, haz clic en <strong>A&ntilde;adir nuevo<\/strong>.<\/li>\n\n\n\n<li>Haz clic en <strong>Subir Plugin<\/strong> y selecciona el archivo ZIP de tu plugin.<\/li>\n<\/ol><figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/public\" alt=\"Una captura de pantalla del panel de control de WordPress que muestra d&oacute;nde subir tu plugin\" class=\"wp-image-26042\" width=\"840\" height=\"227\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/w=1536,fit=scale-down 1536w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2022\/12\/cargar-plugin-en-wordpress.png\/w=2048,fit=scale-down 2048w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure><ol class=\"wp-block-list\" start=\"4\">\n<li>Selecciona <strong>Instalar ahora<\/strong> para iniciar el proceso de instalaci&oacute;n.<\/li>\n<\/ol><p>\n\n\n\n<div class=\"protip\">\n                    <h4 class=\"title\">Lecturas recomendadas<\/h4>\n                    <p> <br>&iquest;Te preguntas en qu&eacute; idiomas est&aacute;n escritos los plugins de WordPress? Aprende m&aacute;s en las siguientes gu&iacute;as:<br><a href=\"\/es\/tutoriales\/que-es-html\">&iquest;Qu&eacute; es HTML?<\/a><br><a href=\"\/es\/tutoriales\/que-es-css\">&iquest;Qu&eacute; es CSS?<\/a><br><a href=\"\/es\/tutoriales\/que-es-javascript-introduccion-basica\/\">&iquest;Qu&eacute; es JavaScript?<\/a> <\/p>\n                <\/div>\n\n\n\n<\/p><h2 class=\"wp-block-heading\" id=\"h-grandes-normas-y-practicas-al-crear-plugins-personalizados\">Grandes normas y pr&aacute;cticas al crear plugins personalizados<\/h2><p>A medida que las necesidades de tu sitio evolucionen continuamente, tendr&aacute;s que revisar el c&oacute;digo del plugin para implementar actualizaciones y parches de seguridad.<\/p><p>Teniendo esto en cuenta, sigue las mejores pr&aacute;cticas para el desarrollo de plugins desde el principio. Si lo haces, todo el proceso ser&aacute; m&aacute;s f&aacute;cil para ti y para los desarrolladores web con los que puedas trabajar en el futuro.<\/p><p>Adem&aacute;s, consulta los <a href=\"\/es\/tutoriales\/mejores-plugins-wordpress\/\">mejores ejemplos de plugins de WordPress<\/a> para inspirarte. F&iacute;jate en su c&oacute;digo fuente, en c&oacute;mo organizan sus carpetas y en otras pr&aacute;cticas que debes aplicar al crear plugins de WordPress.<\/p><p>Aqu&iacute; tienes algunas de las mejores pr&aacute;cticas de codificaci&oacute;n y desarrollo de plugins para ayudarte en la creaci&oacute;n de tu primer plugin de WordPress:<\/p><ul class=\"wp-block-list\">\n<li><strong>Desarrolla y prueba los plugins de WP en un entorno de staging.<\/strong> De este modo, no habr&aacute; riesgo de romper el sitio si un plugin tiene un c&oacute;digo defectuoso.<\/li>\n\n\n\n<li><strong>Construye una estructura de carpetas l&oacute;gica. <\/strong>Crea sub carpetas para cada funcionalidad y divide el c&oacute;digo en archivos separados seg&uacute;n su finalidad o tipo de lenguaje para evitar el desorden.<\/li>\n\n\n\n<li><strong>Nombra cada archivo, carpeta y elemento con precauci&oacute;n.<\/strong> Utiliza prefijos &uacute;nicos, para que no choquen con los nombres de los archivos de otros plugins o del n&uacute;cleo de WordPress.<\/li>\n\n\n\n<li><strong>A&ntilde;ade comentarios para etiquetar cada funci&oacute;n.<\/strong> Hacerlo te permite a ti y a otros desarrolladores entender tu c&oacute;digo al actualizarlo o depurarlo.<\/li>\n\n\n\n<li><strong>Crea documentaci&oacute;n.<\/strong> Esta pr&aacute;ctica es especialmente beneficiosa si creas plugins con funcionalidades complejas para un gran n&uacute;mero de usuarios.<\/li>\n\n\n\n<li><strong>Utiliza un software de control de versiones para hacer un seguimiento de los cambios realizados en tu c&oacute;digo. <\/strong>Saber qui&eacute;n ha a&ntilde;adido algo al c&oacute;digo, ayudar&aacute; a evitar choques entre actualizaciones y a reducir el n&uacute;mero de errores.<\/li>\n\n\n\n<li><strong>Consulta el <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/\" target=\"_blank\" rel=\"noreferrer noopener\">Codex de WordPress<\/a> para conocer las normas de codificaci&oacute;n espec&iacute;ficas del idioma.<\/strong> Aseg&uacute;rate de cumplirlas cuando colabores en un proyecto.<\/li>\n\n\n\n<li><strong>Activa <a href=\"\/es\/tutoriales\/wordpress-debug\">WP_DEBUG<\/a> o utiliza una herramienta de depuraci&oacute;n cuando desarrolles plugins.<\/strong> Hacerlo facilitar&aacute; la localizaci&oacute;n de errores, acelerando el proceso general de construcci&oacute;n de plugins.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusi&oacute;n<\/h2><p>Desarrollar un plugin personalizado es una forma de a&ntilde;adir funcionalidad a un sitio de WordPress que los plugins disponibles actualmente no ofrecen. Puede ser un plugin sencillo que implemente peque&ntilde;as alteraciones o uno complejo que modifique todo el sitio.<\/p><p>Para recapitular, estos son los pasos para crear un plugin de WordPress desde cero:<\/p><ol class=\"wp-block-list\">\n<li>Crear una carpeta para almacenar los archivos del plugin.<\/li>\n\n\n\n<li>Crear el archivo principal de tu plugin.<\/li>\n\n\n\n<li>A&ntilde;adir c&oacute;digo a varios archivos para las funciones del plugin.<\/li>\n\n\n\n<li>Construir la p&aacute;gina de administraci&oacute;n del plugin.<\/li>\n<\/ol><p>Como con cualquier otra habilidad, se necesita tiempo para ser bueno en la creaci&oacute;n de plugins de WordPress. Con suficiente pr&aacute;ctica, podr&aacute;s crear plugins y ponerlos a disposici&oacute;n para su descarga en el directorio de plugins de WordPress o incluso venderlos en alguno de los marketplaces.<\/p><p>Esperamos que este art&iacute;culo te haya ense&ntilde;ado a crear un plugin para WordPress. Si tienes alguna pregunta u observaci&oacute;n, no dudes en dejar un comentario.<\/p><h2 class=\"wp-block-heading\" id=\"h-como-crear-un-plugin-para-wordpress-faq\">C&oacute;mo crear un plugin para WordPress &ndash; FAQ<\/h2><div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-69447752c43ee\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">&iquest;Puedes ganar dinero haciendo plugins para WordPress?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>S&iacute;, puedes vender plugins a trav&eacute;s de tu propio sitio web o en un marketplace.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-69447752c43f0\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">&iquest;Qui&eacute;n puede crear un plugin de WordPress?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Cualquiera que sepa codificar puede crear un plugin para WordPress. Puedes usar un tema para crear un plugin, si sabes PHP b&aacute;sico.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-69447752c43f1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">&iquest;Los plugins de WordPress est&aacute;n escritos en PHP?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Los plugins de WordPress suelen estar escritos en PHP, pero tambi&eacute;n necesitar&aacute;s saber algo de HTML y CSS b&aacute;sicos para gestionar correctamente la salida del plugin.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>WordPress dispone de una enorme colecci&oacute;n de plugins que introducen funcionalidades personalizadas. Es m&aacute;s, los plugins pueden a&ntilde;adir nuevas funciones a tu sitio web de WordPress sin tener que cambiar el c&oacute;digo principal. Aunque hay toneladas de plugins gratuitos y premium entre los que elegir, puede haber ocasiones en las que necesites funciones espec&iacute;ficas de [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/es\/tutoriales\/tutorial-wordpress-plugins-crear-plugin-wordpress\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":138,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"C\u00f3mo crear un plugin de WordPress - Gu\u00eda paso a paso","rank_math_description":"Para muchos desarrolladores es esencial dejar de lado las limitaciones de WordPress y crear sus propios plugins.","rank_math_focus_keyword":"crear plugin wordpress","footnotes":""},"categories":[4747,14330],"tags":[5070,6407],"class_list":["post-5450","post","type-post","status-publish","format-standard","hentry","category-wordpress","category-plugins","tag-plugins-wordpress","tag-tutoriales-wordpress"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"pt-BR","link":"https:\/\/www.hostinger.com\/br\/tutoriais\/criar-plugin-wordpress","default":0},{"locale":"fr-FR","link":"https:\/\/www.hostinger.com\/fr\/tutoriels\/creer-un-plugin-wordpress","default":0},{"locale":"es-ES","link":"https:\/\/www.hostinger.com\/es\/tutoriales\/tutorial-wordpress-plugins-crear-plugin-wordpress","default":0},{"locale":"id-ID","link":"https:\/\/www.hostinger.com\/id\/tutorial\/membuat-plugin-wordpress","default":0},{"locale":"de-DE","link":"https:\/\/www.hostinger.com\/de\/tutorials\/wordpress-plugin-erstellen","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"es-MX","link":"https:\/\/www.hostinger.com\/mx\/tutoriales\/joomla-vs-wordpress-cms-utilizar-4","default":0},{"locale":"es-CO","link":"https:\/\/www.hostinger.com\/co\/tutoriales\/joomla-vs-wordpress-cms-utilizar-4","default":0},{"locale":"es-AR","link":"https:\/\/www.hostinger.com\/ar\/tutoriales\/tutorial-wordpress-plugins-crear-plugin-wordpress","default":0},{"locale":"pt-PT","link":"https:\/\/www.hostinger.com\/pt\/tutoriais\/criar-plugin-wordpress","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/how-to-create-wordpress-plugin","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/how-to-create-wordpress-plugin","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts\/5450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/users\/138"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/comments?post=5450"}],"version-history":[{"count":30,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts\/5450\/revisions"}],"predecessor-version":[{"id":50037,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts\/5450\/revisions\/50037"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/media?parent=5450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/categories?post=5450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/tags?post=5450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}