Ejemplo de código fuente

Esta entrada forma parte del siguiente tutorial

  1. Creación de Plugins en WordPress (I)
  2. Creación de Plugins en WordPress (II): Organización y Trucos

Hará aproximadamente un par de años que tres compañeros (y amigos) míos decidimos probar suerte y tirar adelante una idea de negocio muy chula. Por algún motivo, decidimos que la montaríamos encima de WordPress, aunque por aquel entonces no teníamos muy claro cómo funcionaba WordPress y cómo podíamos extenderlo… Aún así, fuimos bastante atrevidos y nos tiramos a la piscina 😛 Como puedes imaginar, los primeros meses fueron «moviditos»; tuvimos que adquirir un montón de conocimientos en poco tiempo para poder empezar cuanto antes con el desarrollo. ¿Que qué hicimos? Lo mismo que tú ahora: buscar y leer recursos y tutoriales en la red y escribir mucho, muchísimo código de prueba 😉

Después de dos años trabajando exclusivamente en el ecosistema de WordPress y de haber desarrollado varios plugins, he pensado que sería una buena idea compartir mi experiencia contigo y enseñarte cómo crear plugins en WordPress. A lo largo de esta y próximas entradas, te explicaré todo lo que necesitas saber para escribir buenos plugins, es decir, plugins que sean funcionales, extensibles y mantenibles. En cierto modo, pues, intentaré crear el tutorial que me hubiera gustado tener cuando yo empecé. Como verás, habrá poca teoría y mucha práctica… de tal forma que los conocimientos que deberás adquirir irán apareciendo a medida que los necesitemos. ¡Espero que te guste!

En la entrada de hoy aprenderás cómo:

  1. crear el esqueleto básico de un plugin,
  2. cambiar el título de todas las entradas haciendo que muestren un texto fijo y
  3. hacer el cambio del paso 2 de forma selectiva (según lo que tú, como autor de una entrada, decidas).

Crear tu primer plugin

Crear un plugin para WordPress es extremadamente sencillo. Lo único que tienes que hacer es crear una nueva carpeta en el directorio wp-content/plugins/ y añadir un fichero con el código fuente. Por ejemplo, vamos a crear un plugin que se llame wprincipiante-ejemplo. Para ello, crea la carpeta wp-content/plugins/wprincipiante-ejemplo/ y añade un nuevo fichero dentro llamado wprincipiante-ejemplo.php con el siguiente contenido:

Si ahora vamos al Escritorio de WordPress » Plugins, veremos que nuestro nuevo plugin Ejemplo de WPrincipiante aparece correctamente listado, con su versión, su autor, su descripción, enlaces a nuestra web… Vamos, que WordPress está usando toda la información que hemos añadido en el comentario inicial de wprincipiante-ejemplo.php.

Cómo añadir alguna funcionalidad al plugin

¡Felicidades! Acabas de crear tu primer plugin, aunque por desgracia no hace absolutamente nada útil. WordPress ofrece diferentes APIs para implementar nuevas funcionalidades. Algunos ejemplos de estas APIs son:

  • Plugins API. Es la API más básica que debemos dominar para poder extender WordPress con nuestros plugins.
  • Settings API. Ofrece un conjunto de operaciones para crear páginas de configuración de nuestro plugin.
  • Options API. Permite almacenar (y recuperar) las opciones de configuración de nuestro plugin.
  • Widgets API. Permite crear nuevos widgets que podrán añadirse a una instalación de WordPress y ser visibles desde el front-end.
  • y muchas, muchas más otras

Hace un par de días, mi compañero Antonio te explicaba con muchísimo detalle la API de Plugins. Básicamente, aquí encontramos el concepto de hook. Como nos contaba Toni, los hooks son mecanismos que ofrece WordPress para permitir “enganchar” las acciones de tu plugin a diferentes partes de WordPress.

Tu primer hook

