{"id":2186,"date":"2023-05-22T19:30:08","date_gmt":"2023-05-23T01:30:08","guid":{"rendered":"http:\/\/racmanuel.dev\/?p=2186"},"modified":"2023-05-22T19:35:02","modified_gmt":"2023-05-23T01:35:02","slug":"como-guardar-campos-personalizados-en-una-tabla-sql-personalizada-creando-un-plugin-para-wordpress","status":"publish","type":"post","link":"https:\/\/racmanuel.dev\/en\/como-guardar-campos-personalizados-en-una-tabla-sql-personalizada-creando-un-plugin-para-wordpress\/","title":{"rendered":"How to save custom fields in a custom SQL table by creating a WordPress plugin"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Este tutorial te guiar\u00e1 paso a paso para crear un plugin de WordPress que permita guardar campos personalizados en una tabla SQL personalizada. Los campos personalizados se podr\u00e1n agregar y editar en la p\u00e1gina de edici\u00f3n de posts.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1880\" height=\"1214\" src=\"http:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1.jpeg\" alt=\"business coffee composition computer\" class=\"wp-image-2190\" title=\"\" srcset=\"https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1.jpeg 1880w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1-600x387.jpeg 600w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1-300x194.jpeg 300w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1-1024x661.jpeg 1024w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1-768x496.jpeg 768w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-265667-1-1536x992.jpeg 1536w\" sizes=\"(max-width: 1880px) 100vw, 1880px\" \/><figcaption class=\"wp-element-caption\">Photo by Pixabay on <a href=\"https:\/\/www.pexels.com\/photo\/business-coffee-composition-computer-265667\/\" rel=\"nofollow noopener\" target=\"_blank\">Pexels.com<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Claro! Aqu\u00ed tienes algunos beneficios y desventajas de guardar los campos personalizados en una tabla SQL personalizada:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"beneficios\">Beneficios:<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Flexibilidad de estructura:<\/span> Al utilizar una tabla SQL personalizada, tienes el control total sobre la estructura de los campos personalizados. Puedes definir los tipos de datos, restricciones y relaciones seg\u00fan tus necesidades espec\u00edficas.<\/li>\n\n\n\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Consultas personalizadas:<\/span> Al almacenar los campos personalizados en una tabla SQL, puedes realizar consultas personalizadas utilizando el lenguaje SQL para obtener, filtrar y ordenar los datos de manera eficiente.<\/li>\n\n\n\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Escalabilidad:<\/span> Al tener una tabla SQL personalizada, tienes la capacidad de manejar grandes vol\u00famenes de datos y escalar tu soluci\u00f3n a medida que tu sitio web crece.<\/li>\n\n\n\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Integraci\u00f3n con otras aplicaciones:<\/span> Al utilizar una tabla SQL, puedes interactuar con los campos personalizados desde otras aplicaciones o servicios que tambi\u00e9n se conectan a la base de datos.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"desventajas\">Desventajas:<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Mantenimiento adicional:<\/span> Al utilizar una tabla SQL personalizada, debes encargarte del mantenimiento y la gesti\u00f3n de esa tabla por separado. Esto puede requerir actualizaciones manuales o ajustes en la estructura de la tabla seg\u00fan sea necesario.<\/li>\n\n\n\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Complejidad:<\/span> Utilizar una tabla SQL personalizada agrega un nivel adicional de complejidad a tu implementaci\u00f3n. Requiere conocimientos de SQL y bases de datos, as\u00ed como un cuidadoso dise\u00f1o y planificaci\u00f3n de la estructura de la tabla.<\/li>\n\n\n\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Dependencia de la base de datos:<\/span> Al utilizar una tabla SQL personalizada, tu soluci\u00f3n est\u00e1 m\u00e1s vinculada a la base de datos subyacente. Si cambias de base de datos en el futuro, puede requerir ajustes significativos en tu c\u00f3digo y estructura de datos.<\/li>\n\n\n\n<li><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Mayor tiempo de desarrollo:<\/span> La implementaci\u00f3n de una tabla SQL personalizada para almacenar los campos personalizados puede requerir m\u00e1s tiempo de desarrollo en comparaci\u00f3n con las opciones predeterminadas de WordPress, como los metadatos adicionales.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Es importante evaluar cuidadosamente tus necesidades y considerar los beneficios y desventajas antes de decidir almacenar los campos personalizados en una tabla SQL personalizada. Puede ser una opci\u00f3n poderosa y flexible, pero tambi\u00e9n requiere un mayor nivel de complejidad y responsabilidad de mantenimiento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-1-crear-el-plugin-y-activarlo\"><strong>Paso 1: Crear el plugin y activarlo<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Crea una nueva carpeta en el directorio <code>wp-content\/plugins<\/code> de tu instalaci\u00f3n de WordPress.<\/li>\n\n\n\n<li>Dentro de la carpeta del plugin, crea un archivo llamado <code>custom-fields-plugin.php<\/code>.<\/li>\n\n\n\n<li>Copia y pega el c\u00f3digo proporcionado al final de este tutorial.<\/li>\n\n\n\n<li>Personaliza el encabezado del plugin con tu informaci\u00f3n.<\/li>\n\n\n\n<li>Guarda el archivo y activa el plugin desde el panel de administraci\u00f3n de WordPress.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-2-generar-la-tabla-sql-personalizada-al-activar-el-plugin\"><strong>Paso 2: Generar la tabla SQL personalizada al activar el plugin<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El c\u00f3digo proporcionado incluye una funci\u00f3n llamada <code>custom_fields_plugin_activation()<\/code>, que se ejecutar\u00e1 autom\u00e1ticamente cuando actives el plugin.<\/li>\n\n\n\n<li>En esta funci\u00f3n, se verifica si la tabla SQL personalizada ya existe utilizando el objeto <code>$wpdb<\/code> de WordPress.<\/li>\n\n\n\n<li>Si la tabla no existe, se crea utilizando la funci\u00f3n <code>dbDelta()<\/code>. Aseg\u00farate de reemplazar <code>'custom_fields'<\/code> con el nombre deseado para tu tabla.<\/li>\n\n\n\n<li>Cuando actives el plugin, la tabla se generar\u00e1 autom\u00e1ticamente si no existe.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-3-guardar-los-campos-personalizados-en-la-tabla\"><strong>Paso 3: Guardar los campos personalizados en la tabla<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El c\u00f3digo incluye una funci\u00f3n llamada <code>custom_fields_save($post_id)<\/code> que se ejecutar\u00e1 cada vez que se guarde un post en WordPress.<\/li>\n\n\n\n<li>Dentro de esta funci\u00f3n, se obtienen los valores de los campos personalizados a trav\u00e9s de <code>$_POST<\/code> y se almacenan en variables.<\/li>\n\n\n\n<li>Luego, los valores se guardan en la tabla SQL personalizada utilizando la funci\u00f3n <code>$wpdb-&gt;replace()<\/code>.<\/li>\n\n\n\n<li>Aseg\u00farate de reemplazar <code>'custom_fields'<\/code> con el nombre de tu tabla.<\/li>\n\n\n\n<li>El <code>post_id<\/code> se incluye en el registro para asociar el campo personalizado con el post correspondiente.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-4-mostrar-los-campos-personalizados-en-el-administrador-de-wordpress\"><strong>Paso 4: Mostrar los campos personalizados en el administrador de WordPress<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El c\u00f3digo incluye una funci\u00f3n llamada <code>custom_fields_meta_box($post)<\/code> que se utiliza para mostrar los campos personalizados en la p\u00e1gina de edici\u00f3n de posts.<\/li>\n\n\n\n<li>Dentro de esta funci\u00f3n, se obtienen los valores almacenados en la tabla SQL personalizada utilizando <code>$wpdb<\/code>.<\/li>\n\n\n\n<li>Luego, se muestran los campos personalizados en el formulario utilizando HTML y se prellenan con los valores almacenados.<\/li>\n\n\n\n<li>Aseg\u00farate de reemplazar <code>'custom_fields'<\/code> con el nombre de tu tabla.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-5-personalizacion-adicional-y-mejoras\"><strong>Paso 5: Personalizaci\u00f3n adicional y mejoras<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes personalizar el plugin seg\u00fan tus necesidades. Por ejemplo, puedes agregar m\u00e1s campos personalizados, aplicar validaciones de datos, agregar estilos CSS para mejorar la apariencia, etc. Tambi\u00e9n es importante tener en cuenta las mejores pr\u00e1cticas de seguridad al interactuar con la base de datos, como la sanitizaci\u00f3n y validaci\u00f3n de los datos ingresados.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading\" id=\"paso-1-crear-el-plugin-y-activarlo\"><strong>C\u00f3digo Completo<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\/*\nPlugin Name: Custom Fields Plugin\nPlugin URI: https:\/\/tu-sitio-web.com\/\nDescription: Plugin para guardar campos personalizados en una tabla SQL personalizada.\nVersion: 1.0\nAuthor: Tu Nombre\nAuthor URI: https:\/\/tu-sitio-web.com\nLicense: GPLv2 or later\nText Domain: custom-fields-plugin\n*\/\n\n\/\/ Funci\u00f3n para crear la tabla SQL personalizada al activar el plugin\nfunction custom_fields_plugin_activation() {\n    global $wpdb;\n    $table_name = $wpdb-&gt;prefix . 'custom_fields'; \/\/ Reemplaza 'custom_fields' con el nombre deseado para tu tabla\n\n    \/\/ Verifica si la tabla ya existe\n    if ($wpdb-&gt;get_var(\"SHOW TABLES LIKE '$table_name'\") != $table_name) {\n        \/\/ Crea la tabla\n        $charset_collate = $wpdb-&gt;get_charset_collate();\n\n        $sql = \"CREATE TABLE $table_name (\n            id mediumint(9) NOT NULL AUTO_INCREMENT,\n            field1 varchar(255) NOT NULL,\n            field2 varchar(255) NOT NULL,\n            post_id bigint(20) NOT NULL,\n            PRIMARY KEY  (id)\n        ) $charset_collate;\";\n\n        require_once(ABSPATH . 'wp-admin\/includes\/upgrade.php');\n        dbDelta($sql);\n    }\n}\nregister_activation_hook(__FILE__, 'custom_fields_plugin_activation');\n\n\/\/ Funci\u00f3n para guardar los campos personalizados en la tabla SQL personalizada\nfunction custom_fields_save($post_id) {\n    \/\/ Verificar si es un guardado autom\u00e1tico y si el usuario tiene permisos suficientes\n    if (defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE) {\n        return;\n    }\n\n    if (!current_user_can('edit_post', $post_id)) {\n        return;\n    }\n\n    \/\/ Obtener los valores de los campos personalizados\n    $field1_value = $_POST['field1'];\n    $field2_value = $_POST['field2'];\n\n    \/\/ Guardar los valores en la tabla SQL personalizada\n    global $wpdb;\n    $table_name = $wpdb-&gt;prefix . 'custom_fields'; \/\/ Reemplaza 'custom_fields' con el nombre de tu tabla\n\n    $wpdb-&gt;replace(\n        $table_name,\n        array(\n            'field1' =&gt; $field1_value,\n            'field2' =&gt; $field2_value,\n            'post_id' =&gt; $post_id\n        ),\n        array('%s', '%s', '%d')\n    );\n}\nadd_action('save_post', 'custom_fields_save');\n\n\/\/ Funci\u00f3n para mostrar los campos personalizados en el administrador de WordPress\nfunction custom_fields_meta_box($post) {\n    \/\/ Obtiene los valores almacenados en la tabla SQL\n    global $wpdb;\n    $table_name = $wpdb-&gt;prefix . 'custom_fields'; \/\/ Reemplaza 'custom_fields' con el nombre de tu tabla\n    $results = $wpdb-&gt;get_results(\"SELECT * FROM $table_name WHERE post_id = $post-&gt;ID\");\n\n    \/\/ Mostrar los campos personalizados en el formulario\n    ?&gt;\n    &lt;label for=\"field1\"&gt;Field 1:&lt;\/label&gt;\n    &lt;input type=\"text\" name=\"field1\" id=\"field1\" value=\"&lt;?php echo $results[0]-&gt;field1; ?&gt;\"&gt;&lt;br&gt;\n\n    &lt;label for=\"field2\"&gt;Field 2:&lt;\/label&gt;\n    &lt;input type=\"text\" name=\"field2\n\n\" id=\"field2\" value=\"&lt;?php echo $results[0]-&gt;field2; ?&gt;\"&gt;&lt;br&gt;\n    &lt;?php\n}\n\n\/\/ Funci\u00f3n para agregar la metabox en la p\u00e1gina de edici\u00f3n de posts\nfunction custom_fields_add_meta_box() {\n    add_meta_box(\n        'custom_fields',\n        'Custom Fields',\n        'custom_fields_meta_box',\n        'post',\n        'normal',\n        'default'\n    );\n}\nadd_action('add_meta_boxes', 'custom_fields_add_meta_box');<\/code><\/pre>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Espero que este tutorial te sea \u00fatil para crear tu propio plugin de WordPress para guardar campos personalizados en una tabla SQL personalizada. Si tienes m\u00e1s preguntas, no dudes en hacerlas. \u00a1Buena suerte con tu proyecto!<\/p>\n\n\n<style><\/style><style><\/style>\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h4 class=\"wp-block-heading has-large-font-size\" id=\"necesitas-ayuda-con-un-proyecto-web\">\u00bfNecesitas ayuda con un proyecto web?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si \u00bfNecesitas ayuda con alg\u00fan proyecto web? No dudes en contactarme desarrollo soluciones completas y personalizadas con WordPress y PHP, con herramientas y procesos modernos, utilizando HTML, CSS, SCSS, PHP, JavaScript, Bootstrap y m\u00e1s\u2026 Si \u00bfEst\u00e1s listo? \u00a1Env\u00edame un mensaje y hablemos de tu proyecto web!<\/p>\n\n\n<div class=\"wp-block-groundhogg-forms\">\n\t<div class=\"gh-form-wrapper\"><form method=\"post\" class=\"gh-form gh-form-v2\" target=\"_parent\" enctype=\"multipart\/form-data\" name=\"Formulario de Contacto\" id=\"gh-form-24\" data-id=\"24\"><div class=\"gh-form-fields\"><div class=\"gh-form-column col-1-of-2\"><label for=\"first_name\">Nombre <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"first_name\" id=\"first_name\" class=\"gh-input gh-first-name\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-2\"><label for=\"last_name\">Apellido(s) <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"last_name\" id=\"last_name\" class=\"gh-input gh-last-name\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"email\">Correo electr\u00f3nico <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"email\" name=\"email\" id=\"email\" class=\"gh-input gh-email\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"primary_phone\">Tel\u00e9fono o WhatsApp <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"tel\" name=\"primary_phone\" id=\"primary_phone\" class=\"gh-input\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"nombre_de_tu_negocio_o_empresa\">Nombre de tu Negocio o Empresa<\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"nombre_de_tu_negocio_o_empresa\" id=\"nombre_de_tu_negocio_o_empresa\" class=\"gh-input\" value=\"\"\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"link_de_tu_pagina_web\">Link de tu pagina web<\/label><div class=\"gh-form-input-field\"><input type=\"url\" name=\"link_de_tu_pagina_web\" id=\"link_de_tu_pagina_web\" class=\"gh-input\" value=\"\" placeholder=\"Si tu negocio o empresa tiene p\u00e1gina web ingresa aqu\u00ed el link.\"\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"question_type\">\u00bfQu\u00e9 tipo de pregunta tienes? <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><select name=\"question_type\" id=\"question_type\" class=\"gh-input\" required><option value=\"Cotizaci\u00f3n\">Cotizaci\u00f3n<\/option><option value=\"General\">General<\/option><option value=\"Soporte\">Soporte<\/option><\/select><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"message\">Pregunta <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><textarea name=\"message\" id=\"message\" class=\"gh-input\" rows=\"7\" placeholder=\"Tu pregunta o duda...\" type=\"text\" required><\/textarea><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><div class=\"consent gh-gdpr\" id=\"gdpr_consent\"><div ><label class=\"gh-checkbox-label\"><input type=\"checkbox\" name=\"data_processing_consent\" id=\"data-processing-consent\" class=\"\" value=\"yes\" required\/><span class=\"checkbox-label\">I agree to racmanuel.dev&#8217;s storage and processing of my personal data. <span class=\"required\">*<\/span><\/span><\/label><\/div><div ><label class=\"gh-checkbox-label\"><input type=\"checkbox\" name=\"marketing_consent\" id=\"marketing-consent\" class=\"\" value=\"yes\"\/><span class=\"checkbox-label\">I agree to receive marketing offers and updates from racmanuel.dev.<\/span><\/label><\/div><\/div><\/div><div class=\"gh-form-column col-1-of-3\"><button type=\"submit\" class=\"gh-submit gh-button primary\" value=\"\">\u00a1P\u00f3ngase en contacto!<\/button><\/div><\/div><\/form><\/div><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Este tutorial te guiar\u00e1 paso a paso para crear un plugin de WordPress que permita guardar campos personalizados en una tabla SQL personalizada. Los campos personalizados se podr\u00e1n agregar y editar en la p\u00e1gina de edici\u00f3n de posts.<\/p>","protected":false},"author":1,"featured_media":2193,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"categories":[48],"tags":[42],"niveles":[39],"class_list":["post-2186","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-wordpress","niveles-avanzado"],"blocksy_meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/2186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/comments?post=2186"}],"version-history":[{"count":7,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/2186\/revisions"}],"predecessor-version":[{"id":2196,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/2186\/revisions\/2196"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media\/2193"}],"wp:attachment":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media?parent=2186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/categories?post=2186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/tags?post=2186"},{"taxonomy":"niveles","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/niveles?post=2186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}