{"id":24885,"date":"2022-10-26T22:56:51","date_gmt":"2022-10-26T20:56:51","guid":{"rendered":"\/tutoriales\/?p=24885"},"modified":"2023-02-13T23:03:37","modified_gmt":"2023-02-13T22:03:37","slug":"wordpress-react","status":"publish","type":"post","link":"\/co\/tutoriales\/wordpress-react","title":{"rendered":"Una gu\u00eda para principiantes sobre el desarrollo de proyectos con WordPress y React"},"content":{"rendered":"<p>WordPress es un poderoso <a href=\"\/co\/tutoriales\/que-es-un-cms\">sistema de gesti&oacute;n de contenido (CMS)<\/a> que te permite crear lo que desees, desde sitios simples hasta tiendas de comercio electr&oacute;nico sofisticadas y complejas. Para integrar el c&oacute;digo PHP de la plataforma con JavaScript, puedes aprovechar la <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noreferrer noopener\">API REST de WP<\/a> y WordPress junto con <a href=\"https:\/\/es.reactjs.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">React<\/a>.<\/p><p>Desarrollada por Facebook, React es una biblioteca de <strong>interfaz de usuario (UI)<\/strong> que utiliza un enfoque simple basado en componentes para crear aplicaciones multiplataforma escalables que son f&aacute;ciles de entender. Sin embargo, es importante aprender a usarla correctamente para aprovechar al m&aacute;ximo sus caracter&iacute;sticas y funciones.<\/p><p>En esta gu&iacute;a, explicaremos c&oacute;mo usar React con WordPress. Discutiremos qu&eacute; es el framework, describiremos sus beneficios y te mostraremos c&oacute;mo usarlo. &iexcl;Comencemos!<\/p><p class=\"has-text-align-center\"><a href=\"https:\/\/assets.hostinger.com\/content\/tutorials\/pdf\/Mega-WordPress-Cheat-ES.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Descarga la hoja de trucos de WordPress definitiva<\/a><\/p><h2 class=\"wp-block-heading\" id=\"h-introduccion-a-react\">Introducci&oacute;n a React<\/h2><p>Antes de comenzar, primero queremos hacer la pregunta, &ldquo;<a href=\"\/co\/tutoriales\/que-es-react\">&iquest;qu&eacute; es React?<\/a>&ldquo;. Tambi&eacute;n conocida como ReactJS, esta es una de las bibliotecas de JavaScript m&aacute;s populares que se pueden usar para el desarrollo web.<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"373\" src=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/pagina-de-inicio-react-1024x373.png\" alt=\"Sitio web de React\" class=\"wp-image-24887\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/pagina-de-inicio-react-1024x373.png 1024w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/pagina-de-inicio-react-300x109.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/pagina-de-inicio-react-150x55.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/pagina-de-inicio-react-768x280.png 768w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/pagina-de-inicio-react.png 1344w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div><p>Creada y mantenida por Facebook, React incluye una amplia gama de fragmentos de c&oacute;digo JavaScript que se pueden usar para crear componentes de interfaz de usuario.<\/p><p>Contrariamente a la creencia popular, ReactJS no es un framework de JavaScript, ya que s&oacute;lo es responsable de renderizar los componentes de la capa de vista de una aplicaci&oacute;n. Por lo tanto, si est&aacute;s buscando funciones m&aacute;s sofisticadas puedes combinarla con un framework real como <a href=\"https:\/\/vuejs.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Vue.js<\/a>.<\/p><p>Tambi&eacute;n es importante tener en cuenta que existen ReactJS y <a href=\"https:\/\/reactnative.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">React Native<\/a>. Este &uacute;ltimo es un marco de JavaScript de c&oacute;digo abierto construido en la biblioteca React. Puedes usarlo para crear aplicaciones multiplataforma y componentes espec&iacute;ficos de plataforma para iOS y Android.<\/p><h2 class=\"wp-block-heading\" id=\"h-caracteristicas-y-funciones-de-react\">Caracter&iacute;sticas y funciones de React<\/h2><p>Para comprender los beneficios de React, es &uacute;til saber c&oacute;mo funciona. Estas son algunas de sus caracter&iacute;sticas y funciones m&aacute;s significativas:<\/p><h3 class=\"wp-block-heading\" id=\"h-jsx\">JSX<\/h3><p>La principal extensi&oacute;n de sintaxis de JavaScript utilizada en React es <a href=\"https:\/\/es.reactjs.org\/docs\/introducing-jsx.html\" target=\"_blank\" rel=\"noreferrer noopener\">JSX<\/a>. Puedes usarla para incrustar c&oacute;digo HTML en objetos JavaScript y simplificar estructuras de c&oacute;digo complejas.<\/p><p>JSX tambi&eacute;n ayuda a prevenir los <a href=\"https:\/\/owasp.org\/www-community\/attacks\/xss\/\" target=\"_blank\" rel=\"noreferrer noopener\">ataques de secuencias de comandos en sitios cruzados (XSS)<\/a> al dificultar que terceros inyecten c&oacute;digo adicional a trav&eacute;s de la entrada del usuario que no est&aacute; escrito expl&iacute;citamente en la aplicaci&oacute;n.<\/p><p>Las etiquetas JSX incluyen un nombre, elementos secundarios y atributos. Una etiqueta de imagen HTML t&iacute;pica se ver&iacute;a as&iacute;:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;img class=\"\" src=\"\" alt=\"\" &gt;<\/pre><p>Sin embargo, una etiqueta JSX tendr&iacute;a el siguiente aspecto:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;img className=\"\" src=\"\" alt=\"\" \/&gt;<\/pre><p>Adem&aacute;s, los valores num&eacute;ricos se escriben entre corchetes. Similar a JavaScript, las comillas representan cadenas:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const name = 'Juan P&eacute;rez&rsquo;;\nconst element = &lt;h1&gt;Hola, {name}&lt;\/h1&gt;;\nReactDOM.render(\n  element,\n  document.getElementById('root')\n);<\/pre><p>Puedes poner cualquier <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Guide\/Expressions_and_Operators#Expressions\" target=\"_blank\" rel=\"noopener\">expresi&oacute;n de JavaScript<\/a> v&aacute;lida dentro de los corchetes. Por ejemplo, podr&iacute;a ser &ldquo;user.firstName&rdquo; o &ldquo;formatName(user)&rdquo;.<\/p><h3 class=\"wp-block-heading\" id=\"h-dom-virtual\">DOM virtual<\/h3><p>El <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Document_Object_Model\/Introduction\" target=\"_blank\" rel=\"noreferrer noopener\">Modelo de objetos del documento (DOM)<\/a> presenta una p&aacute;gina web en una estructura de &aacute;rbol de datos, que React almacena en su memoria. React puede implementar actualizaciones en ciertas partes del &aacute;rbol en lugar de volver a renderizarlo por completo.<\/p><p>El <a href=\"https:\/\/es.reactjs.org\/docs\/dom-elements.html\" target=\"_blank\" rel=\"noreferrer noopener\">DOM virtual<\/a> ofrece la vinculaci&oacute;n de datos unidireccional. Esto hace que manipularlo y actualizarlo sea m&aacute;s r&aacute;pido que el DOM original.<\/p><p>Este utiliza un proceso conocido como diffing. Aqu&iacute; es cuando React genera un nuevo &aacute;rbol DOM virtual, lo compara con el anterior y luego encuentra la forma m&aacute;s eficiente de aplicar cambios al DOM real. Esto toma menos tiempo y requiere menos recursos, lo que es beneficioso para proyectos grandes que involucran mucha interacci&oacute;n del usuario.<\/p><p>El DOM tambi&eacute;n es compatible con la API declarativa. Esto significa que puedes decirle a React en qu&eacute; estado deseas que est&eacute; la interfaz de usuario para asegurarte de que el DOM coincida con ese estado.<\/p><h3 class=\"wp-block-heading\" id=\"h-componentes\">Componentes<\/h3><p>Como mencionamos, los <a href=\"https:\/\/es.reactjs.org\/docs\/components-and-props.html\" target=\"_blank\" rel=\"noreferrer noopener\">componentes de React<\/a> son piezas de c&oacute;digo independientes y reutilizables que conforman la interfaz de usuario. Estos componentes funcionan de manera similar a las funciones de JavaScript. Estos tambi&eacute;n aceptan props, las cuales son entradas arbitrarias. Cuando un componente de funci&oacute;n devuelve un elemento, influye en c&oacute;mo se ver&aacute; la interfaz de usuario.<\/p><p>Las props son de solo lectura. Aqu&iacute; hay un ejemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import React, { useState } from 'react' \nimport ReactDOM from 'react-dom' \n \nconst ParentComponent = () =&gt; { \n    const [stateVariable, setStateVariable] = useState('esto es el valor inicial de la variable'); \n \n    return ( \n        &lt;div&gt; \n            &lt;h1&gt;Esta es una vista del componente funcional&lt;\/h1&gt;\n            &lt;ChildComponent exampleProp={stateVariable} \/&gt;\n        &lt;\/div&gt; \n    ) \n} \n \nconst ChildComponent = (props) =&gt; {\n    return (\n        &lt;div&gt;\n            &lt;h2&gt;{props.exampleProp}&lt;\/h2&gt;\n        &lt;\/div&gt;\n    )\n}\n \n \nReactDOM.render( &lt;ParentComponent \/&gt;, document.getElementById('app') );<\/pre><p>Existen dos tipos principales: <strong>componentes de clase<\/strong> y <strong>componentes funcionales<\/strong>. Los componentes de clase usan <a href=\"\/co\/tutoriales\/que-son-hooks-wordpress\">hooks de WordPress<\/a> de ciclo de vida y llamadas API:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ExampleComponent extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { };\n  }\n  render() {\n    return (\n      &lt;div&gt;\n        &lt;h1&gt;Esta es una vista creada por un componente de clase&lt;\/h1&gt;\n      &lt;\/div&gt;\n    );\n  }\n}<\/pre><p>Mientras tanto, un componente funcional se parece al siguiente ejemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const ExampleComponent = (props) =&gt; {\n    const [stateVariable, setStateVariable] = useState('');\n    return (\n        &lt;div&gt;\n            &lt;h1&gt;Esta es una vista del componente de funcional&lt;\/h1&gt;\n        &lt;\/div&gt;\n    )\n}<\/pre><p>Los componentes funcionales sirven para renderizar vistas sin solicitudes de datos o administraci&oacute;n de estado.<\/p><h3 class=\"wp-block-heading\" id=\"h-estado\">Estado<\/h3><p>El <a href=\"https:\/\/reactjs.org\/docs\/state-and-lifecycle.html\" target=\"_blank\" rel=\"noopener\">es<\/a><a href=\"https:\/\/es.reactjs.org\/docs\/state-and-lifecycle.html\" target=\"_blank\" rel=\"noreferrer noopener\">t<\/a><a href=\"https:\/\/reactjs.org\/docs\/state-and-lifecycle.html\" target=\"_blank\" rel=\"noopener\">ado<\/a> se refiere al objeto integrado de los componentes de React. Aqu&iacute; es donde almacenas los valores de propiedad de los elementos. Si el estado cambia, el componente se vuelve a renderizar.<\/p><p>La gesti&oacute;n de estado es el proceso de administrar estos estados de aplicaci&oacute;n y almacenar datos en bibliotecas de gesti&oacute;n de estado. Puedes usar un pu&ntilde;ado de bibliotecas de gesti&oacute;n de estado, incluidas <a href=\"https:\/\/redux.js.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redux<\/a> y <a href=\"https:\/\/recoiljs.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Recoil<\/a>, siendo esta &uacute;ltima m&aacute;s amigable para principiantes.<\/p><h2 class=\"wp-block-heading\" id=\"h-por-que-usar-react\">&iquest;Por qu&eacute; usar React?<\/h2><p>Hay muchos beneficios al usar React para el desarrollo de WordPress. Para empezar, esta es apta para principiantes y muchos proveedores de <a href=\"\/co\/hosting-web\">hosting web<\/a> admiten su uso.<\/p><p>Dado que se basa en JavaScript y componentes simples, puedes usarla para crear aplicaciones basadas en la web despu&eacute;s de solo unos d&iacute;as de aprender a usarla. Tambi&eacute;n hay muchos sitios web para <a href=\"\/co\/tutoriales\/mejores-sitios-para-aprender-a-programar-gratis\">aprender a programar gratis<\/a> en l&iacute;nea. Una s&oacute;lida comprensi&oacute;n de los conceptos b&aacute;sicos de JavaScript puede agilizar el proceso.<\/p><p>Otro beneficio de React es que te permite reutilizar componentes en otras aplicaciones. Esta es de c&oacute;digo abierto, por lo que puedes preconstruir tus componentes y anidarlos entre otros sin inflar el c&oacute;digo.<\/p><p>Los componentes de React tambi&eacute;n son relativamente sencillos de escribir, gracias a la integraci&oacute;n JSX, que discutiremos en un momento. Puedes incorporar tipograf&iacute;a HTML, etiquetas y aprovechar m&uacute;ltiples funciones para el desarrollo din&aacute;mico de aplicaciones.<\/p><p>Con React, tambi&eacute;n puedes usar la interfaz de l&iacute;nea de comandos (CLI) oficial, <strong>Create React App,<\/strong> para acelerar el desarrollo de aplicaciones de una sola p&aacute;gina. Esta viene con herramientas preconfiguradas que pueden ayudarte a optimizar el proceso de configuraci&oacute;n y aprendizaje.<\/p><p>Finalmente, React tambi&eacute;n es compatible con SEO. La implementaci&oacute;n del DOM virtual ayuda a aumentar la velocidad de la p&aacute;gina, lo que aumenta el rendimiento y la renderizaci&oacute;n&nbsp;del lado del servidor, lo que facilita que los bots rastreen tu sitio.<\/p><h2 class=\"wp-block-heading\" id=\"h-descripcion-general-de-la-api-rest-de-wp\">Descripci&oacute;n general de la API REST de WP<\/h2><p>La <a href=\"\/co\/tutoriales\/guia-para-principiantes-api-rest-wordpress\/\">interfaz de programaci&oacute;n de aplicaciones (API) REST de WordPress<\/a> permite a los desarrolladores integrar frameworks de JavaScript como React con WordPress. Puedes acceder a la API REST de WP desde el front-end de tu sitio, agregar tipos de entradas personalizadas y crear una aplicaci&oacute;n React respaldada por esta API.<\/p><p>La REST API de WordPress es un conjunto de protocolos utilizados para crear aplicaciones de software. Estos definen c&oacute;mo se comparte la informaci&oacute;n y los datos entre los programas y c&oacute;mo interact&uacute;an sus componentes. REST, abreviatura de Transferencia de estado representacional, se refiere a las restricciones arquitect&oacute;nicas de los programas que definen el estilo.<\/p><p>El formato para estructurar los datos que deben leer las aplicaciones se denomina <a href=\"\/co\/tutoriales\/que-es-json\">notaci&oacute;n de objetos JavaScript (JSON)<\/a>. Este ayuda a agilizar la comunicaci&oacute;n entre WordPress y otras aplicaciones y programas.<\/p><p>La API REST de WP da como resultado un entorno de desacoplamiento que permite a los usuarios tratar a WordPress como un CMS sin cabeza. Esto significa que se puede usar una variedad de frameworks de front-end para conectar el back-end de WordPress. Esto es ventajoso para los desarrolladores que no est&aacute;n demasiado entusiasmados con PHP.<\/p><h2 class=\"wp-block-heading\" id=\"h-react-antes-de-comenzar\">React: Antes de comenzar<\/h2><p>Un conocimiento b&aacute;sico de <a href=\"\/co\/tutoriales\/que-es-javascript-introduccion-basica\/\">JavaScript<\/a>, <a href=\"\/co\/tutoriales\/codigos-css-cheat-sheet\">CSS<\/a> y <a href=\"\/co\/tutoriales\/codigos-html-cheat-sheet\">HTML<\/a> facilitar&iacute;a el aprendizaje de&nbsp; React. Adem&aacute;s, el proceso de aprendizaje puede ser m&aacute;s eficiente si est&aacute;s familiarizado con <a href=\"http:\/\/es6-features.org\/\" target=\"_blank\" rel=\"noopener\">ECMAScript 6<\/a> (tambi&eacute;n conocido como ES6), la programaci&oacute;n funcional y la programaci&oacute;n orientada a objetos.<\/p><p>En cuanto al programa, tambi&eacute;n necesitar&aacute;s algunas dependencias instaladas en tu computadora. Esto incluye <a href=\"\/co\/tutoriales\/que-es-node-js\">NodeJS<\/a> y <a href=\"\/co\/tutoriales\/que-es-npm\">npm<\/a> y un editor de texto. Opcionalmente, tambi&eacute;n puedes usar <a href=\"https:\/\/git-scm.com\/downloads\" target=\"_blank\" rel=\"noreferrer noopener\">Git<\/a> para el control de versiones.<\/p><p>La forma m&aacute;s popular de desarrollar proyectos React para WordPress es usar <a href=\"https:\/\/create-react-app.dev\/\" target=\"_blank\" rel=\"noopener\">Create React App<\/a>:<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"415\" src=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/create-react-app-1024x415.png\" alt=\"P&aacute;gina de inicio de Create React App\" class=\"wp-image-24889\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/create-react-app-1024x415.png 1024w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/create-react-app-300x122.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/create-react-app-150x61.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/create-react-app-768x311.png 768w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/create-react-app.png 1330w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div><p>CRA proporciona un entorno simple para aprender React y usarlo para crear aplicaciones de una sola p&aacute;gina. Ten en cuenta que para usarlo, primero necesitar&aacute;s Node y npm en tu dispositivo.<\/p><p>Para crear un nuevo proyecto, puedes ejecutar el siguiente comando en tu terminal:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npx create-react-app wp-react-demo<\/pre><p>Si a&uacute;n no lo has hecho, esto confirmar&aacute; que deseas instalar la aplicaci&oacute;n Create React antes de crear la prueba. Esto crea una plantilla repetitiva. Tambi&eacute;n puedes reemplazar &ldquo;wp-react-demo&rdquo; con tu propio nombre.<\/p><p>A continuaci&oacute;n, ejecuta lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd wp-react-demo\nnpm start<\/pre><p>La estructura del directorio se ver&aacute; as&iacute;:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&#9500;&#9472;&#9472; README.md\n&#9500;&#9472;&#9472; package.json\n&#9500;&#9472;&#9472; public\n&#9474; &#9500;&#9472;&#9472; favicon.ico\n&#9474; &#9500;&#9472;&#9472; index.html\n&#9474; &#9492;&#9472;&#9472; manifest.json\n&#9500;&#9472;&#9472; src\n&#9474; &#9500;&#9472;&#9472; App.css\n&#9474; &#9500;&#9472;&#9472; App.js\n&#9474; &#9500;&#9472;&#9472; App.test.js\n&#9474; &#9500;&#9472;&#9472; index.css\n&#9474; &#9500;&#9472;&#9472; index.js\n&#9474; &#9500;&#9472;&#9472; logo.svg\n&#9474; &#9492;&#9472;&#9472; registerServiceWorker.js<\/pre><p>En el directorio src, encontrar&aacute;s todos los archivos JavaScript en los que estar&aacute;s trabajando. Ahora, puedes visitar <strong>localhost:3000 <\/strong>para cargar el archivo<strong> index.html<\/strong>.<\/p><p>El archivo <strong>public\/index.html <\/strong>no contiene mucho. Sin embargo, puedes encontrar la siguiente l&iacute;nea, que ser&aacute; el punto de partida para tu proyecto:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;div id=\"root\"&gt;&lt;\/div&gt;<\/pre><p>En el archivo <strong>index.js <\/strong>del directorio src, encontrar&aacute;s lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from '.\/App';\n \nReactDOM.render(&lt;App \/&gt;, document.getElementById('root'));<\/pre><p>Esto significa que est&aacute; renderizando el componente de la <strong>aplicaci&oacute;n<\/strong>, el cual puedes encontrar en <strong>src.\/App.js<\/strong>. Puedes reemplazar esto con tu propio contenido HTML. Podemos usar render() para HTML gracias a la extensi&oacute;n de sintaxis JSX.<\/p><h2 class=\"wp-block-heading\" id=\"h-como-consultar-la-api-rest-de-wp-desde-react\">C&oacute;mo consultar la API REST de WP desde React<\/h2><p>Por defecto, puedes realizar una solicitud GET para usar la API REST de WP en el front-end de tu sitio. Por ejemplo, puedes usar \/wp-json\/wp\/v2\/posts para obtener todas tus entradas. Siguiendo con el ejemplo anterior, los datos de esta entrada se ubicar&iacute;an en <strong>http:\/\/localhost\/wp-json\/wp\/v2\/posts\/<\/strong>.<\/p><p>Para comenzar con React, puedes ejecutar este comando en tu terminal:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npx create-react-app react-app<\/pre><p>Luego, ejecuta lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd react-app\nnpm install @material-ui\/core<\/pre><p>A continuaci&oacute;n, puedes introducir el siguiente ejemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import React, { useEffect, useState } from 'react';\nimport Card from '@material-ui\/core\/Card';\nimport CardContent from '@material-ui\/core\/CardContent';\nimport Typography from '@material-ui\/core\/Typography';\nimport Grid from '@material-ui\/core\/Grid';\n    \nexport default function Posts() {\n    const [posts, setPosts] = useState([]);\n    useEffect(() =&gt; {\n        async function loadPosts() {\n            const response = await fetch('\/wp-json\/wp\/v2\/posts');\n            if(!response.ok) {\n                \/\/ oups! something went wrong\n                return;\n            }\n    \n            const posts = await response.json();\n            setPosts(posts);\n        }\n    \n        loadPosts();\n   }, [])\n  return (\n    &lt;Grid container spacing={2}&gt;\n      {posts.map((post, index) =&gt; (\n      &lt;Grid item xs={4} key={index}&gt;\n        &lt;Card&gt;\n           &lt;CardContent&gt;\n                &lt;Typography\n                    color=\"textSecondary\"\n                    gutterBottom\n                    dangerouslySetInnerHTML={{__html: post.title.rendered}} \/&gt;\n                &lt;Typography\n                    variant=\"body2\"\n                    component=\"p\"\n                    dangerouslySetInnerHTML={{__html: post.content.rendered}} \/&gt;\n            &lt;\/CardContent&gt;\n        &lt;\/Card&gt;\n      &lt;\/Grid&gt;\n     ))}\n    &lt;\/Grid&gt;\n );\n}<\/pre><p>El ejemplo anterior utiliza los <a href=\"https:\/\/es.reactjs.org\/docs\/hooks-overview.html\" target=\"_blank\" rel=\"noopener\">hooks<\/a><a href=\"https:\/\/reactjs.org\/docs\/hooks-overview.html\" target=\"_blank\" rel=\"noreferrer noopener\"> de React<\/a> useEffect y useState. El primero declara la matriz de entradas y llama para actualizarla, mientras que el segundo obtiene el c&oacute;digo.<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"\/co\/hosting-wordpress\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/blog.hostinger.io\/co-tutoriales\/wp-content\/uploads\/sites\/40\/2024\/06\/ES-New-WP_in-text-banner.png\" alt=\"\" class=\"wp-image-40615\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2024\/06\/ES-New-WP_in-text-banner.png 1024w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2024\/06\/ES-New-WP_in-text-banner-300x88.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2024\/06\/ES-New-WP_in-text-banner-150x44.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2024\/06\/ES-New-WP_in-text-banner-768x225.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div><h2 class=\"wp-block-heading\" id=\"h-como-crear-un-tipo-de-entrada-personalizada-con-react\">C&oacute;mo crear un tipo de entrada personalizada con React<\/h2><p>Tambi&eacute;n puedes usar React para crear un<strong> <\/strong><a href=\"\/co\/tutoriales\/custom-post-types-wordpress\/\">tipo de entrada personalizada de WordPress<\/a>. Sin embargo, existen algunas herramientas que deber&aacute;s instalar con anticipaci&oacute;n. Esto ayudar&aacute; a que el proceso sea lo m&aacute;s fluido y sencillo posible.<\/p><p>Primero, deber&aacute;s agregar el plugin de WordPress <a href=\"https:\/\/es.wordpress.org\/plugins\/custom-post-type-ui\/\" target=\"_blank\" rel=\"noreferrer noopener\">Custom Post Type UI<\/a>.<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"920\" height=\"293\" src=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/plugin-custom-post-type.png\" alt=\"Custom Post Type UI\" class=\"wp-image-24890\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/plugin-custom-post-type.png 920w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/plugin-custom-post-type-300x96.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/plugin-custom-post-type-150x48.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/plugin-custom-post-type-768x245.png 768w\" sizes=\"(max-width: 920px) 100vw, 920px\" \/><\/figure><\/div><p>Este plugin simplifica el proceso de creaci&oacute;n de tipos de entradas personalizadas en WordPress.<\/p><p>Tambi&eacute;n recomendamos instalar <a href=\"https:\/\/es.wordpress.org\/plugins\/advanced-custom-fields\/\" target=\"_blank\" rel=\"noreferrer noopener\">Advanced Custom Fields (ACF)<\/a>.<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1023\" height=\"330\" src=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/advanced-custom-field.png\" alt=\"Plugin Advanced Custom Fields\" class=\"wp-image-24891\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/advanced-custom-field.png 1023w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/advanced-custom-field-300x97.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/advanced-custom-field-150x48.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/advanced-custom-field-768x248.png 768w\" sizes=\"(max-width: 1023px) 100vw, 1023px\" \/><\/figure><\/div><p>Esta tambi&eacute;n es una herramienta gratuita. El plugin se puede usar para crear y agregar campos personalizados a tus tipos de entradas personalizadas. Tambi&eacute;n sugerimos instalar <a href=\"https:\/\/es.wordpress.org\/plugins\/acf-to-rest-api\/\" target=\"_blank\" rel=\"noreferrer noopener\">ACF to REST API<\/a> para que tus campos personalizados est&eacute;n disponibles para los tipos de entradas.<\/p><p>Para comenzar, dir&iacute;gete a <strong>CPT UI &gt; A&ntilde;adir\/Editar tipos de contenidos <\/strong>desde tu &aacute;rea de administraci&oacute;n. En nuestro ejemplo, usaremos el nombre &ldquo;Libros&rdquo;. Tambi&eacute;n seleccionaremos la opci&oacute;n de autocompletar el resto de los campos.<\/p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/editar-tipos-de-contenido-wordpress-1024x567.png\" alt=\"\" class=\"wp-image-24892\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/editar-tipos-de-contenido-wordpress-1024x567.png 1024w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/editar-tipos-de-contenido-wordpress-300x166.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/editar-tipos-de-contenido-wordpress-150x83.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/editar-tipos-de-contenido-wordpress-768x425.png 768w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/editar-tipos-de-contenido-wordpress.png 1037w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>En la secci&oacute;n <strong>Mostrar en REST<\/strong> <strong>API<\/strong>, config&uacute;ralo en <strong>Verdadero <\/strong>e ingresa &ldquo;Libros&rdquo; como el slug base de la API REST. En <strong>Soportes<\/strong>, selecciona las casillas de verificaci&oacute;n <strong>Autor <\/strong>y <strong>Campos personalizados<\/strong>. Haz clic en <strong>A&ntilde;adir tipo de contenido <\/strong>cuando hayas terminado.<\/p><p>A continuaci&oacute;n, podemos crear campos personalizados para el tipo de entrada personalizada. Dir&iacute;gete a <strong>Campos personalizados &gt; A&ntilde;adir nuevo<\/strong> e ingresa un t&iacute;tulo apropiado, como &ldquo;Informaci&oacute;n del libro&rdquo;. Puedes hacer clic en <strong>A&ntilde;adir campo<\/strong> y luego completar la etiqueta, el nombre y el tipo del campo.<\/p><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/anadir-campos-personalizados-wordpress-1024x512.png\" alt=\"A&ntilde;adir campos personalizados en WordPress\" class=\"wp-image-24901\" srcset=\"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/anadir-campos-personalizados-wordpress-1024x512.png 1024w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/anadir-campos-personalizados-wordpress-300x150.png 300w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/anadir-campos-personalizados-wordpress-150x75.png 150w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/anadir-campos-personalizados-wordpress-768x384.png 768w, https:\/\/www.hostinger.com\/co\/tutoriales\/wp-content\/uploads\/sites\/40\/2022\/10\/anadir-campos-personalizados-wordpress.png 1164w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div><p>En <strong>Ubicaci&oacute;n<\/strong>, puedes configurar el tipo de entrada para que sea igual al tipo de entrada personalizada del <strong>libro<\/strong>. Cuando hayas terminado, selecciona <strong>Publicar <\/strong>para activar el campo personalizado.<\/p><p>A continuaci&oacute;n, dir&iacute;gete a <strong>Mis libros &gt; A&ntilde;adir nueva<\/strong> e ingresa el t&iacute;tulo, resumen e imagen destacada. Puedes repetir este proceso para crear tantos como desees.<\/p><p>Ahora, desde tu terminal, ingresa el siguiente comando, ejecutando cada uno antes de pasar al siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npx create-react-app frontend\ncd frontend\nnpm i axios\nnpm start<\/pre><p>Luego, dentro del directorio src, puedes crear una carpeta llamada <em>components<\/em>, seguida de un archivo llamado <strong>libros.js<\/strong>. Cuando termines, ingresa lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import React, { Component } from 'react';\nimport axios from 'axios';\nexport class Books extends Component {\n   state = {\n       books: [],\n       isLoaded: false\n   }\n componentDidMount () {\n   axios.get('http:\/\/localhost:3000\/wp-json\/wp\/v2\/books')\n       .then(res =&gt; this.setState({\n           books: res.data,\n           isLoaded: true\n       }))\n       .catch(err =&gt; console.log(err))\n   }\n   render() {\n      console.log(this.state);\n       return (\n           &lt;div&gt;\n             \n           &lt;\/div&gt;\n       )\n   }\n}\nexport default Books;<\/pre><p>En el archivo <strong>App.js<\/strong>, ingresa lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import React from 'react';\nimport '.\/App.css';\nimport Books from '.\/components\/Books';\nfunction App() {\n return (\n   &lt;div className=\"App\"&gt;\n    &lt;Books&gt;\n   &lt;\/div&gt;\n );\n}\nexport default App;<\/pre><p>Ahora, en tu terminal, puedes ejecutar el comando npm start. Esto iniciar&aacute; la aplicaci&oacute;n React. Puedes ver la consola de datos &ldquo;Libro&rdquo; cuando la abres en un navegador. Puedes visualizar cada t&iacute;tulo mapeando a trav&eacute;s de cada libro.<\/p><p>En <strong>libros.js<\/strong>, ingresa lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">render() {\n      const {books, isLoaded} = this.state;\n       return (\n           &lt;div&gt;\n              {books.map(book =&gt; &lt;h4&gt;{book.title.rendered}&lt;\/h4&gt;)}\n           &lt;\/div&gt;\n       )\n   }<\/pre><p>Ten en cuenta que tambi&eacute;n puedes separar la colecci&oacute;n de libros en un solo componente de libro. Puedes hacerlo creando un archivo dentro de src\/components. Tambi&eacute;n puedes agregar CSS personalizado para dise&ntilde;ar el tipo de entrada personalizada (app.css).<\/p><h2 class=\"wp-block-heading\" id=\"h-como-crear-un-tema-con-wordpress-y-react-2-metodos\">C&oacute;mo crear un tema con WordPress y React (2 m&eacute;todos)<\/h2><p>Quiz&aacute;s te est&eacute;s preguntando <a href=\"\/co\/tutoriales\/crear-tema-wordpress\">c&oacute;mo crear un tema de WordPress<\/a> usando React. Hay un pu&ntilde;ado de opciones, as&iacute; que veamos dos m&eacute;todos populares:<\/p><h3 class=\"wp-block-heading\" id=\"h-1-crea-un-tema-con-react-y-wordpress-usando-scripts-de-wp\">1. Crea un tema con React y WordPress usando scripts de WP<\/h3><p>En las aplicaciones t&iacute;picas de React, debes importar React en la parte superior de los archivos. Sin embargo, a partir de <a href=\"https:\/\/make.wordpress.org\/core\/2018\/12\/06\/javascript-packages-and-interoperability-in-5-0-and-beyond\/\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress 5.0<\/a>, el CMS incluye las bibliotecas React y ReactDOM y las exporta a wp.element, un objeto de ventana global.<\/p><p>Si has usado React antes, probablemente hayas usado Create React App para ejecutar tu servidor de desarrollo. Sin embargo, esto no es necesario con WordPress.<\/p><p>El equipo de WordPress cre&oacute; un paquete wp-scripts basado en los react-scripts utilizados con la aplicaci&oacute;n Create React. WP Scripts incluye los comandos por defecto.<\/p><p>Para cargar React en tu tema, navega hasta el archivo <strong>functions.php <\/strong>del tema y agrega el siguiente fragmento de c&oacute;digo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Enqueue Theme JS w React Dependency\nadd_action( 'wp_enqueue_scripts', 'my_enqueue_theme_js' );\nfunction my_enqueue_theme_js() {\n  wp_enqueue_script(\n    'my-theme-frontend',\n    get_stylesheet_directory_uri() . '\/build\/index.js',\n    ['wp-element'],\n    time(), \/\/ Cambiar a null para producci&oacute;n\n    true\n  );\n}<\/pre><p>Esto agregar&aacute; el wp-element como una dependencia de tu archivo JavaScript. A continuaci&oacute;n, debemos configurar un archivo <strong>package.json<\/strong>. Desde la ra&iacute;z de tu tema de WordPress, ejecuta el siguiente comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm init<\/pre><p>Una vez hecho esto, ejecuta lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm install @wordpress\/scripts --save-dev<\/pre><p>Los scripts de WP se descargar&aacute;n en tus <strong>node_modules<\/strong>, por lo que estar&aacute;n disponibles para usar en tu l&iacute;nea de comandos. Para asignar los scripts de WP a los scripts de NPM, puedes buscar el archivo<strong> package.json<\/strong>, cargar la configuraci&oacute;n de &ldquo;scripts&rdquo; y reemplazarlos con este ejemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"name\": \"myreacttheme\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Mi tema de WordPress con React\",\n  \"main\": \"src\/index.js\",\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"@wordpress\/scripts\": \"^5.1.0\"\n  },\n  \"scripts\": {\n    \"build\": \"wp-scripts build\",\n    \"check-engines\": \"wp-scripts check-engines\",\n    \"check-licenses\": \"wp-scripts check-licenses\",\n    \"lint:css\": \"wp-scripts lint-style\",\n    \"lint:js\": \"wp-scripts lint-js\",\n    \"lint:pkg-json\": \"wp-scripts lint-pkg-json\",\n    \"start\": \"wp-scripts start\",\n    \"test:e2e\": \"wp-scripts test-e2e\",\n    \"test:unit\": \"wp-scripts test-unit-js\"\n  },\n  \"author\": \"\",\n  \"license\": \"1 GNU V2+, MIT\"\n}<\/pre><p>A continuaci&oacute;n, puedes ejecutar lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm start<\/pre><p>Esto buscar&aacute; archivos importados de <strong>src\/index.js<\/strong> y los compilar&aacute; en<strong> build\/index.js<\/strong> cada vez que se cambie un archivo.<\/p><h3 class=\"wp-block-heading\" id=\"h-2-crea-un-tema-con-react-y-wordpress-usando-create-react-wptheme\">2. Crea un tema con React y WordPress usando Create-React-WPTheme<\/h3><p>Otra opci&oacute;n es usar <a href=\"https:\/\/github.com\/devloco\/create-react-wptheme\" target=\"_blank\" rel=\"noreferrer noopener\">create-react-wptheme<\/a> de devloco. Este paquete es similar a create-react-app. Sin embargo, este utiliza WordPress en lugar de webpack como servidor de desarrollo. Tambi&eacute;n tendr&aacute;s acceso a todas las funciones principales, hooks, acciones, filtros, etc.<\/p><p>Para configurarlo, puedes iniciar una terminal (o git bash) en tu instalaci&oacute;n local de WordPress, luego escribe el siguiente comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npx create-react-wptheme barebones<\/pre><p><strong>&ldquo;Barebones&rdquo; <\/strong>es el nombre del tema. Puedes cambiarlo a lo que quieras llamar a tu tema.<\/p><p>Ver&aacute;s un mensaje que te informa que la instalaci&oacute;n cre&oacute; una carpeta ra&iacute;z y un directorio &ldquo;react-src&rdquo; dentro de ella. Este directorio es importante porque contendr&aacute; el c&oacute;digo sin compilar.<\/p><p>A continuaci&oacute;n, debemos agregar los archivos <strong>styles.css<\/strong>,<strong> index.php<\/strong> y otros archivos necesarios para validarlo. En la terminal, ingresa el siguiente comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd barebones\/react-src\nnpm run wpstart<\/pre><p>Ahora, cuando navegues a <strong>wp-admin &gt; temas<\/strong>, deber&iacute;as ver tu nuevo tema. Haz clic en el bot&oacute;n <strong>Activar<\/strong>, luego regresa a la terminal y ejecuta lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm run wpstart<\/pre><p>Esto deber&iacute;a abrir autom&aacute;ticamente una nueva pesta&ntilde;a del navegador. Ten en cuenta que los archivos ubicados en la carpeta ra&iacute;z (cualquier cosa fuera de react-src) no deben editarse. Estos contienen la versi&oacute;n compilada del c&oacute;digo requerido para WordPress y React.<\/p><p>Para crear un nuevo tema, puedes usar lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npx create-react-wptheme my_react_theme<\/pre><p>Puedes cambiar &ldquo;my_react_theme&rdquo; como desees. A continuaci&oacute;n, puedes ingresar el siguiente comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd my_react_theme\/react-src\nnpm run start<\/pre><p>Recuerda reemplazarlo con el mismo nombre que usaste en el paso anterior. Esto configurar&aacute; el tema que se ver&aacute; en el &aacute;rea de administraci&oacute;n.<\/p><p>Una vez que hayas terminado de desarrollar tu tema, deber&aacute;s usar el comando de compilaci&oacute;n para moverlo a producci&oacute;n. Para hacer esto, abre tu l&iacute;nea de comando, navega a la carpeta <strong>react-src<\/strong> de tu tema y ejecuta lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">npm run build<\/pre><p>Esto optimizar&aacute; tus archivos ubicados dentro de una carpeta. Luego puedes implementarlo en tu servidor.<\/p><h2 class=\"wp-block-heading\" id=\"h-como-agregar-react-a-una-plantilla-de-pagina-personalizada\">C&oacute;mo agregar React a una plantilla de p&aacute;gina personalizada<\/h2><p>Si te preguntas <a href=\"\/co\/tutoriales\/utilizar-child-theme\">c&oacute;mo crear un tema hijo en WordPress <\/a>usando React, el proceso es relativamente similar. Puedes agregar React a una<strong> <\/strong>plantilla de p&aacute;gina personalizada.<\/p><p>Comencemos con una estructura de tema est&aacute;ndar:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/build\n\/src\n\/-- index.js\nfunctions.php\npackage.json\npage-react.php\nstyle.css<\/pre><p>A continuaci&oacute;n, agrega el siguiente c&oacute;digo al archivo <strong>functions.php <\/strong>de tu tema:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\nadd_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );\nfunction my_theme_enqueue_styles() {\n \n  $parent_style = 'twentytwenty-style'; \n    \n  wp_enqueue_style( $parent_style, get_template_directory_uri() . '\/style.css' );\n    \n  wp_enqueue_style( 'child-style',\n    get_stylesheet_directory_uri() . '\/style.css',\n    [ $parent_style ],\n    time() \/\/Para producci&oacute;n usar wp_get_theme()-&gt;get('Version')\n  );\n  wp_enqueue_script(\n    'my-theme-frontend',\n    get_stylesheet_directory_uri() . '\/build\/index.js',\n    ['wp-element'],\n    time() \/\/Para producci&oacute;n usar wp_get_theme()-&gt;get('Version')        \n  );\n  \n}<\/pre><p>Tambi&eacute;n deber&aacute;s agregar c&oacute;digo a tu archivo <strong>style.css<\/strong>. Dentro de &eacute;l, copia y pega lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/*\n Theme Name:   Twenty Twenty Child\n Description:  Twenty Twenty Child Theme\n Author:       Tu Nombre\n Author URI:   https:\/\/tusitioweb.com\n Template:     twentytwenty\n Version:      0.9.0\n License:      GNU General Public License v2 or later\n License URI:  http:\/\/www.gnu.org\/licenses\/gpl-2.0.html\n Text Domain:  twentytwentychild\n*\/<\/pre><p>A continuaci&oacute;n, puedes crear una plantilla de p&aacute;gina personalizada b&aacute;sica <strong>page-react.php <\/strong>con este ejemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;? php\n\/**\n * Nombre de Template: React Template\n *\/\nget_header();\n?&gt;\n&lt;main id=\"site-content\" role=\"main\"&gt;\n  &lt;article class=\"post-2 page type-page status-publish hentry\"&gt;\n    &lt;?php get_template_part( 'template-parts\/entry-header' ); ?&gt;\n    &lt;div class=\"post-inner thin\"&gt;\n      &lt;div class=\"entry-content\"&gt;        \n        &lt;div id=\"react-app\"&gt;&lt;\/div&gt;&lt;!-- #react-app --&gt;\n      &lt;\/div&gt;&lt;!-- .entry-content --&gt;\n    &lt;\/div&gt;&lt;!-- .post-inner --&gt;\n  &lt;\/article&gt;&lt;!-- .post --&gt;\n&lt;\/main&gt;&lt;!-- #site-content --&gt;\n&lt;?php get_template_part( 'template-parts\/footer-menus-widgets' ); ?&gt;\n&lt;?php get_footer(); ?&gt;<\/pre><p>Ahora puedes crear una nueva p&aacute;gina en WordPress y luego seleccionar <strong>React Template <\/strong>como plantilla de p&aacute;gina.<\/p><h2 class=\"wp-block-heading\" id=\"h-como-usar-react-en-tu-aplicacion\">C&oacute;mo usar React en tu aplicaci&oacute;n<\/h2><p>Si deseas utilizar React en una aplicaci&oacute;n existente, puedes agregar su <a href=\"\/co\/tutoriales\/que-es-cdn\">red de entrega de contenido (CDN)<\/a><strong> <\/strong>directamente a tu archivo HTML. Para comenzar, navega a la p&aacute;gina HTML donde deseas agregar React para comenzar.<\/p><p>Inserta una etiqueta &lt;div&gt; en blanco. Esto crear&aacute; un contenedor donde puedes renderizar un componente. Para este ejemplo, digamos que estamos tratando de crear un bot&oacute;n.<\/p><p>A continuaci&oacute;n, inserta tres etiquetas&lt;script&gt; en la p&aacute;gina antes de la etiqueta de cierre &lt;\/body&gt;. Los dos primeros se utilizar&aacute;n para cargar React y el tercero cargar&aacute; el c&oacute;digo de tu componente.<\/p><p>Ahora, en la misma carpeta que tu p&aacute;gina HTML, crea un nuevo archivo y as&iacute;gnale el nombre <strong>button.js <\/strong>(o lo que sea relevante para el elemento que est&aacute;s agregando). Dentro de ese archivo, copia y pega el siguiente c&oacute;digo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'use strict';\nconst e = React.createElement;\nclass Button extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { clicked: false };\n  }\n  render() {\n    if (this.state.clicked) {\n      return 'Presionaste este bot&oacute;n.';\n    }\n    return e(\n      'button',\n      { onClick: () =&gt; this.setState({ clicked: true }) },\n      'Presiona'\n    );\n  }\n}<\/pre><p>Esto crear&aacute; un componente de bot&oacute;n que muestra un mensaje una vez que se hace clic. Para usar el bot&oacute;n en tu p&aacute;gina HTML, puedes agregar el siguiente fragmento de c&oacute;digo al final del archivo <strong>button.js<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const domContainer = document.querySelector('#button_container');\nReactDOM.render(e(Button), domContainer);<\/pre><p>Esto vuelve a llamar al contenedor &lt;div&gt; que agregaste a tu p&aacute;gina HTML. Luego renderiza el componente del bot&oacute;n.<\/p><p>Tambi&eacute;n puedes usar React para crear una aplicaci&oacute;n React en blanco desde cero. La mejor manera de hacerlo es usar la soluci&oacute;n Create React App que discutimos anteriormente. Esto puede ser &uacute;til para aplicaciones de una sola p&aacute;gina.<\/p><p>Para comenzar, puedes ejecutar este comando en tu terminal:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const domContainer = document.querySelector('#button_container');\nReactDOM.render(e(Button), domContainer);<\/pre><p>Ten en cuenta que puedes cambiar &ldquo;my-app&rdquo; por el nombre que desees. Para ejecutarlo, puedes buscar la carpeta de la aplicaci&oacute;n ejecutando el comando cd my-app, seguido de npm start.<\/p><p>La aplicaci&oacute;n se ejecutar&aacute; en modo de desarrollo. Puedes verla en tu navegador en <strong>http:\/\/localhost:3000<\/strong>.<\/p><h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusi&oacute;n<\/h2><p>Desarrollar proyectos de WordPress y React puede ser un proceso simple y directo, incluso si eres un principiante. Sin embargo, es importante aprender c&oacute;mo funciona el framework de JavaScript con el CMS y su API REST para hacerlo con &eacute;xito.<\/p><p>Afortunadamente, con una comprensi&oacute;n b&aacute;sica de JavaScript, HTML y CSS, puedes aprender a usar React en poco tiempo. Como discutimos en esta entrada, puedes usarlo para crear aplicaciones y temas de una sola p&aacute;gina y plantillas de p&aacute;gina personalizadas.<\/p><p>Esperamos que esta gu&iacute;a te haya ayudado a comprender mejor React y sus capacidades para el desarrollo web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress es un poderoso sistema de gesti&oacute;n de contenido (CMS) que te permite crear lo que desees, desde sitios simples hasta tiendas de comercio electr&oacute;nico sofisticadas y complejas. Para integrar el c&oacute;digo PHP de la plataforma con JavaScript, puedes aprovechar la API REST de WP y WordPress junto con React. Desarrollada por Facebook, React es [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/co\/tutoriales\/wordpress-react\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":334,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"WordPress y React: una gu\u00eda completa para comenzar","rank_math_description":"Aprende a crear un proyecto din\u00e1mico con WordPress y React desde los puntos b\u00e1sicos hasta la creaci\u00f3n de aplicaciones, temas y entradas personalizadas.","rank_math_focus_keyword":"wordpress react","footnotes":""},"categories":[4747,14348],"tags":[14346],"class_list":["post-24885","post","type-post","status-publish","format-standard","hentry","category-wordpress","category-experto","tag-wordpress-react"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/wordpress-react","default":0},{"locale":"pt-BR","link":"https:\/\/www.hostinger.com\/br\/tutoriais\/wordpress-react","default":0},{"locale":"fr-FR","link":"https:\/\/www.hostinger.com\/fr\/tutoriels\/react-wordpress","default":0},{"locale":"es-ES","link":"https:\/\/www.hostinger.com\/es\/tutoriales\/wordpress-react","default":0},{"locale":"id-ID","link":"https:\/\/www.hostinger.com\/id\/tutorial\/panduan-wordpress-react","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/wordpress-react","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/a-beginners-guide-to-wordpress-react-development-projects","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/a-beginners-guide-to-wordpress-react-development-projects","default":0},{"locale":"es-MX","link":"https:\/\/www.hostinger.com\/mx\/tutoriales\/wordpress-react","default":0},{"locale":"es-CO","link":"https:\/\/www.hostinger.com\/co\/tutoriales\/wordpress-react","default":0},{"locale":"es-AR","link":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wordpress-react","default":0},{"locale":"pt-PT","link":"https:\/\/www.hostinger.com\/pt\/tutoriais\/wordpress-react","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/wordpress-react","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/wordpress-react","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/wordpress-react","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/wordpress-react","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts\/24885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/users\/334"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/comments?post=24885"}],"version-history":[{"count":17,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts\/24885\/revisions"}],"predecessor-version":[{"id":28950,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/posts\/24885\/revisions\/28950"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/media?parent=24885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/categories?post=24885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/co\/tutoriales\/wp-json\/wp\/v2\/tags?post=24885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}