Vamos a añadir un poco de funcionalidad al plugin. Añade el siguiente fragmento de código al final del fichero wprincipiante.php (no vuelvas a incluir la etiqueta <?php; únicamente la añado para que el código tenga resaltado de sintaxis):

Si has activado el plugin y vas a tu blog, verás que todos los títulos de todas tus páginas y entradas incluyen el texto [Exclusiva]. Así, por ejemplo, la entrada ¡Hola mundo! ahora es [Exclusiva] ¡Hola mundo!.

Vamos a analizar paso a paso lo que acabamos de escribir:

  • Función add_filter. Es, como te decía, el primer hook que usaremos. Aquí, lo que básicamente le estamos diciendo a WordPress es que «cuando se produzca el evento the_title (es decir, cuando WordPress esté a punto de escribir el título de una entrada o página), ejecute la función wprincipiante_cambiar_titulo.
  • Creamos una nueva función. Con la instrucción anterior le hemos dicho a WordPress que cuando se produzca el evento the_title tendrá que llamar a una cierta función. Esta función, sin embargo, no existe por defecto, así que habrá que crearla. Además, le hemos dicho (porque así está documentado) que la función deberá aceptar dos parámetros ($title e $id). Vamos, pues, a crear esta función.
  • El cuerpo de la función. Finalmente, sólo nos queda ver y entender el cuerpo de la función wprincipiante_cambiar_titulo, el cual no tiene ningún misterio: simplemente le añade al título la cadena [Exclusiva].

Tipos de hooks: filtros y acciones

Recordemos que existen dos tipos de hooks:

  • Acciones. Una acción es una función PHP que se ejecuta cuando se produce un cierto evento en WordPress. Ejemplos de eventos son guardar una entrada, modificar la base de datos o enviar la etiqueta head del HTML. Aquí encontrarás la lista con (prácticamente) todas las acciones disponibles en WordPress.
  • Filtros. Un filtro es parecido a una acción, pero con una diferencia: reciben un valor de entrada, lo procesan de alguna forma para modificarlo y devuelven el nuevo valor. El ejemplo que acabamos de programar es, precisamente, un filtro. El código que hemos escrito en el plugin toma como valor de entrada el título de una entrada o página cualquiera, lo modifica añadiéndole un pequeño texto y devuelve la versión modificada del título. Aquí tienes la lista con los filtros disponibles.

Extender la información de las entradas

De momento, todo lo que te he explicado ya estaba más o menos cubierto en la anterior entrada de WPrincipiante. Con esto ya tienes las nociones básicas para hacer prácticamente cualquier cosa en WordPress. Vamos a ver cómo ir un paso más allá y descubramos cómo usar algunos recursos más de los que nos ofrece WordPress para hacer un plugin más potente. En concreto, vamos a:

  1. Modificar el editor de entradas. Añadiremos una nueva caja de edición en las entradas de WordPress donde podremos especificar un texto cualquiera. Este texto será específico de cada entrada (como lo son el título o el contenido) y será una «Extensión del título».
  2. Guardar el nuevo campo. Modificaremos la información que WordPress almacena de una entrada y le añadiremos un campo adicional que nos permitirá almacenar y recuperar esa «extensión del título».
  3. Modificar el título con ese campo. Haremos que los títulos de cada entrada incluyan la extensión almacenada en 2.

Por ejemplo, imaginemos que tenemos dos entradas en WordPress:

  • ¡Hola Mundo!
  • Bienvenidos a mi blog

Nuestro objetivo es que el autor de una entrada pueda añadir el texto que quiera al título (por ejemplo, «WordPress mola» en la primera entrada) para que, cuando un visitante acceda al blog, vea lo siguiente:

  • ¡Hola mundo! WordPress mola
  • Bienvenidos a mi blog

¿Empezamos?

Añadir la caja de edición (meta box) en el editor de entradas

Por defecto, esta es la apariencia que tiene el editor de entradas de WordPress:

Captura de pantalla del editor de entradas por defecto de WordPress.
Captura de pantalla del editor de entradas por defecto de WordPress.

Lo mínimo que cualquier entrada nos exige es un título y un contenido, y eso son las dos primeros campos de texto grandes que vemos. Alrededor de esos dos elementos tenemos un montón de cajitas: Publicar, Imagen Destacada, Etiquetas, Extracto, Categorías Estas cajas se llaman meta boxes y nos permiten añadir información adicional a nuestra entrada (por ejemplo, una imagen destacada, una lista de etiquetas o las categorías a las que pertenece).

Veamos cómo puedes crear tu propia meta box. Para ello, bastará con realizar una búsqueda rápida en el Codex de WordPress para encontrar una función llamada add_meta_box, la cual tiene todos los números de ser la que necesitamos:

Vamos a invocar esta operación para crear nuestra nueva meta box. Para ello, simplemente hay que añadir el siguiente código:

Permíteme que te explique qué acabamos de hacer 🙂

Para empezar, fíjate que estamos llamando a la función add_meta_box desde una función (wprincipiante_add_meta_boxes) vinculada a una acción (add_meta_boxes). ¿Por qué todo este follón? Bueno, básicamente porque la documentación nos dice que la función add_meta_box debe llamarse desde la acción add_meta_boxes, así que (a) especificamos un nuevo hook y (b) creamos la función asociada (wprincipiante_add_meta_boxes).

La documentación también nos dice que para crear una meta box hay que invocar la función add_meta_box con tres parámetros: $id, $title y $callback. Si miras la documentación sabrás qué es cada parámetro. El interesante ahora mismo es el tercero, el cual indica el nombre de la función que dibuja el contenido de la cajita. En nuestro ejemplo, la función es wprincipiante_print_extension_titulo_meta_box, y como la hemos dejado vacía, la meta box aparece también vacía. Ve a la página de edición de entradas y lo verás:

Nueva meta box "Extensión del Título" vacía.
Nueva meta box «Extensión del Título» vacía.

Si quieres añadirle contenido, simplemente define el cuerpo de la función wprincipiante_print_extension_titulo_meta_box y escribe:

para conseguir esto:

Nueva meta box "Extensión del Título" con un campo de texto que el usuario puede rellenar.
Nueva meta box «Extensión del Título» con un campo de texto que el usuario puede rellenar.

Guardar el nuevo valor

Usando la meta box que acabamos de crear podemos especificar qué texto habrá que añadir en el título de una entrada cualquiera. Sin embargo, antes deberemos guardar este campo en la base de datos y hacerlo permanente.

WordPress nos permite añadir cualquier tipo de información adicional a una entrada dada a través de lo que se conoce como «campos personalizados«. Lo que tenemos que hacer, pues, es usar las funciones que nos permiten manipular estos campos personalizados en el momento en el que la entrada se va a guardar:

Como puedes ver, estamos siguiendo el mismo patrón una y otra vez a lo largo de todo el tutorial de hoy. Así, usamos las acciones y filtros que nos ofrece WordPress para conseguir manipular lo que queremos cuando queremos. En este caso, hemos creado una nueva función (wprincipiante_save_extension_titulo) que se ejecuta en el momento en que WordPress va a guardar una entrada en la base de datos (acción save_post). El código de esta función no tiene ningún secreto:

Añadimos algunas comprobaciones de rigor. Básicamente, miramos que no estemos guardando una copia automática y, ya que la función que estamos creando sirve para guardar el texto de la extensión de título, comprobamos que efectivamente ese texto está definido.

A continuación, cogemos el valor en cuestión y lo pasamos por una función sanitize. Esto es algo importante: siempre que recojamos valores de los usuarios, habrá que pasarlos por una función de estas. Por ejemplo, si esperamos un número entero, hay que comprobar que efectivamente nos ha pasado un entero.

  • Para recuperar el valor, accedemos a un array de PHP llamado $_REQUEST. Este array contiene los valores que se hayan enviado al guardar la entrada y, en concreto, el del campo <input type="text"> que hemos añadido en nuestra meta box. Para acceder a ese valor, basta con usar el nombre del campo (wprincipiante-extension-titulo) como índice del array.
  • Finalmente, guardamos el valor en un campo personalizado que hemos decidido llamar _wprincipiante_ejemplo_extension_titulo usando la función update_post_meta.
  • Ahora, cada vez que editemos y guardemos una entrada, el valor que hayamos introducido en el campo de nuestra meta box se guardará en el campo personalizado _wprincipiante_ejemplo_extension_titulo de la entrada en cuestión.

Ahora bien, si editas una entrada, le añades un texto a ese campo y la guardas, verás que el campo aparecerá vacío, como si no se hubiera guardado correctamente. ¿Por qué pasa eso, si te acabo de decir que sí lo hemos guardado? Sigue leyendo y lo entenderás 😉

Usar el nuevo campo en el front-end y en el back-end

Fijémonos un segundo en la función encargada de pintar el campo de texto, la cual hemos definido antes:

Cada vez que pintamos el campo de texto input, éste está vacío. Si queremos que muestre el valor del campo personalizado _wprincipiante_ejemplo_extension_titulo, tendremos que recuperar ese valor de la base de datos. Así es como deberíamos haberlo hecho:

Para recuperar el valor del campo personalizado, simplemente usamos la función get_post_meta con el identificador de la entrada y el nombre del campo en cuestión. Luego, bastará con escribir el valor donde toque (en este caso, dentro del atributo value value de la etiqueta input).

Fíjate que el echo no es directamente del valor $val, sino que lo pasamos por una función llamada esc_attr. Esta función se encarga de escapar los caracteres que podrían romper el HTML resultante. Por ejemplo, si el valor del campo personalizado fuera:

  • Este es mi «texto» favorito

y lo escribiéramos por pantalla directamente, nos quedaría el siguiente value:

que, como puedes ver, se rompe porque hay demasiadas comillas dobles (parece que el valor del atributo value sólo es «Este es mi» y lo que viene después es… quién sabe, algo mal formateado).

En cambio, si usamos la función esc_attr, este es el resultado:

el cual funciona perfectamente (porque las comillas dobles se han sustituido por &quot;).

Finalmente, sólo nos queda usar esta cadena de texto en el front-end. Ya habíamos definido una función (wprincipiante_cambiar_titulo) que modificaba el título de nuestras entradas. Vamos a mejorar esa función para que use el nuevo valor:

Como ves, volvemos a recuperar el valor usando la llamada que ya conocemos, comprobamos que ese valor realmente exista para la entrada en cuestión y, si existe, lo añadimos al título.

¡Y eso es todo! Ya hemos hecho un plugin bastante completito en muy poco tiempo. Interesante, ¿verdad?

Resumiendo

Crear plugins no es excesivamente complicado. Hay que controlar el conjunto de filtros y acciones que nos ofrece WordPress y usarlos según los necesitemos. De todas formas, el código que hemos escrito hoy se puede mejorar muchísimo: estamos mezclando funcionalidades del plugin (código PHP) con la interfaz de usuario (contenido HTML), el código del front-end y del back-end está todo en el mismo fichero, todas las funciones son públicas… En la próxima entrada te explicaré cómo debes organizar el código y compartiré mis cinco trucos para escribir buen código.

¡Nos vemos la semana que viene!

Imagen destacada de mi portátil 😛

27 respuestas a «Creación de Plugins en WordPress (I)»

  1. Avatar de Francisco Arroyo
    Francisco Arroyo

    Muchas gracias por este tutorial. Muy explicado.
    El add_meta_boxes funciona bien y al grabar el contenido de $texto asigna un $post->ID con valor de 115

    el problema que tengo es que no se ejecuta la

    function wprincipiante_cambiar_titulo( $title, $id )

    ya que el $id no corresponde al valor de $post->ID.

    si meto directamente el valor del meta_boxes 115 en get_post_meta(), si se ejecuta y se afectan todos los títulos como lo hiciste al inicio.

    function wprincipiante_cambiar_titulo( $title, $id ) {
    $texto = get_post_meta( 115, ‘_wprincipiante_extension_titulo’, true );
    if ( ! empty( $texto ) ) {
    $title = $title . ‘ ‘ . $texto;
    } else {
    $title = $title . ‘ no texto ‘;
    }
    return $title;
    }

    Como retomo el valor del ID del meta bos para que se envie en la variable $id a la function

    wprincipiante_cambiar_titulo( $title, $id )

    Gracias, y
    Saludos

    1. Avatar de David Aguilera

      Buenos días, Francisco.

      Si echas un vistazo al Codex, verás que el filtro the_title tiene dos parámetros: el $title (título) y el $id de la entrada a la que el título en cuestión corresponde. Según nos comentas, el parámetro $id no contiene el valor correcto. Esto se puede deber a dos motivos:

      El hook no está bien. Normalmente, añadimos filtros a WordPress así: add_filter( 'nombre_filtro', 'nombre_funcion' ), con únicamente dos parámetros (el nombre de un filtro y la función que hay que invocar). Esto, por defecto, hace que, cuando se «ejecuta» el filtro nombre_filtro, se invoca la función nombre_funcion con un único parámetro. No obstante, en nuestro caso necesitamos que el hook nos pase dos parámetros, no uno. Para ello, tenemos que añadir el filtro así: add_filter( 'nombre_filtro', 'nombre_funcion', 10, 2 ), donde especificamos dos parámetros adicionales: la prioridad (por defecto, 10) y el número de parámetros del filtro que nuestra función necesita (en nuestro caso, 2). Si te has olvidado de añadir esta segunda parte (10, 2), entonces ya sabes dónde está el fallo.
      No se está usando correctamente el filtro. Otra posibilidad, un poco más remota pero no imposible, es que alguien no esté usando correctamente el hook. Me explico: este filtro normalmente se usa en la función de WordPress the_title (también get_the_title). Pero nada impide que un tema o un plugin lo usen directamente: $title = apply_filters( 'the_title', $title, $id ). Si quien invoca el filtro lo está haciendo mal, no es de extrañar que las cosas no funcionen. Para descartar este caso, lo mejor es que hagas las pruebas con el tema por defecto de WordPress (Twenty Fifteen o Twenty Sixteen).

      ¡Ya nos dirás qué tal!

      Un saludo,
      David

    2. Avatar de RODOLFO SEALES
      RODOLFO SEALES

      Hola, como estas? requiero de precison cuando estipulas en el aparte de Usar el nuevo campo en el front-end y en el back-end, como se puede hacer la diferencia entre el front-end y el back-end ya que hay partes que no queremso sean vistas por alguna d elas partes. ? Por otro lado, me gustaria saber si puedes regalarnos una explicacion detallada de el uso delos otros tipos de campos, su aplicacion, verificacion en base de datos y mostrarlos? Como se podria realizar un panel de adminisrador del plugins con los ajustes? osea, una admin pages.?

      1. Avatar de David Aguilera

        Cuando hablo de front-end y de back-end me refiero a lo que mostramos a todo el mundo (front) o lo que solo vemos en el Escritorio de WordPress (back). WordPress tiene una función específica, is_admin, que nos dice si la pantalla actual que está viendo el usuario es del Escritorio de WordPress o no.

        En cuanto a los ajustes para configurar un plugin propio, te recomiendo esta entrada que publiqué hace unos meses. Espero te sirva de ayuda.

  2. Avatar de Lousmar
    Lousmar

    Excelente, la lectura es muy fresca, es como si lo estuviera explicando aquí a mi frente. Esto era justo lo que necesitaba para ‘tomar el tren’ y empezar mi viaje, continuare la lectura del siguiente post pero no sin antes dejar mi agradecimiento por este tutorial, GRACIAS!

    Saludos,
    Lousmar González.

    1. Avatar de Antonio Villegas

      ¡Gracias a ti por tu apoyo, Lousmar!

  3. Avatar de Daniel

    Un tutorial muy genial. Muy bien explicado.

  4. Avatar de Andrés

    Muy buena explicación, gracias por compartir material de gran utilidad ya que es muy difícil conseguirlo.

    1. Avatar de David Aguilera

      Me alegro que te haya gustado la entrada, Andrés. ¡Un saludo y felices fiestas!

  5. Avatar de YENG QUISPE

    Excelente explicación!!, gracias por tu aporte!!

    1. Avatar de David Aguilera

      ¡Gracias a ti por leernos, Yeng Quispe!

  6. Avatar de Egoitz @aldakur

    Hola, Excelente post. Tengo una duda:

    «Finalmente, guardamos el valor en un campo personalizado que hemos decidido llamar _wprincipiante_ejemplo_extension_titulo usando la función update_post_meta» En realidad donde esta guardado ese campo? en la base de datos? Yo no lo encuentro.

    Un saludo!

    1. Avatar de David Aguilera

      Sí, está en la base de datos. Los campos personalizados se guardan en la tabla wp_postmeta.

  7. Avatar de Victor
    Victor

    Fantástico tutorial para adentrarse en la creación de plugins. Así explicado parece más fácil 😀
    Me surge una duda, ¿Se podría añadir un archivo PDF en lugar de un «text» como meta_box? Es decir, si quiero que mis post se acompañen de un archivo PDF, ¿podría definir mi propio meta box y decirle que me guarde en la base de datos el archivo PDF?
    Saludos y gracias.

    1. Avatar de David Aguilera

      Un placer poder compartir nuestra experiencia.

      Me surge una duda, ¿Se podría añadir un archivo PDF en lugar de un “text” como meta_box? Es decir, si quiero que mis post se acompañen de un archivo PDF, ¿podría definir mi propio meta box y decirle que me guarde en la base de datos el archivo PDF?

      Por supuesto. Aunque, en este caso, yo recomendaría subir el fichero a la Biblioteca de Medios y poner un selector que te deje escoger el PDF que quieras de entre los que hay en la biblioteca.

  8. Avatar de Juan Carlos Lopez Escalona

    Hola muchas gracias por tus tutoriales, quería hacerte una pregunta, estoy desarrollando un plugin en el que los usuarios interactúan y en base a las opciones que seleccionan se crea un archivo PDF para que el usuario lo descargué, anteriormente he logrado eso con la librería PHPExcel para Excel pero no consigo una librería para PDF, si conoces alguna podrías recomendarme una que pueda incluir en mi plugin, gracias por tu valioso tiempo.

    1. Avatar de David Aguilera

      ¡Hola!

      Por desgracia, no conozco ninguna librería para ello. Pero puedes preguntar en los foros de soporte de WordPress, a ver si alguien puede echarte un cabo.

      Un saludo,
      David

  9. Avatar de Jorge Hernández
    Jorge Hernández

    Excelente material, te felicito!

    Es posible desarrollar un programa en PHP utilizando una base de datos MySQL e incorporarlo como Plugin de WordPress? O de qué otra manera pudiera realizarse su incorporación a WordPress?

    Gracias por la atención y nuevamente felicidades por el post.

    1. Avatar de David Aguilera

      Gracias, Jorge. Sí, claro, por supuesto que es posible desarrollar un «programa PHP» y meterlo como plugin de WordPress; de hecho, eso es precisamente lo que es un plugin de WordPress, ¿no? Ahora bien, todo lo que hagas con ese plugin debería usar las diferentes APIs de WordPress. Te recomiendo que mires la documentación para entender mejor cómo hacer tu primer plugin.

      ¡Suerte!

      1. Avatar de RODOLFO SEALES
        RODOLFO SEALES

        Hola, Gracias por tan interesante articulo. Una pregunta relacionada: Es posible si… crear el archivo o programa en PHP, pero no como un plugin, que utilice la base de datos de wordpres como si fuese una aplicacion diferente y utilizando todas las funciones «mezcladas» de varios plugings para que puedan hacer las funciones que a uno coo progrmador le gustaria contar de varios plugings? es decir, que las funciones de unos plugings instalados se mezclen en algo nuevo tomando cada parte de cada plugings para lograr un objetivo suma de varios plugins?

        1. Avatar de David Aguilera

          Bueno, para añadir tu propio código a WordPress (lo que tú llamas «un archivo en PHP») debes hacerlo como si de un plugin se tratara. Si no quieres que dicho plugin pueda activarse o desactivarse a voluntad del administrador del sitio, puedes crear un «must use plugin» (lo que es como un plugin normal pero que siempre está activo y que no aparece listado en la sección de Plugins del Escritorio de WordPress).

          Dicho esto, cualquier plugin (o mu-plugin) que metas en WordPress tiene acceso a todo lo que hay en ese WordPress. O sea que, sí, puedes crear un programita que use funciones de otros plugins, acceda y manipule los datos de la base de datos, etc.

  10. Avatar de Joshua Aranza
    Joshua Aranza

    Desearía crear un plugin que me permita tener otro elemento en la barra lateral de worpdress donde pueda crear nuevas paginas. Solo voy a crear páginas enfocadas a Landing Page, pero no quiero hacerlas en el menú de páginas

    1. Avatar de David Aguilera

      Si quieres crear páginas, lo más cómodo es hacerlo desde el propio menú de Páginas, ya que allí tienes el editor de páginas de WordPress. Si quieres añadir un nuevo tipo de contenido, puedes hacerlo usando una función llamada register_post_type, con lo que aparecería una nueva opción en el menú izquierdo del escritorio de WordPress desde el que añadir nuevos contenidos. No estarías creando exactamente «páginas», aunque a efectos prácticos lo parecieran.

      En cualquier caso, no tengo muy claro qué quieres hacer… me temo que no puedo ayudarte mucho más.

      Un saludo,
      David

  11. Avatar de Marisol
    Marisol

    Ha sido muy util tu post. Gracias

    1. Avatar de David Aguilera

      Gracias a ti por leernos, Marisol. ¡Un saludo!

  12. Avatar de Gustavo M. Matias
    Gustavo M. Matias

    Hola, no se si es una cuestión de versión de WP, pero aparece este error.
    Como puedo solucionarlo?
    Gracias

    Fatal error: Uncaught Error: Call to undefined function add_meta_box() in D:\server\wordpress\wp-content\plugins\calculadora-cajas\calculadora-cajas.php:17 Stack trace: #0 D:\server\wordpress\wp-settings.php(453): include_once() #1 D:\server\wordpress\wp-config.php(90): require_once(‘D:\\server\\wordp…’) #2 D:\server\wordpress\wp-load.php(50): require_once(‘D:\\server\\wordp…’) #3 D:\server\wordpress\wp-admin\admin.php(34): require_once(‘D:\\server\\wordp…’) #4 D:\server\wordpress\wp-admin\post-new.php(10): require_once(‘D:\\server\\wordp…’) #5 {main} thrown in D:\server\wordpress\wp-content\plugins\calculadora-cajas\calculadora-cajas.php on line 17

    1. Avatar de David Aguilera

      La función add_meta_box no puede llamarse en cualquier momento; debe hacerse durante la acción add_meta_boxes. ¿Lo estás haciendo así?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad de Nelio Software

Tus datos personales se almacenarán en SiteGround y serán usados por Nelio Software con el único objetivo de publicar tu comentario aquí. Con el envío de este comentario, nos das el consentimiento expreso para ello. Escríbenos para acceder, rectificar, limitar o eliminar tus datos personales.