<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>admin &#8211; Programador</title>
	<atom:link href="https://agcapa.es/author/arturo_agcapa_es/feed/" rel="self" type="application/rss+xml" />
	<link>https://agcapa.es</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Wed, 14 Apr 2021 18:05:58 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.7.1</generator>
<site xmlns="com-wordpress:feed-additions:1">130542897</site>	<item>
		<title>RAID 0, RAID 1, RAID 5, RAID 10 explicado con diagramas</title>
		<link>https://agcapa.es/raid-0-raid-1-raid-5-raid-10-explicado-con-diagramas/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 14 Apr 2021 17:08:31 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://agcapa.es/?p=402</guid>

					<description><![CDATA[<p>RAID 0, RAID 1, RAID 5, RAID 10 explicado con diagramas por Ramesh Natarajan el 10 de agosto de 2010 RAID significa Matriz redundante de discos económicos (independientes). En la mayoría de situaciones, utilizará uno de los siguientes cuatro niveles de RAID. RAID 0 RAID 1 RAID 5 RAID 10 (también conocido como RAID 1&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/raid-0-raid-1-raid-5-raid-10-explicado-con-diagramas/">RAID 0, RAID 1, RAID 5, RAID 10 explicado con diagramas</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>RAID 0, RAID 1, RAID 5, RAID 10 explicado con diagramas </strong></p>
<p>por Ramesh Natarajan el 10 de agosto de 2010</p>
<p>RAID significa Matriz redundante de discos económicos (independientes).</p>
<p>En la mayoría de situaciones, utilizará uno de los siguientes cuatro niveles de RAID.</p>
<ul>
<li>RAID 0</li>
<li>RAID 1</li>
<li>RAID 5</li>
<li>RAID 10 (también conocido como RAID 1 + 0)</li>
</ul>
<p>Este artículo explica la principal diferencia entre estos niveles de incursión junto con un diagrama fácil de entender.</p>
<p>En todos los diagramas que se mencionan a continuación:</p>
<ul>
<li>A, B, C, D, E y F: representa bloques</li>
<li>p1, p2 y p3: representa la paridad</li>
</ul>
<p><strong>NIVEL DE RAID 0 </strong></p>
<p><img loading="lazy" class="alignnone size-medium wp-image-403" src="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-18.58.49-300x237.png" alt="" width="300" height="237" srcset="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-18.58.49-300x237.png 300w, https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-18.58.49.png 471w" sizes="(max-width: 300px) 100vw, 300px" /><br />
Los siguientes son los puntos clave que debe recordar para el nivel RAID 0.</p>
<ul>
<li>Mínimo 2 discos.</li>
<li>Excelente rendimiento (ya que los bloques están rayados).</li>
<li>Sin redundancia (sin espejo, sin paridad).</li>
<li>No use esto para ningún sistema crítico.</li>
</ul>
<p><strong>NIVEL RAID 1 </strong></p>
<p><img loading="lazy" class="alignnone size-medium wp-image-404" src="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.00.23-300x202.png" alt="" width="300" height="202" srcset="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.00.23-300x202.png 300w, https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.00.23.png 581w" sizes="(max-width: 300px) 100vw, 300px" />Los siguientes son los puntos clave que debe recordar para el nivel 1 de RAID.</p>
<ul>
<li>Mínimo 2 discos.</li>
<li>Buen rendimiento (sin rayas, sin paridad).</li>
<li>Excelente redundancia (ya que los bloques se reflejan).</li>
</ul>
<p><strong>NIVEL DE RAID 5 </strong></p>
<p><img loading="lazy" class="alignnone size-medium wp-image-405" src="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.01.12-300x203.png" alt="" width="300" height="203" srcset="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.01.12-300x203.png 300w, https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.01.12.png 567w" sizes="(max-width: 300px) 100vw, 300px" /><br />
Los siguientes son los puntos clave que debe recordar para el nivel 5 de RAID.</p>
<ul>
<li>Mínimo 3 discos.</li>
<li>Buen rendimiento (ya que los bloques están rayados).</li>
<li>Buena redundancia (paridad distribuida).</li>
<li>La mejor opción rentable que proporciona tanto rendimiento como redundancia. Use esto para DB que está muy orientado a la lectura. Las operaciones de escritura serán lentas.</li>
</ul>
<p><strong>NIVEL DE RAID 10 </strong></p>
<p><img loading="lazy" class="alignnone size-medium wp-image-406" src="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.02.00-300x155.png" alt="" width="300" height="155" srcset="https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.02.00-300x155.png 300w, https://agcapa.es/wp-content/uploads/2021/04/Captura-de-pantalla-2021-04-14-a-las-19.02.00.png 603w" sizes="(max-width: 300px) 100vw, 300px" />Los siguientes son los puntos clave para recordar para el nivel RAID 10.</p>
<ul>
<li>Mínimo 4 discos.</li>
<li>Esto también se denomina «franja de espejos».</li>
<li>Excelente redundancia (ya que los bloques se reflejan)</li>
<li>Excelente rendimiento (ya que los bloques están rayados)</li>
</ul>
<p>Si puede pagar el dólar, esta es la MEJOR opción para cualquier aplicación de misión crítica (especialmente bases de datos).</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/raid-0-raid-1-raid-5-raid-10-explicado-con-diagramas/">RAID 0, RAID 1, RAID 5, RAID 10 explicado con diagramas</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">402</post-id>	</item>
		<item>
		<title>10 operadores de encadenamiento útiles en Linux con ejemplos prácticos</title>
		<link>https://agcapa.es/10-operadores-de-encadenamiento-utiles-en-linux-con-ejemplos-practicos/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 14 Apr 2021 17:04:22 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://agcapa.es/?p=400</guid>

					<description><![CDATA[<p>10 operadores de encadenamiento útiles en Linux con ejemplos prácticos &#160; El encadenamiento de comandos de Linux significa combinar varios comandos y hacer que se ejecuten en función del comportamiento del operador utilizado entre ellos. El encadenamiento de comandos en Linux es algo así como si estuviera escribiendo scripts de shell cortos en el propio&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/10-operadores-de-encadenamiento-utiles-en-linux-con-ejemplos-practicos/">10 operadores de encadenamiento útiles en Linux con ejemplos prácticos</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>10 operadores de encadenamiento útiles en Linux con ejemplos prácticos </strong></p>
<p>&nbsp;</p>
<p>El encadenamiento de comandos de Linux significa combinar varios comandos y hacer que se ejecuten en función del comportamiento del operador utilizado entre ellos. El encadenamiento de comandos en Linux es algo así como si estuviera escribiendo scripts de shell cortos en el propio shell y ejecutándolos directamente desde la terminal. El encadenamiento permite automatizar el proceso. Además, una máquina desatendida puede funcionar de una manera mucho más sistemática con la ayuda de operadores encadenados.</p>
<p>10 operadores de encadenamiento en Linux</p>
<p>Este artículo tiene como objetivo arrojar luz sobre los uso frecuente <strong>operadores de encadenamiento de comandos de </strong>, con descripciones breves y ejemplos correspondientes que seguramente aumentarán su productividad y le permitirán escribir códigos breves y significativos además de reducir la carga del sistema, en ocasiones.</p>
<ol>
<li><strong> Operador Ampersand (&amp;) </strong></li>
</ol>
<p>La función de &#8216; <strong>&amp; </strong>&#8216; es hacer que el comando se ejecute en segundo plano. Simplemente escriba el comando seguido de un espacio en blanco y &#8216; <strong>&amp; </strong>&#8216;. Puede ejecutar más de un comando en segundo plano, de una sola vez.</p>
<p>Ejecute un comando en segundo plano:</p>
<p>agcapa@localhost:~$ ping ­c5 www.agcapa.com &amp;</p>
<p>Ejecute dos comandos en segundo plano, simultáneamente:</p>
<p>root@localhost:/home/agcapa# apt-get update &amp; apt-get upgrade &amp;</p>
<ol start="2">
<li><strong> Operador de punto y coma (;) </strong></li>
</ol>
<p>El operador de punto y coma permite ejecutar varios comandos de una sola vez y la ejecución del comando se produce de forma secuencial.</p>
<p>root@localhost:/home/agcapa# apt-get update ; apt-get upgrade ; mkdir test</p>
<p>La combinación de comandos anterior ejecutará primero la <strong>actualización </strong>instrucción de , luego la <strong>actualización </strong>instrucción de y finalmente creará un &#8216; <strong>prueba </strong>directorio de &#8216; en el directorio de trabajo actual.</p>
<ol start="3">
<li><strong> Operador AND (&amp;&amp;) </strong></li>
</ol>
<p>El <strong>operador AND </strong>( <strong>&amp;&amp; </strong>) ejecutará el segundo comando solamente, si la ejecución del primer comando <strong>TIENE ÉXITO </strong>, es decir, el estado de salida del primer comando es <strong>0 </strong>. Este comando es muy útil para verificar el estado de ejecución del último comando.</p>
<p>Por ejemplo, quiero visitar el sitio web <strong>agcapa.com </strong>usando el comando de enlaces , en la terminal, pero antes necesito verificar si el host está en <strong>vivo </strong>o <strong>no </strong>.</p>
<p>root@localhost:/home/agcapa# ping -c3 www.agcapa.com &amp;&amp; links www.agcapa.com</p>
<ol start="4">
<li><strong> Operador OR (||) </strong></li>
</ol>
<p>El <strong>operador OR </strong>( <strong>|| </strong>) es muy parecido a una &#8216; <strong>else </strong>instrucción &#8216; en programación. El operador anterior le permite ejecutar el segundo comando solo si falla la ejecución del primer comando, es decir, el estado de salida del primer comando es &#8216; <strong>1 </strong>&#8216;.</p>
<p>Por ejemplo, quiero ejecutar &#8216; <strong>apt-get update </strong>&#8216; desde una cuenta que no sea root y si el primer comando falla, el segundo <strong>&#8216;links www.agcapa.com </strong>se ejecutará comando &#8216;.</p>
<p>agcapa@localhost:~$ apt-get update || links agcapa.com</p>
<p>En el comando anterior, dado que al <strong>usuario </strong>no se le permitió <strong>actualizar el </strong>sistema, significa que el estado de salida del primer comando es <strong>&#8216;1&#8217; </strong>y, por lo tanto el último comando &#8216; <strong>links agcapa.com </strong>, se ejecuta &#8216;.</p>
<p>¿Qué pasa si el primer comando se ejecuta con éxito, con un estado de salida &#8216; <strong>0 </strong>&#8216;? ¡Obviamente! El segundo comando no se ejecutará.</p>
<p>agcapa@localhost:~$ mkdir test || links agcapa.com</p>
<p>Aquí, el usuario crea una carpeta &#8216; <strong>prueba </strong>&#8216; en su directorio de inicio, para la cual el usuario está autorizado. El comando se ejecutó con éxito dando un estado de salida &#8216; <strong>0 </strong>&#8216; y, por lo tanto, la última parte del comando no se ejecuta.</p>
<ol start="5">
<li><strong> NO operador (!) </strong></li>
</ol>
<p>El <strong>operador NOT </strong>( <strong>! </strong>) Es muy parecido a una » <strong>excepto </strong>declaración «. Este comando ejecutará todo excepto la condición proporcionada. Para entender esto, cree un directorio &#8216; <strong>agcapa </strong>&#8216; en su directorio de inicio y &#8216; <strong>cd </strong>&#8216; en él.</p>
<p>agcapa@localhost:~$ mkdir agcapa agcapa@localhost:~$ cd agcapa</p>
<p>A continuación, cree varios tipos de archivos en la carpeta &#8216; <strong>agcapa </strong>&#8216;.</p>
<p>agcapa@localhost:~/agcapa$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html</p>
<p>Vea que hemos creado todos los archivos nuevos dentro de la carpeta &#8216; <strong>agcapa </strong>&#8216;.</p>
<p>agcapa@localhost:~/agcapa$ ls   a.doc a.html a.pdf a.xml b.doc b.html b.pdf b.xml</p>
<p>Ahora elimine todos los archivos excepto el archivo &#8216; <strong>html </strong>&#8216; de una vez, de una manera inteligente.</p>
<p>agcapa@localhost:~/agcapa$ rm -r !(*.html)</p>
<p>Solo para verificar, última ejecución. Enumere todos los archivos disponibles usando el comando ls .</p>
<p>agcapa@localhost:~/agcapa$ ls   a.html b.html</p>
<ol start="6">
<li><strong> Operador Y &#8211; O (&amp;&amp; &#8211; ||) </strong></li>
</ol>
<p>El operador anterior es en realidad una combinación de operador &#8216; <strong>Y </strong>&#8216; y &#8216; <strong>O </strong>&#8216;. Es muy parecido a una » <strong>si-si no </strong>declaración «.</p>
<p>Por ejemplo, hagamos ping a <strong>agcapa.com </strong>, si el éxito se hace eco de &#8216; <strong>Verificado </strong>&#8216;, de lo contrario se hace eco de &#8216; <strong>Host inactivo </strong>&#8216;.</p>
<p>agcapa@localhost:~/agcapa$ ping -c3 www.agcapa.com &amp;&amp; echo «Verified» || echo «Host Down»</p>
<p><strong>Salida de muestra </strong></p>
<p>PING www.agcapa.com (212.71.234.61) 56(84) bytes of data. 64 bytes from www.agcapa.com (212.71.234.61): icmp_req=1 ttl=55 time=216 ms 64 bytes from www.agcapa.com (212.71.234.61): icmp_req=2 ttl=55 time=224 ms 64 bytes from www.agcapa.com (212.71.234.61): icmp_req=3 ttl=55 time=226 ms   &#8212; www.agcapa.com ping statistics &#8212; 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms <strong>Verified</strong></p>
<p>Ahora, desconecte su conexión a Internet y vuelva a intentar el mismo comando.</p>
<p>agcapa@localhost:~/agcapa$ ping -c3 www.agcapa.com &amp;&amp; echo «verified» || echo «Host Down»</p>
<p><strong>Salida de muestra </strong></p>
<p>ping: unknown host www.agcapa.com <strong>Host Down</strong></p>
<ol start="7">
<li><strong> Operador de TUBERÍA (|) </strong></li>
</ol>
<p>Este <strong>PIPE </strong>operador es muy útil cuando la salida del primer comando actúa como entrada del segundo comando. Por ejemplo, canalice la salida de &#8216; <strong>ls -l </strong>&#8216; a &#8216; <strong>menos </strong>&#8216; y vea la salida del comando.</p>
<p>agcapa@localhost:~$ ls -l | less</p>
<ol start="8">
<li><strong> Operador de combinación de comandos {} </strong></li>
</ol>
<p>Combine dos o más comandos, el segundo comando depende de la ejecución del primer comando.</p>
<p>Por ejemplo, verifique si un directorio &#8216; <strong>bin </strong>&#8216; está disponible o no, y genere la salida correspondiente.</p>
<p>agcapa@localhost:~$ [ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } &amp;&amp; echo Directory exists.</p>
<ol start="9">
<li><strong> Operador de precedencia () </strong></li>
</ol>
<p>El operador permite ejecutar el comando en orden de precedencia.</p>
<p>Command_x1 &amp;&amp;Command_x2 || Command_x3 &amp;&amp; Command_x4.</p>
<p>En el pseudocomando anterior, ¿qué si <strong>pasa Command_x1 </strong>falla? Ninguno de los <strong>comandos Command_x2 </strong>, <strong>Command_x3 </strong>, <strong>Command_x4 </strong>se ejecutaría, para esto usamos el <strong>Operador de precedencia </strong>, como:</p>
<p>(Command_x1 &amp;&amp;Command_x2) || (Command_x3 &amp;&amp; Command_x4)</p>
<p>En el pseudocomando anterior, si <strong>Command_x1 </strong>falla, <strong>Command_x2 </strong>también falla, pero la <strong>ejecución de Command_x3 </strong>y <strong>Command_x4 </strong>depende del estado de salida de <strong>Command_x3 </strong>.</p>
<ol start="10">
<li><strong> Operador de concatenación (\) </strong></li>
</ol>
<p>El <strong>operador de concatenación </strong>( <strong>\ </strong>) como el nombre lo especifica, se usa para concatenar comandos grandes en varias líneas en el shell. Por ejemplo, el siguiente comando abrirá el archivo de texto <strong>test (1) .txt </strong>.</p>
<p>agcapa@localhost:~/Downloads$ nano test\(1\).txt</p>
<p>&nbsp;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/10-operadores-de-encadenamiento-utiles-en-linux-con-ejemplos-practicos/">10 operadores de encadenamiento útiles en Linux con ejemplos prácticos</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">400</post-id>	</item>
		<item>
		<title>Empezar a crear un proyecto con ReactJS</title>
		<link>https://agcapa.es/empezar-a-crear-un-proyecto-con-reactjs/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 28 Jun 2018 10:35:18 +0000</pubDate>
				<category><![CDATA[varios]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=363</guid>

					<description><![CDATA[<p>Continuamos nuestra serie de artículos sobre ReactJS, pero nos centramos ya en la parte más práctica de esta librería Javascript y lo hacemos  con un pequeño ejemplo en el que usaremos la herramienta Create React App, que nos permite obtener con un único comando el entorno de desarrollo ya listo para empezar a trabajar. Uno de los problemas que&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/empezar-a-crear-un-proyecto-con-reactjs/">Empezar a crear un proyecto con ReactJS</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Continuamos <a href="https://www.arsys.es/blog/?s=reactjs" target="_blank" rel="noopener noreferrer">nuestra serie de artículos sobre ReactJS</a>, pero <strong>nos centramos ya en la parte más práctica de esta librería Javascript</strong> y lo hacemos  con un pequeño ejemplo en el que usaremos la herramienta Create React App, que nos permite obtener con un único comando el entorno de desarrollo ya listo para empezar a trabajar.</p>
<p>Uno de los problemas que tenía ReactJS al principio era que en ocasiones había que pelearse un poco con las configuraciones, gestores de paquetes, de tareas, transpiladores, linters, builders etc. Facebook ha resuelto esta complicación con <a href="https://github.com/facebookincubator/create-react-app" target="_blank" rel="noopener noreferrer">Create React App</a>. Por línea de comandos, nos ahorra la necesidad de configurar todo un entorno de trabajo, por lo que nos permite ponernos directamente a desarrollar sobre esta librería y disfrutar de toda la sencillez y rendimiento de ReactJS.</p>
<h2>Instalación</h2>
<p>Este comando es CREATE REACT APP y se instala en tres pasos:</p>
<p>Primero instalamos Create React App con el siguiente comando de npm:</p>
<pre>npm install -g create-react-app</pre>
<p>Una vez lo hemos instalado nos metemos en la carpeta donde deseemos crear nuestro directorio de trabajo para el proyecto, y lanzamos el comando para comenzar la nueva aplicación:</p>
<pre>create-react-app nueva-app-react</pre>
<p>Mediante el anterior comando se cargan los archivos de un proyecto vacío y todas las dependencias de npm. Una vez terminado el proceso entraremos dentro de la carpeta de nuestra nueva app:</p>
<pre>cd nueva-app-react</pre>
<p>Ya dentro lanzaremos el comando que iniciará el servidor web y nos abrirá una página en nuestro navegador con un mensaje de bienvenida.</p>
<pre>npm start</pre>
<p>Con esto ya tendremos nuestro proyecto creado.</p>
<p>El propio terminal nos indicará la URL del servidor web donde está funcionando nuestra app. De manera predeterminada, será el http://localhost:3000/, aunque el puerto podría variar si el 3000 está ocupado.</p>
<h2>Estructura del proyecto</h2>
<p>Nuestra app React recién creada cuenta con varias carpetas:</p>
<ul>
<li><strong>node_modules: </strong>dependencias npm del proyecto</li>
<li><strong>public:</strong> la raíz de nuestro servidor donde se podrá encontrar el index.html, el archivo principal y el favicon.ico, el icono de la aplicación.</li>
<li><strong>src:</strong> aquí es donde trabajaremos nuestro proyecto, donde vamos a colocar los archivos de nuestros componentes React.</li>
</ul>
<p>Además encontrarás estos archivos sueltos, como el readme, el package.json, etc.</p>
<h2>Hola Mundo en React</h2>
<p>Casi todo nuestro trabajo del día a día lo realizaremos en la carpeta “src”. Para comenzar y no despistarnos en nuestro primer “Hola Mundo”, podríamos obviargran parte del código de nuestro archivo src/App.js y quedarnos con esto:</p>
<pre>import React, { Component } from 'react';

class App extends Component {
  render() {
    return (
      &lt;div&gt;
        &lt;h1&gt;Estamos comenzando con ReactJS&lt;/h1&gt;
        &lt;h2&gt;Comenzar con Create React App se hace muy sencillo&lt;/h2&gt;
      &lt;/div&gt;
    );
  }
}
export default App;</pre>
<p>En la primera línea <em>import React,</em> se está importando la librería React y la clase Component. Esta clase la usamos para extenderla y crear nuestra propio componente App.</p>
<p>Las clases que usamos para implementar componentes React solo necesitan un método render para poder funcionar. En nuestro caso el componente que estamos creando, llamado <em>App</em> (como el nombre de la clase), solamente tiene ese método <em>render</em>().</p>
<p>Como puedes observar, render devuelve un contenido que es el HTML necesario para pintar el componente en la página. El único detalle es que render debe devolver un único elemento HTML (en nuestro caso un <em>&lt;div&gt;</em>), sobre el que se anidarán cualquier número de elementos para crear la estructura del DOM necesaria para el componente.</p>
<p>Observa también que estamos usando clases de <a href="https://www.arsys.es/blog/ecmascript-javascript/" target="_blank" rel="noopener noreferrer">ECMAScript 6</a> para la creación de componentes. Actualmente es la manera recomendada, aunque no es la única. No necesitaremos preocuparnos porque ese Javascript no sea compatible con todos los navegadores, ya que Create React App configura el transpilador para hacerlo compatible con ECMAScript 5.</p>
<p>Guardando el archivo observamos como el navegador refresca la página automáticamente.</p>
<blockquote><p>Con esto ya hemos creado nuestro primer componente y tenemos un acercamiento inicial a React, y muy sencillo gracias a Create React App.</p></blockquote>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/empezar-a-crear-un-proyecto-con-reactjs/">Empezar a crear un proyecto con ReactJS</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">363</post-id>	</item>
		<item>
		<title>Las tablas de la base de datos de WordPress</title>
		<link>https://agcapa.es/las-tablas-la-base-datos-wordpress/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 19 Mar 2018 11:52:34 +0000</pubDate>
				<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=358</guid>

					<description><![CDATA[<p>Las tablas de la base de datos de WordPress Cuando instalamos WordPress se crean 12 tablas iniciales que son las que vamos a explicar en esta guía. Nota: Ante de continuar debemos saber que no deberíamos utilizar el prefijo por defecto que nos ofrece WordPress que no es otro que “wp_“. Deberíamos cambiarlo por otro&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/las-tablas-la-base-datos-wordpress/">Las tablas de la base de datos de WordPress</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><span id="Las_tablas_de_la_base_de_datos_de_WordPress">Las tablas de la base de datos de WordPress</span></h2>
<p>Cuando instalamos <strong>WordPress</strong> se crean <strong>12 tablas</strong> iniciales que son las que vamos a explicar en esta guía.</p>
<p>Nota: Ante de continuar debemos saber que no deberíamos utilizar el <strong>prefijo por defecto</strong> que nos ofrece WordPress que no es otro que “<strong>wp_</strong>“. Deberíamos cambiarlo por otro por motivos de seguridad. Para esta guía he utilizado el prefijo por defecto por motivos didácticos.</p>
<p>Tras realizar una instalación de <strong>WordPress</strong> sin nada más, nos econtraremos estas tablas en nuestro <strong>phpMyAdmin</strong>:</p>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia-base-datos-wordpress-tablas.png"><img loading="lazy" class="size-large wp-image-874 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia-base-datos-wordpress-tablas-1024x423.png" sizes="(max-width: 1024px) 100vw, 1024px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia-base-datos-wordpress-tablas-1024x423.png 1024w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia-base-datos-wordpress-tablas-300x124.png 300w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia-base-datos-wordpress-tablas-768x317.png 768w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia-base-datos-wordpress-tablas-600x248.png 600w" alt="" width="1024" height="423" /></a>Esta es la estructura de tablas que nos vamos a encontrar en una nueva instalación de <strong>WordPress</strong>.</p>
<p>A continuación vamos a resumir un poco cada una de las tablas para más adelante pasar a detallarlas un poco más cada una de ellas.</p>
<table>
<thead>
<tr>
<th colspan="2">Las 12 tablas de WordPress</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>wp_commentmeta</strong></td>
<td>Esta tabla contiene contenido adicional sobre los comentarios.</td>
</tr>
<tr>
<td><strong>wp_comments</strong></td>
<td>Aquí están los datos de los comentarios.</td>
</tr>
<tr>
<td><strong>wp_links</strong></td>
<td>Esta tabla está obsoleta desde la versión 3.5 de WordPress. Aquí se almacenan o almacenaban los enlaces.</td>
</tr>
<tr>
<td><strong>wp_options</strong></td>
<td>Aquí se almacenan los datos de configuración de WordPress además de datos sobre configuración de plugins, temas, etc..</td>
</tr>
<tr>
<td><strong>wp_postmeta</strong></td>
<td>Información relacionada con los posts. Esta tabla está relacionada con la tabla <strong>wp_posts</strong>.</td>
</tr>
<tr>
<td><strong>wp_posts</strong></td>
<td>Se almacena todo el contenido de WordPress como entradas, páginas, ficheros, etc…</td>
</tr>
<tr>
<td><strong>wp_termmeta</strong></td>
<td>Metadados relacionados con las categorías.</td>
</tr>
<tr>
<td><strong>wp_terms</strong></td>
<td>Aquí se almacenan las categorías y etiquetas.</td>
</tr>
<tr>
<td><strong>wp_terms_relationships</strong></td>
<td>En esta tabla se establece la relación entre los posts con las categorías, etiquetas, etc..</td>
</tr>
<tr>
<td><strong>wp_term_taxonomy</strong></td>
<td>Establece las características de las taxonomías como las entradas, páginas, etc…</td>
</tr>
<tr>
<td><strong>wp_usermeta</strong></td>
<td>Tabla con información adicional sobre los usuarios de la tabla <strong>wp_users</strong>.</td>
</tr>
<tr>
<td><strong>wp_users</strong></td>
<td>En esta tabla es donde se almacenan todos los usuarios con su información básica como contraseña, email, etc..</td>
</tr>
</tbody>
</table>
<p>Con esta breve explicación ya nos podemos hacer una idea de la estructura de la base de datos de <strong>WordPress</strong> y hacerno una idea que dónde se almacenan algunos datos aunque lo veremos un poco mejor más adelante en esta guía.</p>
<p>&nbsp;</p>
<h2><span id="Relaciones_entre_las_tablas_de_la_base_de_datos">Relaciones entre las tablas de la base de datos</span></h2>
<p>Para comprender un poco mejor la estructura de la base de datos de <strong>WordPress</strong> debemos entender cómo están relacionas entre ellas.</p>
<p>A continuación podemos ver un esquema de las relaciones entre las tablas obtenido del <a href="https://codex.wordpress.org/Database_Description">codex de WordPress.org</a>.</p>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas.png"><img loading="lazy" class="size-large wp-image-883 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas-726x1024.png" sizes="(max-width: 726px) 100vw, 726px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas-726x1024.png 726w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas-213x300.png 213w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas-768x1083.png 768w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas-600x846.png 600w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/wordpress_database_relacion_tablas.png 793w" alt="" width="726" height="1024" /></a>En la imagen anterior podemos ver graficamente las relaciones entre las tablas de la base de datos de <strong>WordPress</strong> en sus últimas versiones.</p>
<p>Detallaremos un poco más la relación de cada una de las tablas más adelante en esta guía.</p>
<p>&nbsp;</p>
<h2><span id="Detalle_de_cada_una_de_las_tablas">Detalle de cada una de las tablas</span></h2>
<h3></h3>
<h3><span id="Tabla_wp_commentmeta">Tabla wp_commentmeta</span></h3>
<p>Como ya hemos comentado anteriormente, en la tabla <strong>wp_commentmeta</strong> se almacenan los datos adicionales de o sobre los comentarios que se almacenan en una instalación de <strong>WordPress</strong>.</p>
<h4>Estructura de la tabla wp_commentmeta:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_commentmeta.png"><img loading="lazy" class=" wp-image-885 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_commentmeta.png" alt="" width="258" height="191" /></a></p>
<p>Como podemos ver en la imagen anterior esta tabla es muy sencilla y sólo tiene 4 campos:</p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_commentmeta</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>meta_id</strong></td>
<td>Id principal de la tabla</td>
</tr>
<tr>
<td><strong>comment_id</strong></td>
<td>Id del comentario (tabla wp_comments)</td>
</tr>
<tr>
<td><strong>meta_key</strong></td>
<td>Clave del valor</td>
</tr>
<tr>
<td><strong>meta_value</strong></td>
<td>Meta o valor del campo</td>
</tr>
</tbody>
</table>
<p>Destacaremos que el cambio <strong>comment_id</strong> hace referencia al id de la tabla <strong>wp_comments</strong> por lo tanto queda claro que ambas están relacinonada a través de este campo.</p>
<h4>Obtener datos de la tabla wp_commentmeta</h4>
<p>Para obtener datos de la tabla <strong>wp_commentmeta</strong> podemo utilizar la función <a href="https://developer.wordpress.org/reference/functions/get_comment_meta/">get_comment_meta()</a> que nos devolverá el campo meta de un comentario.</p>
<div id="crayon-5aaa9a7a6460b324524443" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">metacomentario = get_comment_meta( $comment-&gt;comment_ID, &#8216;mimeta&#8217;, true );</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a6460b324524443-1">1</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a6460b324524443-1" class="crayon-line"><span class="crayon-i">metacomentario</span> <span class="crayon-o">=</span> <span class="crayon-e">get_comment_meta</span><span class="crayon-sy">(</span> <span class="crayon-v">$comment</span><span class="crayon-o">-&gt;</span><span class="crayon-i">comment_ID</span><span class="crayon-sy">,</span> <span class="crayon-s">&#8216;mimeta&#8217;</span><span class="crayon-sy">,</span> <span class="crayon-t">true</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_comments">Tabla wp_comments</span></h3>
<p>Esta es la tabla donde se almacenan o guardan los <strong>comentarios</strong> que se han realizado en nuestro <strong>WordPress</strong>. Tanto los comentarios que se han aprobado como los que no han sido aprovados.</p>
<h4>Estructura de la tabla wp_comments:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments.png"><img loading="lazy" class="size-large wp-image-895 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments-1024x86.png" sizes="(max-width: 1024px) 100vw, 1024px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments-1024x86.png 1024w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments-300x25.png 300w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments-768x64.png 768w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments-600x50.png 600w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_comments.png 1209w" alt="" width="1024" height="86" /></a></p>
<p>&nbsp;</p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_comments</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>comment_ID</strong></td>
<td>Id del comentario</td>
</tr>
<tr>
<td><strong>comment_post_ID</strong></td>
<td>Id del post (tabla wp_posts)</td>
</tr>
<tr>
<td><strong>comment_author</strong></td>
<td>Autor del comentario</td>
</tr>
<tr>
<td><strong>comment_author_email</strong></td>
<td>Email del autor del comentario</td>
</tr>
<tr>
<td><strong>comment_author_url</strong></td>
<td>Url del autor del comentario</td>
</tr>
<tr>
<td><strong>comment_author_IP</strong></td>
<td>Ip del autor del comentario</td>
</tr>
<tr>
<td><strong>comment_date</strong></td>
<td>Fecha y hora del comentario</td>
</tr>
<tr>
<td><strong>comment_date_gmt</strong></td>
<td>Fecha y hora del comentario (gmt)</td>
</tr>
<tr>
<td><strong>comment_content</strong></td>
<td>Contenido del comentario</td>
</tr>
<tr>
<td><strong>comment_karma</strong></td>
<td>Meta o valor del campo</td>
</tr>
<tr>
<td><strong>comment_approved</strong></td>
<td>Aprobación del comentario (0, 1 o spam)</td>
</tr>
<tr>
<td><strong>comment_agent</strong></td>
<td>Browser, sistema operativo, etc..</td>
</tr>
<tr>
<td><strong>comment_type</strong></td>
<td>Tipo (pingback | trackback)</td>
</tr>
<tr>
<td><strong>comment_parent</strong></td>
<td>Comentario padre del actual</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>id del usuario si está registrado</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_comments</h4>
<p>Para obtener datos de la tabla <strong>wp_comments</strong> podemo utilizar la función <a href="https://codex.wordpress.org/Function_Reference/get_comments">get_comments()</a> que nos devolverá el campo meta de un comentario.</p>
<div id="crayon-5aaa9a7a64617433194230" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">&lt;?php<br />
  // Mostrar por pantalla los autores de los comentarios del post con id 15</p>
<p>  $commentarios = get_comments(&#8216;post_id=15&#8217;);<br />
  foreach($comments as $comment) :<br />
	echo($comment-&gt;comment_author);<br />
  endforeach;<br />
?&gt;</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a64617433194230-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64617433194230-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64617433194230-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64617433194230-4">4</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64617433194230-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64617433194230-6">6</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64617433194230-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64617433194230-8">8</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a64617433194230-1" class="crayon-line"><span class="crayon-ta">&lt;?php</span></div>
<div id="crayon-5aaa9a7a64617433194230-2" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-c">// Mostrar por pantalla los autores de los comentarios del post con id 15</span></div>
<div id="crayon-5aaa9a7a64617433194230-3" class="crayon-line"></div>
<div id="crayon-5aaa9a7a64617433194230-4" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-v">$commentarios</span> <span class="crayon-o">=</span> <span class="crayon-e">get_comments</span><span class="crayon-sy">(</span><span class="crayon-s">&#8216;post_id=15&#8217;</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64617433194230-5" class="crayon-line"><span class="crayon-h">  </span><span class="crayon-st">foreach</span><span class="crayon-sy">(</span><span class="crayon-v">$comments</span> <span class="crayon-st">as</span> <span class="crayon-v">$comment</span><span class="crayon-sy">)</span> <span class="crayon-o">:</span></div>
<div id="crayon-5aaa9a7a64617433194230-6" class="crayon-line crayon-striped-line"><span class="crayon-k ">echo</span><span class="crayon-sy">(</span><span class="crayon-v">$comment</span><span class="crayon-o">-&gt;</span><span class="crayon-i">comment_author</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64617433194230-7" class="crayon-line"><span class="crayon-h">  </span><span class="crayon-st">endforeach</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64617433194230-8" class="crayon-line crayon-striped-line"><span class="crayon-ta">?&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_links">Tabla wp_links</span></h3>
<p>Esta tabla se utilizaba en veriones anteriores pero se dejó de utilizar. Antes se utilizaba para la <strong>gestión de los enlaces</strong>.</p>
<p>Si necesistamos o queresmos volver a utilizar esta característica de <strong>WordPress</strong> la podemos seguir usando si instalamos el plugin “<a href="https://wordpress.org/plugins/link-manager/">Link Manager</a>“.</p>
<p>No se muestran detalles de esta tabla por que no se utiliza normalmente.</p>
<p>Para obtener más información sobre la tabla wp_links podemos visitar <a href="https://codex.wordpress.org/Database_Description#Table:_wp_links">este enlace</a>.</p>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_options">Tabla wp_options</span></h3>
<p>Como ya hemos comentado al principio de esta guía en esta tabla se guardarán y gestionaran las <strong>opciones de</strong> nuestra instalación de <strong>WordPress</strong>.</p>
<p>Esta tabla es algo especial puesto que, en principio, no tiene ninguna relación con ningun otra tabla de la base de datos de <strong>WordPress</strong>.</p>
<p>Enl a siguiente captura podemos ver la tabla completa que crea <strong>WordPress</strong> tras la instalación.</p>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_options.png"><img loading="lazy" class="size-full wp-image-899 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_options.png" sizes="(max-width: 519px) 100vw, 519px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_options.png 519w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_options-183x300.png 183w" alt="" width="519" height="852" /></a></p>
<h4>Estructura de la tabla wp_options:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_options-1.png"><img loading="lazy" class="size-full wp-image-901 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_options-1.png" alt="" width="223" height="164" /></a></p>
<p>Esta tabla, como podemos ver, solo tiene 4 campos o filas.</p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_options</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>option_id</strong></td>
<td>Id de la opción</td>
</tr>
<tr>
<td><strong>option_name</strong></td>
<td>Nombre de la opción</td>
</tr>
<tr>
<td><strong>option_value</strong></td>
<td>Valor de la opción</td>
</tr>
<tr>
<td><strong>autoload</strong></td>
<td>Si la opción se carga automaticamente</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_options</h4>
<div id="crayon-5aaa9a7a6461a356401142" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener el email del administrador</p>
<p>$admin_email = get_option( &#8216;admin_email&#8217; );</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a6461a356401142-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6461a356401142-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6461a356401142-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a6461a356401142-1" class="crayon-line"><span class="crayon-c">// Obtener el email del administrador</span></div>
<div id="crayon-5aaa9a7a6461a356401142-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a6461a356401142-3" class="crayon-line"><span class="crayon-v">$admin_email</span> <span class="crayon-o">=</span> <span class="crayon-e">get_option</span><span class="crayon-sy">(</span> <span class="crayon-s">&#8216;admin_email&#8217;</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h4></h4>
<h3><span id="Tabla_wp_postmeta">Tabla wp_postmeta</span></h3>
<p>Cada meta data de un post se almacena en la tabla <strong>wp_postmeta</strong>.</p>
<p>Algunos plugins también pueden utilizar esta tabla para guardar su propia información.</p>
<h4>Estructura de la tabla wp_postmeta:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts.png"><img loading="lazy" class="wp-image-903 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts.png" alt="" width="251" height="218" /></a></p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_postmeta</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>meta_id</strong></td>
<td>Id de la información (meta)</td>
</tr>
<tr>
<td><strong>post_id</strong></td>
<td>Id del post asociado</td>
</tr>
<tr>
<td><strong>meta_key</strong></td>
<td>Clave del meta</td>
</tr>
<tr>
<td><strong>meta_value</strong></td>
<td>Valor del meta (información)</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_postmeta</h4>
<div id="crayon-5aaa9a7a6461c087191934" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener la información adicional o meta del post actual a través de su ID</p>
<p>$meta = get_post_meta( get_the_ID() );</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a6461c087191934-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6461c087191934-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6461c087191934-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a6461c087191934-1" class="crayon-line"><span class="crayon-c">// Obtener la información adicional o meta del post actual a través de su ID</span></div>
<div id="crayon-5aaa9a7a6461c087191934-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a6461c087191934-3" class="crayon-line"><span class="crayon-v">$meta</span> <span class="crayon-o">=</span> <span class="crayon-e">get_post_meta</span><span class="crayon-sy">(</span> <span class="crayon-e">get_the_ID</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_posts">Tabla wp_posts</span></h3>
<p>Aunque todas las tablas de la base de datos son muy importantes, la tabla <strong>wp_posts</strong> es por lo menos una de las más imporntes sino la más importante.</p>
<p>Debemos tener en cuenta que aquí, en la tabla <strong>wp_posts</strong> se almacena la información de los posts de <strong>WordPress</strong> lo que incluye entradas, páginas, etc…</p>
<h4>Estructura de la tabla wp_posts:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts1.png"><img loading="lazy" class="size-full wp-image-904 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts1.png" sizes="(max-width: 657px) 100vw, 657px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts1.png 657w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts1-253x300.png 253w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_posts1-600x711.png 600w" alt="" width="657" height="778" /></a></p>
<p>&nbsp;</p>
<table width="572">
<thead>
<tr>
<th colspan="2">Campos tabla wp_posts</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>ID</strong></td>
<td>Id de la información (meta)</td>
</tr>
<tr>
<td><strong>post_author</strong></td>
<td>Autor del post</td>
</tr>
<tr>
<td><strong>post_date</strong></td>
<td>Fecha del post</td>
</tr>
<tr>
<td><strong>post_date_gmt</strong></td>
<td>Fecha del post (gmt)</td>
</tr>
<tr>
<td><strong>post_content</strong></td>
<td>Contenido del post</td>
</tr>
<tr>
<td><strong>post_title</strong></td>
<td>Título del post</td>
</tr>
<tr>
<td><strong>post_excerpt</strong></td>
<td>Extracto del post</td>
</tr>
<tr>
<td><strong>post_status</strong></td>
<td>Estado del post (publicado, borrador, etc..)</td>
</tr>
<tr>
<td><strong>comment_status</strong></td>
<td>Estado comentarios (abiertos?)</td>
</tr>
<tr>
<td><strong>ping_status</strong></td>
<td>Estado de los pings (abiertos?)</td>
</tr>
<tr>
<td><strong>post_password</strong></td>
<td>Contraseña del post</td>
</tr>
<tr>
<td><strong>post_name</strong></td>
<td>Nombre del post</td>
</tr>
<tr>
<td><strong>to_ping</strong></td>
<td>Url a la que enviar pingback</td>
</tr>
<tr>
<td><strong>pinged</strong></td>
<td>Url a la que se ha enviado pingback</td>
</tr>
<tr>
<td><strong>post_modified</strong></td>
<td>Fecha y hora de modificarción del post</td>
</tr>
<tr>
<td><strong>post_modified_gmt</strong></td>
<td>Fecha y hora de modificarción del post (gmt)</td>
</tr>
<tr>
<td><strong>post_content_filtered</strong></td>
<td>Usado por algunos plugins de cache para guardar uan versión en caché</td>
</tr>
<tr>
<td><strong>guid</strong></td>
<td>Url permanente al post</td>
</tr>
<tr>
<td><strong>menu_order</strong></td>
<td>Número de orden en el menu</td>
</tr>
<tr>
<td><strong>post_type</strong></td>
<td>Tipo de post (post, page…)</td>
</tr>
<tr>
<td><strong>post_mime_type</strong></td>
<td>El Mime type de los ficheros subidos</td>
</tr>
<tr>
<td><strong>comment_count</strong></td>
<td>Número de comentarios del post</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_posts</h4>
<div id="crayon-5aaa9a7a6461e836667883" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener los últimos 15 posts</p>
<p>$args = array(<br />
  &#8216;numberposts&#8217; =&gt; 10<br />
);</p>
<p>$latest_posts = get_posts( $args );</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a6461e836667883-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6461e836667883-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6461e836667883-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6461e836667883-4">4</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6461e836667883-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6461e836667883-6">6</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6461e836667883-7">7</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a6461e836667883-1" class="crayon-line"><span class="crayon-c">// Obtener los últimos 15 posts</span></div>
<div id="crayon-5aaa9a7a6461e836667883-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a6461e836667883-3" class="crayon-line"><span class="crayon-v">$args</span> <span class="crayon-o">=</span> <span class="crayon-t">array</span><span class="crayon-sy">(</span></div>
<div id="crayon-5aaa9a7a6461e836667883-4" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-s">&#8216;numberposts&#8217;</span> <span class="crayon-o">=</span><span class="crayon-o">&gt;</span> <span class="crayon-cn">10</span></div>
<div id="crayon-5aaa9a7a6461e836667883-5" class="crayon-line"><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a6461e836667883-6" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a6461e836667883-7" class="crayon-line"><span class="crayon-v">$latest_posts</span> <span class="crayon-o">=</span> <span class="crayon-e">get_posts</span><span class="crayon-sy">(</span> <span class="crayon-v">$args</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_termmeta">Tabla wp_termmeta</span></h3>
<p>En este tabla se almacenan los <strong>metadatos relacionados con las categorías</strong>.</p>
<h4>Estructura de la tabla wp_termmeta:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_termmeta.png"><img loading="lazy" class="size-full wp-image-908 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_termmeta.png" sizes="(max-width: 556px) 100vw, 556px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_termmeta.png 556w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_termmeta-300x85.png 300w" alt="" width="556" height="158" /></a></p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_termmeta</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>meta_id</strong></td>
<td>Id de la información (meta)</td>
</tr>
<tr>
<td><strong>term_id</strong></td>
<td>Id del término</td>
</tr>
<tr>
<td><strong>meta_key</strong></td>
<td>Clave del meta</td>
</tr>
<tr>
<td><strong>meta_value</strong></td>
<td>Valor del meta (información)</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_termmeta</h4>
<div id="crayon-5aaa9a7a6462e370099687" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener el valor del término &#8216;color&#8217;</p>
<p>$color = get_term_meta( $term_id, &#8216;color&#8217;, true );</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a6462e370099687-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6462e370099687-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6462e370099687-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a6462e370099687-1" class="crayon-line"><span class="crayon-c">// Obtener el valor del término &#8216;color&#8217;</span></div>
<div id="crayon-5aaa9a7a6462e370099687-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a6462e370099687-3" class="crayon-line"><span class="crayon-v">$color</span> <span class="crayon-o">=</span> <span class="crayon-e">get_term_meta</span><span class="crayon-sy">(</span> <span class="crayon-v">$term_id</span><span class="crayon-sy">,</span> <span class="crayon-s">&#8216;color&#8217;</span><span class="crayon-sy">,</span> <span class="crayon-t">true</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_terms">Tabla wp_terms</span></h3>
<p>En la tabla <strong>wp_terms</strong> se guardan tanto las <strong>categorías como las etiquetas</strong> para los posts y páginas.</p>
<h4>Estructura de la tabla wp_terms:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_terms.png"><img loading="lazy" class="size-full wp-image-909 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_terms.png" sizes="(max-width: 552px) 100vw, 552px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_terms.png 552w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_terms-300x87.png 300w" alt="" width="552" height="160" /></a></p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_terms</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>term_id</strong></td>
<td>Id de término</td>
</tr>
<tr>
<td><strong>name</strong></td>
<td>Nombre del término</td>
</tr>
<tr>
<td><strong>slug</strong></td>
<td>Slug del término</td>
</tr>
<tr>
<td><strong>term_group</strong></td>
<td>Agrupación de terminos (alias)</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_terms</h4>
<div id="crayon-5aaa9a7a64630342043378" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener todas la información de los términos de la categoría con ID 1</p>
<p>$term = get_term( 1 , &#8216;category&#8217; );<br />
echo $term-&gt;name;</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a64630342043378-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64630342043378-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64630342043378-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64630342043378-4">4</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a64630342043378-1" class="crayon-line"><span class="crayon-c">// Obtener todas la información de los términos de la categoría con ID 1</span></div>
<div id="crayon-5aaa9a7a64630342043378-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a64630342043378-3" class="crayon-line"><span class="crayon-v">$term</span> <span class="crayon-o">=</span> <span class="crayon-e">get_term</span><span class="crayon-sy">(</span> <span class="crayon-cn">1</span> <span class="crayon-sy">,</span> <span class="crayon-s">&#8216;category&#8217;</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64630342043378-4" class="crayon-line crayon-striped-line"><span class="crayon-k ">echo</span> <span class="crayon-v">$term</span><span class="crayon-o">-&gt;</span><span class="crayon-i">name</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_term_relationships">Tabla wp_term_relationships</span></h3>
<p>Los posts están relacionados con categorías y etiquetas por la tabla <strong>wp_terms</strong> y esta asociación es mantenida en la tabla <strong>wp_term_relationships</strong>.</p>
<h4>Estructura de la tabla wp_term_relationships:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_relationships.png"><img loading="lazy" class="size-full wp-image-910 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_relationships.png" sizes="(max-width: 575px) 100vw, 575px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_relationships.png 575w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_relationships-300x70.png 300w" alt="" width="575" height="134" /></a></p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_term_relationships</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>obtect_id</strong></td>
<td>Id de término</td>
</tr>
<tr>
<td><strong>term_taxonomy_id</strong></td>
<td>Nombre del término</td>
</tr>
<tr>
<td><strong>term_order</strong></td>
<td>Slug del término</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_term_relationships</h4>
<div id="crayon-5aaa9a7a64634483724577" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Devuelve una lista de términos de taxonomía de productos que se aplican a $post</p>
<p>$product_terms = wp_get_object_terms( $post-&gt;ID,  &#8216;product&#8217; );</p>
<p>if ( ! empty( $product_terms ) ) {<br />
    if ( ! is_wp_error( $product_terms ) ) {<br />
        echo &#8216;&lt;ul&gt;&#8217;;<br />
            foreach( $product_terms as $term ) {<br />
                echo &#8216;&lt;li&gt;&lt;a href=»&#8216; . esc_url( get_term_link( $term-&gt;slug, &#8216;product&#8217; ) ) . &#8216;»&gt;&#8217; . esc_html( $term-&gt;name ) . &#8216;&lt;/a&gt;&lt;/li&gt;&#8217;;<br />
            }<br />
        echo &#8216;&lt;/ul&gt;&#8217;;<br />
    }<br />
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64634483724577-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64634483724577-4">4</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64634483724577-6">6</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64634483724577-8">8</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64634483724577-10">10</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64634483724577-12">12</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64634483724577-13">13</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a64634483724577-1" class="crayon-line"><span class="crayon-c">// Devuelve una lista de términos de taxonomía de productos que se aplican a $post</span></div>
<div id="crayon-5aaa9a7a64634483724577-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a64634483724577-3" class="crayon-line"><span class="crayon-v">$product_terms</span> <span class="crayon-o">=</span> <span class="crayon-e">wp_get_object_terms</span><span class="crayon-sy">(</span> <span class="crayon-v">$post</span><span class="crayon-o">-&gt;</span><span class="crayon-cn">ID</span><span class="crayon-sy">,</span><span class="crayon-h">  </span><span class="crayon-s">&#8216;product&#8217;</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64634483724577-4" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a64634483724577-5" class="crayon-line"><span class="crayon-st">if</span> <span class="crayon-sy">(</span> <span class="crayon-o">!</span> <span class="crayon-k ">empty</span><span class="crayon-sy">(</span> <span class="crayon-v">$product_terms</span> <span class="crayon-sy">)</span> <span class="crayon-sy">)</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5aaa9a7a64634483724577-6" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-st">if</span> <span class="crayon-sy">(</span> <span class="crayon-o">!</span> <span class="crayon-e">is_wp_error</span><span class="crayon-sy">(</span> <span class="crayon-v">$product_terms</span> <span class="crayon-sy">)</span> <span class="crayon-sy">)</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5aaa9a7a64634483724577-7" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-k ">echo</span> <span class="crayon-s">&#8216;&lt;ul&gt;&#8217;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64634483724577-8" class="crayon-line crayon-striped-line"><span class="crayon-h">            </span><span class="crayon-st">foreach</span><span class="crayon-sy">(</span> <span class="crayon-v">$product_terms</span> <span class="crayon-st">as</span> <span class="crayon-v">$term</span> <span class="crayon-sy">)</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5aaa9a7a64634483724577-9" class="crayon-line"><span class="crayon-h">                </span><span class="crayon-k ">echo</span> <span class="crayon-s">&#8216;&lt;li&gt;&lt;a href=»&#8216;</span> <span class="crayon-sy">.</span> <span class="crayon-e">esc_url</span><span class="crayon-sy">(</span> <span class="crayon-e">get_term_link</span><span class="crayon-sy">(</span> <span class="crayon-v">$term</span><span class="crayon-o">-&gt;</span><span class="crayon-i">slug</span><span class="crayon-sy">,</span> <span class="crayon-s">&#8216;product&#8217;</span> <span class="crayon-sy">)</span> <span class="crayon-sy">)</span> <span class="crayon-sy">.</span> <span class="crayon-s">&#8216;»&gt;&#8217;</span> <span class="crayon-sy">.</span> <span class="crayon-e">esc_html</span><span class="crayon-sy">(</span> <span class="crayon-v">$term</span><span class="crayon-o">-&gt;</span><span class="crayon-i">name</span> <span class="crayon-sy">)</span> <span class="crayon-sy">.</span> <span class="crayon-s">&#8216;&lt;/a&gt;&lt;/li&gt;&#8217;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64634483724577-10" class="crayon-line crayon-striped-line"><span class="crayon-h">            </span><span class="crayon-sy">}</span></div>
<div id="crayon-5aaa9a7a64634483724577-11" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-k ">echo</span> <span class="crayon-s">&#8216;&lt;/ul&gt;&#8217;</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64634483724577-12" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-5aaa9a7a64634483724577-13" class="crayon-line"><span class="crayon-sy">}</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_term_taxonomy">Tabla wp_term_taxonomy</span></h3>
<p>Esta tabla almacena la información que <strong>describe la taxonomía como categorías, tags, cpt..</strong>. para las entradas de la tabla <strong>wp_terms</strong>.</p>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_term_taxonomy.png"><img loading="lazy" class="size-full wp-image-912 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_term_taxonomy.png" sizes="(max-width: 456px) 100vw, 456px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_term_taxonomy.png 456w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_term_taxonomy-300x49.png 300w" alt="" width="456" height="74" /></a></p>
<h4>Estructura de la tabla wp_term_taxonomy:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_taxonomy.png"><img loading="lazy" class="size-full wp-image-911 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_taxonomy.png" sizes="(max-width: 461px) 100vw, 461px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_taxonomy.png 461w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_term_taxonomy-300x148.png 300w" alt="" width="461" height="228" /></a></p>
<p>&nbsp;</p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_term_taxonomy</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>term_taxonomy_id</strong></td>
<td>Id del témino de taxonomía</td>
</tr>
<tr>
<td><strong>term_id</strong></td>
<td>Id del término</td>
</tr>
<tr>
<td><strong>taxonomy</strong></td>
<td>Nombre de la taxonomía</td>
</tr>
<tr>
<td><strong>description</strong></td>
<td>Descripción</td>
</tr>
<tr>
<td><strong>parent</strong></td>
<td>Padre</td>
</tr>
<tr>
<td><strong>count</strong></td>
<td>Número</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_usermeta">Tabla wp_usermeta</span></h3>
<p>En la tabla <strong>wp_usermeta</strong> se almacenan <strong>datos adicionales de los usuarios</strong>.</p>
<p>A continuación podemos ver el contenido de la tabla <strong>wp_usermeta</strong> tras la instalación de <strong>WordPress</strong>:</p>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_usermeta.png"><img loading="lazy" class="size-full wp-image-915 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_usermeta.png" sizes="(max-width: 614px) 100vw, 614px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_usermeta.png 614w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_usermeta-297x300.png 297w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_tabla_wp_usermeta-600x607.png 600w" alt="" width="614" height="621" /></a></p>
<h4>Estructura de la tabla wp_usermeta</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_usermeta.png"><img loading="lazy" class="size-full wp-image-916 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_usermeta.png" sizes="(max-width: 562px) 100vw, 562px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_usermeta.png 562w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_usermeta-300x86.png 300w" alt="" width="562" height="162" /></a></p>
<p>&nbsp;</p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_usermeta</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>umeta_id</strong></td>
<td>Id de la tabla</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>Id del usuario (tabla wp_users)</td>
</tr>
<tr>
<td><strong>meta_key</strong></td>
<td>Clave de la información o meta</td>
</tr>
<tr>
<td><strong>meta_value</strong></td>
<td>Valor de la información o meta</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_usermeta</h4>
<div id="crayon-5aaa9a7a64637966177204" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener y mostrar toda la información meta de un usuario a través de su id</p>
<p>&lt;?php<br />
  $metauser = get_user_meta( 1 );<br />
  print_r( $metauser );<br />
?&gt;</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a64637966177204-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64637966177204-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64637966177204-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64637966177204-4">4</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a64637966177204-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a64637966177204-6">6</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a64637966177204-1" class="crayon-line"><span class="crayon-c">// Obtener y mostrar toda la información meta de un usuario a través de su id</span></div>
<div id="crayon-5aaa9a7a64637966177204-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a64637966177204-3" class="crayon-line"><span class="crayon-ta">&lt;?php</span></div>
<div id="crayon-5aaa9a7a64637966177204-4" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-v">$metauser</span> <span class="crayon-o">=</span> <span class="crayon-e">get_user_meta</span><span class="crayon-sy">(</span> <span class="crayon-cn">1</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64637966177204-5" class="crayon-line"><span class="crayon-h">  </span><span class="crayon-e">print_r</span><span class="crayon-sy">(</span> <span class="crayon-v">$metauser</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-5aaa9a7a64637966177204-6" class="crayon-line crayon-striped-line"><span class="crayon-ta">?&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<h3><span id="Tabla_wp_users">Tabla wp_users</span></h3>
<p>Como su nombre indica, aquí se almacenan los <strong>datos de los usuarios</strong>: <em>nombre, email, etc</em>…</p>
<p>Esta tabla está directamente relacionada con la tabla <strong>wp_usermeta</strong>.</p>
<h4>Estructura de la tabla wp_users:</h4>
<p><a href="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_users.png"><img loading="lazy" class="size-full wp-image-917 aligncenter" src="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_users.png" sizes="(max-width: 502px) 100vw, 502px" srcset="http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_users.png 502w, http://www.oscarabadfolgueira.com/wp-content/uploads/2017/12/guia_base_datos_wordpress_estructura_tabla_wp_users-300x217.png 300w" alt="" width="502" height="363" /></a></p>
<table width="509">
<thead>
<tr>
<th colspan="2">Campos tabla wp_users</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>ID</strong></td>
<td>Id del usuario</td>
</tr>
<tr>
<td><strong>user_login</strong></td>
<td>Login o username para acceder</td>
</tr>
<tr>
<td><strong>user_pass</strong></td>
<td>Contraseña del usuario (encriptada)</td>
</tr>
<tr>
<td><strong>user_nicename</strong></td>
<td>Nombre del usuario que se muestra</td>
</tr>
<tr>
<td><strong>user_email</strong></td>
<td>Email del usuario</td>
</tr>
<tr>
<td><strong>user_url</strong></td>
<td>Campo url del usuario</td>
</tr>
<tr>
<td><strong>user_registered</strong></td>
<td>Fecha y hora en que se registró el usuario</td>
</tr>
<tr>
<td><strong>user_activation_key</strong></td>
<td>Se usa para reestablecer las contraseñas</td>
</tr>
<tr>
<td><strong>user_status</strong></td>
<td>Se usaba antes</td>
</tr>
<tr>
<td><strong>display_name</strong></td>
<td>nombre del usuario elegido para mostrar (user_login, user_nicename…)</td>
</tr>
</tbody>
</table>
<h4>Obtener datos de la tabla wp_users</h4>
<div id="crayon-5aaa9a7a6463b715883715" class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">// Obtener una lista de todos los usuarios con el nombre &#8216;oscar&#8217;</p>
<p>$usuarios_oscar = get_users( array( &#8216;search&#8217; =&gt; &#8216;oscar&#8217; ) );</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5aaa9a7a6463b715883715-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5aaa9a7a6463b715883715-2">2</div>
<div class="crayon-num" data-line="crayon-5aaa9a7a6463b715883715-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5aaa9a7a6463b715883715-1" class="crayon-line"><span class="crayon-c">// Obtener una lista de todos los usuarios con el nombre &#8216;oscar&#8217;</span></div>
<div id="crayon-5aaa9a7a6463b715883715-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-5aaa9a7a6463b715883715-3" class="crayon-line"><span class="crayon-v">$usuarios_oscar</span> <span class="crayon-o">=</span> <span class="crayon-e">get_users</span><span class="crayon-sy">(</span> <span class="crayon-t">array</span><span class="crayon-sy">(</span> <span class="crayon-s">&#8216;search&#8217;</span> <span class="crayon-o">=</span><span class="crayon-o">&gt;</span> <span class="crayon-s">&#8216;oscar&#8217;</span> <span class="crayon-sy">)</span> <span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>&nbsp;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/las-tablas-la-base-datos-wordpress/">Las tablas de la base de datos de WordPress</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">358</post-id>	</item>
		<item>
		<title>Solución al problema de rango de precios en WooCommerce</title>
		<link>https://agcapa.es/solucion-al-problema-rango-precios-woocommerce/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 06 Jul 2017 15:26:43 +0000</pubDate>
				<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=353</guid>

					<description><![CDATA[<p>Cómo sustituir el formato de rango de precios en WooCommerce para variaciones de productos. En la anterior versión 2.0 de WooCommerce, cuando se trabajaba con variaciones de productos, se mostraba el siguiente formato de precio: “Desde: 60€“, donde 60€ era el precio de la variación de productos más barata. Al actualizar a la nueva versión&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/solucion-al-problema-rango-precios-woocommerce/">Solución al problema de rango de precios en WooCommerce</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Cómo sustituir el formato de rango de precios en WooCommerce para variaciones de productos.</p>
<p>En la anterior versión 2.0 de WooCommerce, cuando se trabajaba con variaciones de productos, se mostraba el siguiente formato de precio: “Desde: 60€“, donde 60€ era el precio de la variación de productos más barata. Al actualizar a la nueva versión 2.1 de WooCommerce, el precio para las variaciones de productos se muestra en formato de rango de valores, algo así: “60€ – 80€“, ahora 80€ sería el precio de la variación de producto más cara.</p>
<p>Rango de precios WooCommerce</p>
<p>El problema del rango de precios es que es muy confuso a primera vista y puede hacer que el cliente tome el mayor precio como referencia y acabe abandonando la compra. Para evitar que esto ocurra y mostrar de nuevo el formato de precio de la versión 2.0, Gerhard Potgieter publicó hace poco en su blog una solución muy sencilla que te presento a continuación.</p>
<p>La solución consiste en pegar el siguiente código snippet al final del archivo function.php de tu plantilla de WooCommerce.</p>
<p><strong>/**</strong><br />
<strong> * Use WC 2.0 variable price format, now include sale price strikeout</strong><br />
<strong> *</strong><br />
<strong> * @param string $price</strong><br />
<strong> * @param object $product</strong><br />
<strong> * @return string</strong><br />
<strong> */</strong><br />
<strong>function wc_wc20_variation_price_format( $price, $product ) {</strong><br />
<strong> // Main Price</strong><br />
<strong> $prices = array( $product-&gt;get_variation_price( &#8216;min&#8217;, true ), $product-&gt;get_variation_price( &#8216;max&#8217;, true ) );</strong><br />
<strong> $price = $prices[0] !== $prices[1] ? sprintf( __( &#8216;From: %1$s&#8217;, &#8216;woocommerce&#8217; ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );</strong></p>
<p><strong>// Sale Price</strong><br />
<strong> $prices = array( $product-&gt;get_variation_regular_price( &#8216;min&#8217;, true ), $product-&gt;get_variation_regular_price( &#8216;max&#8217;, true ) );</strong><br />
<strong> sort( $prices );</strong><br />
<strong> $saleprice = $prices[0] !== $prices[1] ? sprintf( __( &#8216;From: %1$s&#8217;, &#8216;woocommerce&#8217; ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );</strong></p>
<p><strong>if ( $price !== $saleprice ) {</strong><br />
<strong> $price = &#8216;&lt;del&gt;&#8217; . $saleprice . &#8216;&lt;/del&gt; &lt;ins&gt;&#8217; . $price . &#8216;&lt;/ins&gt;&#8217;;</strong><br />
<strong> }</strong></p>
<p><strong> return $price;</strong><br />
<strong>}</strong><br />
<strong>add_filter( &#8216;woocommerce_variable_sale_price_html&#8217;, &#8216;wc_wc20_variation_price_format&#8217;, 10, 2 );</strong><br />
<strong>add_filter( &#8216;woocommerce_variable_price_html&#8217;, &#8216;wc_wc20_variation_price_format&#8217;, 10, 2 );</strong></p>
<p>&nbsp;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/solucion-al-problema-rango-precios-woocommerce/">Solución al problema de rango de precios en WooCommerce</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">353</post-id>	</item>
		<item>
		<title>Linux: Reemplazar texto en archivos con sed</title>
		<link>https://agcapa.es/linux-reemplazar-texto-archivos-sed/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 03 Jan 2017 08:05:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=343</guid>

					<description><![CDATA[<p>Si queremos buscar y reemplazar texto en entornos Linux, disponemos de varias herramientas para ello. Una de ellas es con el comando sed. El comando sed está presente en la mayoría de distribuciones de Linux y está pensado para manipular cadenas de texto. Si no disponemos del comando sed lo podemos instalar de la siguiente&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/linux-reemplazar-texto-archivos-sed/">Linux: Reemplazar texto en archivos con sed</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div>Si queremos <b>buscar y reemplazar</b> <b>texto </b>en entornos <b>Linux</b>, disponemos de varias herramientas para ello.</div>
<div></div>
<div>Una de ellas es con el comando sed.</div>
<div>
<div class="separator"></div>
<div class="separator"></div>
</div>
<div>El comando sed está presente en la mayoría de distribuciones de Linux y está pensado para manipular cadenas de texto.</div>
<div></div>
<div>Si no disponemos del comando sed lo podemos instalar de la siguiente forma:</div>
<div></div>
<div></div>
<ul>
<li>Para CentOS/RHEL: yum install sed</li>
<li>Para Debian/Ubuntu: apt-get install sed</li>
</ul>
<div></div>
<div><b>Sintaxis general y tres ejemplos para reemplazar texto en archivos:</b></div>
<div></div>
<div><u>Sintaxis general:</u></div>
<div><b> </b></div>
<div><b>sed -i &#8216;s/texto-a-buscar/texto-a-reemplazar/g&#8217; «Fichero o directorio»</b></div>
<div></div>
<div><u>Ejemplo 1:</u> Cambiamos el texto Sysadmit por SYSADMIT del interior del fichero: test.txt</div>
<div></div>
<div>[root@LINUX1 test]# <b>cat test.txt</b><br />
Sysadmit1<br />
1Sysadmit<br />
90Sysadmit82<br />
HSysadmitH21</div>
<div>[root@LINUX1 test]# <b>sed -i &#8216;s/Sysadmit/SYSADMIT/g&#8217; test.txt</b></div>
<div>[root@LINUX1 test]# <b>cat test.txt</b><br />
SYSADMIT1<br />
1SYSADMIT<br />
90SYSADMIT82<br />
HSYSADMITH21</div>
<div><u>Ejemplo 2:</u> Cambiamos el texto SYSADMIT por &#8211;SYSADMIT&#8211; en todos los ficheros *.txt a partir de la ruta /test/ de forma recursiva.</div>
<div></div>
<div>Para ello utilizaremos los siguientes comandos:</div>
<div></div>
<div>find: Nos realizará una búsqueda de todos los ficheros según el patrón definido.</div>
<div>xargs: Ejecutará un comando (en este caso sed) para cada resultado generado por el comando find.<br />
| : Pipe o tubería, en este caso la salida de find corresponderá a la entrada de sed.</div>
<div>sed: Realizará el «buscar-reemplazar».</div>
<div></div>
<p>[root@LINUX1 test]# <b>pwd</b><br />
/test</p>
<p>[root@LINUX1 test]# <b>du -ah</b><br />
4.0K    ./new/test.txt<br />
8.0K    ./new<br />
4.0K    ./test.txt<br />
16K     .</p>
<p>[root@LINUX1 test]# <b>cat ./new/test.txt</b><br />
SYSADMIT1<br />
1SYSADMIT<br />
90SYSADMIT82<br />
HSYSADMITH21</p>
<p>[root@LINUX1 test]# <b>cat ./test.txt</b><br />
SYSADMIT1<br />
1SYSADMIT<br />
90SYSADMIT82<br />
HSYSADMITH21</p>
<p>[root@LINUX1 test]# <b>find /test/ -name «*.txt» -print | xargs sed -i «s/SYSADMIT/&#8211;SYSADMIT&#8211;/g»</b></p>
<p>[root@LINUX1 test]# <b>cat ./new/test.txt</b><br />
&#8211;SYSADMIT&#8211;1<br />
1&#8211;SYSADMIT&#8211;<br />
90&#8211;SYSADMIT&#8211;82<br />
H&#8211;SYSADMIT&#8211;H21</p>
<p>[root@LINUX1 test]# <b>cat ./test.txt</b><br />
&#8211;SYSADMIT&#8211;1<br />
1&#8211;SYSADMIT&#8211;<br />
90&#8211;SYSADMIT&#8211;82<br />
H&#8211;SYSADMIT&#8211;H21</p>
<p><u>Ejemplo 3:</u> Cambiamos una URL por otra del interior de un fichero de texto (test.txt).</p>
<p>El problema de las URLs es que contienen el carácter: «/».</p>
<p>El carácter «/», sed lo utiliza para definir el texto original y el texto a reemplazar.</p>
<p>En el siguiente ejemplo, reemplazaremos la URL:</p>
<p>http://sysadmit.com</p>
<p>por:</p>
<p>http://www.sysadmit.com/p/faq-libros.html</p>
<p>dentro del fichero: test.txt</p>
<p>Para ello, utilizaremos el caracter: «%»</p>
<p>[root@LINUX1 test]# <b>cat test.txt</b><br />
http://sysadmit.com</p>
<p>[root@LINUX1 test]# <b>sed -i «s%http://sysadmit.com%http://www.sysadmit.com/p/faq-libros.html%g» «test.txt»</b></p>
<p>[root@LINUX1 test]# <b>cat test.txt</b><br />
http://www.sysadmit.com/p/faq-libros.html</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/linux-reemplazar-texto-archivos-sed/">Linux: Reemplazar texto en archivos con sed</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">343</post-id>	</item>
		<item>
		<title>Como hacer un Acordeón con HTML, CSS y Javascript (Jquery)</title>
		<link>https://agcapa.es/acordeon-html-css-javascript-jquery/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 20 Oct 2016 06:44:17 +0000</pubDate>
				<category><![CDATA[varios]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=337</guid>

					<description><![CDATA[<p>En previos artículos, casi siempre hemos utilizado librerías de terceros para implementar diversos elementos de nuestra web. Esta vez lo implementaremos nosotros desde cero. Se trata de un elemento muy usual en las web, donde al pulsar en un determinado sitio, barra, botón, etc, se expande más información relacionada que previamente estaba oculta, lo que&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/acordeon-html-css-javascript-jquery/">Como hacer un Acordeón con HTML, CSS y Javascript (Jquery)</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>En previos artículos, casi siempre hemos utilizado librerías de terceros para implementar diversos elementos de nuestra web. Esta vez lo implementaremos nosotros desde cero.</p>
<p>Se trata de un elemento muy usual en las web, donde al pulsar en un determinado sitio, barra, botón, etc, se expande más información relacionada que previamente estaba oculta, lo que se conoce como <strong><em>estilo acordeón</em></strong>. Muy parecido a lo que hace la librería Jquery UI y sus accordions <a href="https://jqueryui.com/accordion/" target="_blank" rel="noopener noreferrer">https://jqueryui.com/accordion/</a></p>
<p>Para implementar este interesante elemento utilizaremos la librería de javascript Jquery, html y css.</p>
<p>Este sería el resultado final:</p>
<div></div>
<p>Es muy sencillo de implementar. Sólo debemos saber lo básico de html, css, y un poco de las animaciones de jquery.</p>
<h2>Como hacer un Acordeón con HTML, CSS y Javascript (Jquery)</h2>
<p><strong>Codigo HTML:</strong></p>
<div id="crayon-580866cfa1baf470726277" class="crayon-syntax crayon-theme-familiar crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-toolbar" data-settings=" show">
<div class="crayon-tools">
<div class="crayon-button crayon-popup-button" title="Abrir el código en una nueva ventana"></div>
<p><span class="crayon-language">XHTML</span></div>
</div>
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">&lt;div id=»container-main»&gt;<br />
    &lt;h1&gt;Mejores Jugadores Liga BBVA&lt;/h1&gt;</p>
<p>    &lt;div class=»accordion-container»&gt;<br />
        &lt;a href=»#» class=»accordion-titulo»&gt;Messi&lt;span class=»toggle-icon»&gt;&lt;/span&gt;&lt;/a&gt;<br />
        &lt;div class=»accordion-content»&gt;<br />
            &lt;img src=»http://e0.365dm.com/15/05/660&#215;350/champions-league-barcelona-bayern-munich-soccer-messi_3299830.jpg?20150506214236&#8243; alt=»»/&gt;<br />
            &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>            Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;<br />
        &lt;/div&gt;<br />
    &lt;/div&gt;</p>
<p>    &lt;div class=»accordion-container»&gt;<br />
        &lt;a href=»#» class=»accordion-titulo»&gt;Cristiano&lt;span class=»toggle-icon»&gt;&lt;/span&gt;&lt;/a&gt;<br />
        &lt;div class=»accordion-content»&gt;<br />
            &lt;img src=»http://www.abc.es/Media/201301/10/cristiano-ronaldo&#8211;644&#215;362.jpg» alt=»»/&gt;<br />
            &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>            Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;<br />
        &lt;/div&gt;<br />
    &lt;/div&gt;<br />
&lt;/div&gt;</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-2">2</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-4">4</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-6">6</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-8">8</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-10">10</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-12">12</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-14">14</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-16">16</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-18">18</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-20">20</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1baf470726277-22">22</div>
<div class="crayon-num" data-line="crayon-580866cfa1baf470726277-23">23</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-580866cfa1baf470726277-1" class="crayon-line"><span class="crayon-r ">&lt;div </span><span class="crayon-e ">id</span><span class="crayon-o">=</span><span class="crayon-s ">«container-main»</span><span class="crayon-r ">&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-2" class="crayon-line crayon-striped-line"><span class="crayon-i ">    </span><span class="crayon-r ">&lt;h1&gt;</span><span class="crayon-i ">Mejores Jugadores Liga BBVA</span><span class="crayon-r ">&lt;/h1&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-3" class="crayon-line"></div>
<div id="crayon-580866cfa1baf470726277-4" class="crayon-line crayon-striped-line"><span class="crayon-i ">    </span><span class="crayon-r ">&lt;div </span><span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«accordion-container»</span><span class="crayon-r ">&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-5" class="crayon-line"><span class="crayon-i ">        </span><span class="crayon-r ">&lt;a </span><span class="crayon-e ">href</span><span class="crayon-o">=</span><span class="crayon-s ">«#»</span> <span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«accordion-titulo»</span><span class="crayon-r ">&gt;</span><span class="crayon-i ">Messi</span><span class="crayon-r ">&lt;span </span><span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«toggle-icon»</span><span class="crayon-r ">&gt;</span><span class="crayon-r ">&lt;/span&gt;</span><span class="crayon-r ">&lt;/a&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-6" class="crayon-line crayon-striped-line"><span class="crayon-i ">        </span><span class="crayon-r ">&lt;div </span><span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«accordion-content»</span><span class="crayon-r ">&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-7" class="crayon-line"><span class="crayon-i ">            </span><span class="crayon-r ">&lt;img </span><span class="crayon-e ">src</span><span class="crayon-o">=</span><span class="crayon-s ">«http://e0.365dm.com/15/05/660&#215;350/champions-league-barcelona-bayern-munich-soccer-messi_3299830.jpg?20150506214236»</span> <span class="crayon-e ">alt</span><span class="crayon-o">=</span><span class="crayon-s ">«»</span><span class="crayon-r ">/&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-8" class="crayon-line crayon-striped-line"><span class="crayon-i ">            </span><span class="crayon-r ">&lt;p&gt;</span><span class="crayon-i ">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</span></div>
<div id="crayon-580866cfa1baf470726277-9" class="crayon-line"></div>
<div id="crayon-580866cfa1baf470726277-10" class="crayon-line crayon-striped-line"><span class="crayon-i ">            Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span><span class="crayon-r ">&lt;/p&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-11" class="crayon-line"><span class="crayon-i ">        </span><span class="crayon-r ">&lt;/div&gt;</span><span class="crayon-i ">  </span></div>
<div id="crayon-580866cfa1baf470726277-12" class="crayon-line crayon-striped-line"><span class="crayon-i ">    </span><span class="crayon-r ">&lt;/div&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-13" class="crayon-line"><span class="crayon-i ">    </span></div>
<div id="crayon-580866cfa1baf470726277-14" class="crayon-line crayon-striped-line"><span class="crayon-i ">    </span><span class="crayon-r ">&lt;div </span><span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«accordion-container»</span><span class="crayon-r ">&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-15" class="crayon-line"><span class="crayon-i ">        </span><span class="crayon-r ">&lt;a </span><span class="crayon-e ">href</span><span class="crayon-o">=</span><span class="crayon-s ">«#»</span> <span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«accordion-titulo»</span><span class="crayon-r ">&gt;</span><span class="crayon-i ">Cristiano</span><span class="crayon-r ">&lt;span </span><span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«toggle-icon»</span><span class="crayon-r ">&gt;</span><span class="crayon-r ">&lt;/span&gt;</span><span class="crayon-r ">&lt;/a&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-16" class="crayon-line crayon-striped-line"><span class="crayon-i ">        </span><span class="crayon-r ">&lt;div </span><span class="crayon-e ">class</span><span class="crayon-o">=</span><span class="crayon-s ">«accordion-content»</span><span class="crayon-r ">&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-17" class="crayon-line"><span class="crayon-i ">            </span><span class="crayon-r ">&lt;img </span><span class="crayon-e ">src</span><span class="crayon-o">=</span><span class="crayon-s ">«http://www.abc.es/Media/201301/10/cristiano-ronaldo&#8211;644&#215;362.jpg»</span> <span class="crayon-e ">alt</span><span class="crayon-o">=</span><span class="crayon-s ">«»</span><span class="crayon-r ">/&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-18" class="crayon-line crayon-striped-line"><span class="crayon-i ">            </span><span class="crayon-r ">&lt;p&gt;</span><span class="crayon-i ">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</span></div>
<div id="crayon-580866cfa1baf470726277-19" class="crayon-line"></div>
<div id="crayon-580866cfa1baf470726277-20" class="crayon-line crayon-striped-line"><span class="crayon-i ">            Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span><span class="crayon-r ">&lt;/p&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-21" class="crayon-line"><span class="crayon-i ">        </span><span class="crayon-r ">&lt;/div&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-22" class="crayon-line crayon-striped-line"><span class="crayon-i ">    </span><span class="crayon-r ">&lt;/div&gt;</span></div>
<div id="crayon-580866cfa1baf470726277-23" class="crayon-line"><span class="crayon-r ">&lt;/div&gt;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><strong>Codigo CSS:</strong></p>
<div id="crayon-580866cfa1bc3655606047" class="crayon-syntax crayon-theme-familiar crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-toolbar" data-settings=" show">
<div class="crayon-tools">
<div class="crayon-button crayon-nums-button crayon-pressed" title="Mostrar/ocultar números de línea"></div>
<div class="crayon-button crayon-plain-button" title="Cambiar a texto plano"></div>
<div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"></div>
<div class="crayon-button crayon-copy-button" title="Copy"> <span class="crayon-language">CSS</span></div>
</div>
</div>
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">body{<br />
    background: #ecf0f1;<br />
}</p>
<p>#container-main{<br />
    margin:40px auto;<br />
    width:95%;<br />
    min-width:320px;<br />
    max-width:960px;<br />
}</p>
<p>#container-main h1{<br />
    font-size: 40px;<br />
    text-shadow:4px 4px 5px #16a085;<br />
}</p>
<p>.accordion-container {<br />
    width: 100%;<br />
    margin: 0 0 20px;<br />
    clear:both;<br />
}</p>
<p>.accordion-titulo {<br />
    position: relative;<br />
    display: block;<br />
    padding: 20px;<br />
    font-size: 24px;<br />
    font-weight: 300;<br />
    background: #2c3e50;<br />
    color: #fff;<br />
    text-decoration: none;<br />
}<br />
.accordion-titulo.open {<br />
    background: #16a085;<br />
    color: #fff;<br />
}<br />
.accordion-titulo:hover {<br />
    background: #1abc9c;<br />
}</p>
<p>.accordion-titulo span.toggle-icon:before {<br />
    content:»+»;<br />
}</p>
<p>.accordion-titulo.open span.toggle-icon:before {<br />
    content:»-«;<br />
}</p>
<p>.accordion-titulo span.toggle-icon {<br />
    position: absolute;<br />
    top: 10px;<br />
    right: 20px;<br />
    font-size: 38px;<br />
    font-weight:bold;<br />
}</p>
<p>.accordion-content {<br />
    display: none;<br />
    padding: 20px;<br />
    overflow: auto;<br />
}</p>
<p>.accordion-content p{<br />
    margin:0;<br />
}</p>
<p>.accordion-content img {<br />
    display: block;<br />
    float: left;<br />
    margin: 0 15px 10px 0;<br />
    width: 50%;<br />
    height: auto;<br />
}</p>
<p>@media (max-width: 767px) {<br />
    .accordion-content {<br />
        padding: 10px 0;<br />
    }<br />
}</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-2">2</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-4">4</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-6">6</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-8">8</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-10">10</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-12">12</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-14">14</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-16">16</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-18">18</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-20">20</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-22">22</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-23">23</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-24">24</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-25">25</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-26">26</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-27">27</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-28">28</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-29">29</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-30">30</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-31">31</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-32">32</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-33">33</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-34">34</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-35">35</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-36">36</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-37">37</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-38">38</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-39">39</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-40">40</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-41">41</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-42">42</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-43">43</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-44">44</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-45">45</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-46">46</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-47">47</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-48">48</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-49">49</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-50">50</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-51">51</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-52">52</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-53">53</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-54">54</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-55">55</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-56">56</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-57">57</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-58">58</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-59">59</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-60">60</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-61">61</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-62">62</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-63">63</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-64">64</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-65">65</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-66">66</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-67">67</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-68">68</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-69">69</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-70">70</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-71">71</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-72">72</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-73">73</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-74">74</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-75">75</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-76">76</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-77">77</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-78">78</div>
<div class="crayon-num" data-line="crayon-580866cfa1bc3655606047-79">79</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bc3655606047-80">80</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-580866cfa1bc3655606047-1" class="crayon-line"><span class="crayon-k ">body</span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-2" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">background</span><span class="crayon-sy">:</span> <span class="crayon-i ">#ecf0f1</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-3" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-4" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-5" class="crayon-line"><span class="crayon-k ">#container-main</span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-6" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">margin</span><span class="crayon-sy">:</span><span class="crayon-i ">40px</span> <span class="crayon-i ">auto</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-7" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">width</span><span class="crayon-sy">:</span><span class="crayon-i ">95%</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-8" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">min-width</span><span class="crayon-sy">:</span><span class="crayon-i ">320px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-9" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">max-width</span><span class="crayon-sy">:</span><span class="crayon-i ">960px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-10" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-11" class="crayon-line"></div>
<div id="crayon-580866cfa1bc3655606047-12" class="crayon-line crayon-striped-line"><span class="crayon-k ">#container-main h1</span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-13" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">font-size</span><span class="crayon-sy">:</span> <span class="crayon-i ">40px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-14" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">text-shadow</span><span class="crayon-sy">:</span><span class="crayon-i ">4px</span> <span class="crayon-i ">4px</span> <span class="crayon-i ">5px</span> <span class="crayon-i ">#16a085</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-15" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-16" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-17" class="crayon-line"><span class="crayon-k ">.accordion-container </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-18" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">width</span><span class="crayon-sy">:</span> <span class="crayon-i ">100%</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-19" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">margin</span><span class="crayon-sy">:</span> <span class="crayon-i ">0</span> <span class="crayon-i ">0</span> <span class="crayon-i ">20px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-20" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">clear</span><span class="crayon-sy">:</span><span class="crayon-i ">both</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-21" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-22" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-23" class="crayon-line"><span class="crayon-k ">.accordion-titulo </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-24" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">position</span><span class="crayon-sy">:</span> <span class="crayon-i ">relative</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-25" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">display</span><span class="crayon-sy">:</span> <span class="crayon-i ">block</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-26" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">padding</span><span class="crayon-sy">:</span> <span class="crayon-i ">20px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-27" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">font-size</span><span class="crayon-sy">:</span> <span class="crayon-i ">24px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-28" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">font-weight</span><span class="crayon-sy">:</span> <span class="crayon-i ">300</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-29" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">background</span><span class="crayon-sy">:</span> <span class="crayon-i ">#2c3e50</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-30" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">color</span><span class="crayon-sy">:</span> <span class="crayon-i ">#fff</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-31" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">text-decoration</span><span class="crayon-sy">:</span> <span class="crayon-i ">none</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-32" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-33" class="crayon-line"><span class="crayon-k ">.accordion-titulo.open </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-34" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">background</span><span class="crayon-sy">:</span> <span class="crayon-i ">#16a085</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-35" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">color</span><span class="crayon-sy">:</span> <span class="crayon-i ">#fff</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-36" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-37" class="crayon-line"><span class="crayon-k ">.accordion-titulo:hover </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-38" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">background</span><span class="crayon-sy">:</span> <span class="crayon-i ">#1abc9c</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-39" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-40" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-41" class="crayon-line"><span class="crayon-k ">.accordion-titulo span.toggle-icon:before </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-42" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">content</span><span class="crayon-sy">:</span><span class="crayon-s">«+»</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-43" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-44" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-45" class="crayon-line"><span class="crayon-k ">.accordion-titulo.open span.toggle-icon:before </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-46" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">content</span><span class="crayon-sy">:</span><span class="crayon-s">«-«</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-47" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-48" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-49" class="crayon-line"><span class="crayon-k ">.accordion-titulo span.toggle-icon </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-50" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">position</span><span class="crayon-sy">:</span> <span class="crayon-i ">absolute</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-51" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">top</span><span class="crayon-sy">:</span> <span class="crayon-i ">10px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-52" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">right</span><span class="crayon-sy">:</span> <span class="crayon-i ">20px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-53" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">font-size</span><span class="crayon-sy">:</span> <span class="crayon-i ">38px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-54" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">font-weight</span><span class="crayon-sy">:</span><span class="crayon-i ">bold</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-55" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-56" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-57" class="crayon-line"><span class="crayon-k ">.accordion-content </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-58" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">display</span><span class="crayon-sy">:</span> <span class="crayon-i ">none</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-59" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">padding</span><span class="crayon-sy">:</span> <span class="crayon-i ">20px</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-60" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">overflow</span><span class="crayon-sy">:</span> <span class="crayon-i ">auto</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-61" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-62" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-63" class="crayon-line"><span class="crayon-k ">.accordion-content p</span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-64" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">margin</span><span class="crayon-sy">:</span><span class="crayon-i ">0</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-65" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-66" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-67" class="crayon-line"><span class="crayon-k ">.accordion-content img </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-68" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">display</span><span class="crayon-sy">:</span> <span class="crayon-i ">block</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-69" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">float</span><span class="crayon-sy">:</span> <span class="crayon-i ">left</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-70" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">margin</span><span class="crayon-sy">:</span> <span class="crayon-i ">0</span> <span class="crayon-i ">15px</span> <span class="crayon-i ">10px</span> <span class="crayon-i ">0</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-71" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e ">width</span><span class="crayon-sy">:</span> <span class="crayon-i ">50%</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-72" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e ">height</span><span class="crayon-sy">:</span> <span class="crayon-i ">auto</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-73" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-74" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bc3655606047-75" class="crayon-line"></div>
<div id="crayon-580866cfa1bc3655606047-76" class="crayon-line crayon-striped-line"><span class="crayon-n">@media (max-width: 767px) </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-77" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-k ">.accordion-content </span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bc3655606047-78" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-e ">padding</span><span class="crayon-sy">:</span> <span class="crayon-i ">10px</span> <span class="crayon-i ">0</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bc3655606047-79" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bc3655606047-80" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Como vemos en el código HTML, tenemos dos contenedores <code>&lt;div&gt;</code> con clase <em><code>accordion-container</code>,  </em>que contendrán toda la información de ese ítem, característica, sección, etc. En concreto tenemos un elemento &lt;a&gt; que representa el título, y es la barra horizontal con el nombre del jugador, y otro elemento <code>div</code> con clase <code><em>accordion-content </em></code>que en principio está oculta y que contiene una imagen del jugador y texto.</p>
<p>En este ejemplo se trata de un listado con dos jugadores, que al hacer click en cada uno de ellos se expande información relacionada. Si nos fijamos, también se cambia el icono de la derecha de la barra con “+” y “-“según este cerrado o abierto, esto lo logramos con código css.</p>
<p>Por último, queda lo más importante, implementar mediante jquery la acción de hacer click en la barra de título y como consecuencia se visualice u oculte la información según se encuentre visible o no el contenedor de información <code>.<em>accordion-content”</em></code></p>
<p><strong>Codigo Jquery:</strong></p>
<div id="crayon-580866cfa1bcf240224661" class="crayon-syntax crayon-theme-familiar crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover">
<div class="crayon-toolbar" data-settings=" show"></div>
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" readonly="readonly" wrap="soft" data-settings="dblclick">$(«.accordion-titulo»).click(function(){</p>
<p>   var contenido=$(this).next(«.accordion-content»);</p>
<p>   if(contenido.css(«display»)==»none»){ //open<br />
      contenido.slideDown(250);<br />
      $(this).addClass(«open»);<br />
   }<br />
   else{ //close<br />
      contenido.slideUp(250);<br />
      $(this).removeClass(«open»);<br />
  }</p>
<p>});</textarea></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-2">2</div>
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-4">4</div>
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-6">6</div>
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-8">8</div>
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-10">10</div>
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-12">12</div>
<div class="crayon-num" data-line="crayon-580866cfa1bcf240224661-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-580866cfa1bcf240224661-14">14</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-580866cfa1bcf240224661-1" class="crayon-line"><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-s">«.accordion-titulo»</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">click</span><span class="crayon-sy">(</span><span class="crayon-t">function</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div>
<div id="crayon-580866cfa1bcf240224661-2" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bcf240224661-3" class="crayon-line"><span class="crayon-h">   </span><span class="crayon-t">var</span> <span class="crayon-v">contenido</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">this</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">next</span><span class="crayon-sy">(</span><span class="crayon-s">«.accordion-content»</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bcf240224661-4" class="crayon-line crayon-striped-line"></div>
<div id="crayon-580866cfa1bcf240224661-5" class="crayon-line"><span class="crayon-h">   </span><span class="crayon-st">if</span><span class="crayon-sy">(</span><span class="crayon-v">contenido</span><span class="crayon-sy">.</span><span class="crayon-e">css</span><span class="crayon-sy">(</span><span class="crayon-s">«display»</span><span class="crayon-sy">)</span><span class="crayon-o">==</span><span class="crayon-s">«none»</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span> <span class="crayon-c">//open </span></div>
<div id="crayon-580866cfa1bcf240224661-6" class="crayon-line crayon-striped-line"><span class="crayon-h">      </span><span class="crayon-v">contenido</span><span class="crayon-sy">.</span><span class="crayon-e">slideDown</span><span class="crayon-sy">(</span><span class="crayon-cn">250</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bcf240224661-7" class="crayon-line"><span class="crayon-h">      </span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">this</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">addClass</span><span class="crayon-sy">(</span><span class="crayon-s">«open»</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bcf240224661-8" class="crayon-line crayon-striped-line"><span class="crayon-h">   </span><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bcf240224661-9" class="crayon-line"><span class="crayon-h">   </span><span class="crayon-st">else</span><span class="crayon-sy">{</span> <span class="crayon-c">//close </span></div>
<div id="crayon-580866cfa1bcf240224661-10" class="crayon-line crayon-striped-line"><span class="crayon-h">      </span><span class="crayon-v">contenido</span><span class="crayon-sy">.</span><span class="crayon-e">slideUp</span><span class="crayon-sy">(</span><span class="crayon-cn">250</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bcf240224661-11" class="crayon-line"><span class="crayon-h">      </span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">this</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">removeClass</span><span class="crayon-sy">(</span><span class="crayon-s">«open»</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
<div id="crayon-580866cfa1bcf240224661-12" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-sy">}</span></div>
<div id="crayon-580866cfa1bcf240224661-13" class="crayon-line"></div>
<div id="crayon-580866cfa1bcf240224661-14" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>En primer lugar guardamos en la variable “contenido” el objeto <code>div</code> que contiene la información, en este caso de uno de los jugadores, según donde hayamos pulsado, a través de la función <code>next()</code>, que coge el primer elemento hermano con clase <code>.accordion-content</code></p>
<p>Seguidamente comprobamos si está oculto o no, y dependiendo del caso mostramos u ocultamos a través de dos funciones de jquery, con el objetivo de que el cambio no se produzca de forma brusca, sino animada.</p>
<p><code>slideDown()</code> =&gt; Muestra el contenido de forma animada (slide).</p>
<p><code>slideUp()</code> =&gt; Esconde el contenido de forma animada (slide).</p>
<p>Así de fácil es implementar nuestra propio estilo acordeón sin tener que recurrir a librerías externas como Jquery UI.</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/acordeon-html-css-javascript-jquery/">Como hacer un Acordeón con HTML, CSS y Javascript (Jquery)</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">337</post-id>	</item>
		<item>
		<title>Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?</title>
		<link>https://agcapa.es/many-email-messages-are-sent-from-php-scripts-on-the-server-how-can-i-find-the-domains-on-which-these-scripts-are-running-if-i-am-using-postfix/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Feb 2016 15:19:52 +0000</pubDate>
				<category><![CDATA[Postfix]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=319</guid>

					<description><![CDATA[<p>Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix? Article ID: 114845, created on Sep 26, 2012, last review on Dic 18, 2015 APLICABLE A: Plesk for Linux/Unix Plesk Automation 11.5 Symptoms Many email messages are&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/many-email-messages-are-sent-from-php-scripts-on-the-server-how-can-i-find-the-domains-on-which-these-scripts-are-running-if-i-am-using-postfix/">Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="article-container">
<h2 class="title">Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?</h2>
<p class="text-muted small">Article ID: <a href="http://kb.odin.com/en/114845">114845</a>, created on Sep 26, 2012, last review on Dic 18, 2015</p>
<div></div>
<div id="ArticleAppliesTo-22128"><strong>APLICABLE A:</strong></p>
<div class="articleApplies">
<ul>
<li>Plesk for Linux/Unix</li>
<li>Plesk Automation 11.5</li>
</ul>
</div>
</div>
<div class="article-internal-flag"></div>
<div id="article-content">
<h2>Symptoms</h2>
<p>Many email messages are being sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?</p>
<h2>Resolution</h2>
<p><strong>Note:</strong> This article is for Postfix. If you are using the Qmail mail server, see article<br />
<a title="1711" href="http://kb.odin.com/1711">1711</a>: Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running?</p>
<p>There is a way to determine from which folder the PHP script that sends mail was run.</p>
<p><strong>Note:</strong> Depending on your operating system and Plesk version, the paths can differ slightly from those listed below.</p>
<ol>
<li>Create a <code>/usr/sbin/sendmail.postfix-wrapper</code> script with the following content:
<p>Create a file and open it for editing:</p>
<pre><code>#touch /usr/sbin/sendmail.postfix-wrapper
#vi /usr/sbin/sendmail.postfix-wrapper
</code></pre>
<p>Add the following content:</p>
<pre><code>#!/bin/sh
(echo X-Additional-Header: $PWD ;cat) | tee -a /var/tmp/mail.send|/usr/sbin/sendmail.postfix-bin "$@"
</code></pre>
<p>Note that this should be two lines, including <strong>#!/bin/sh</strong>.</li>
<li>Create a log file, <code>/var/tmp/mail.send</code>, and grant it <strong>a+rw</strong> rights. Make the wrapper executable, rename the old <code>sendmail</code>, and link it to the new wrapper. Then run the commands below:
<pre><code>~# touch /var/tmp/mail.send
~# chmod a+rw /var/tmp/mail.send
~# chmod a+x /usr/sbin/sendmail.postfix-wrapper
~# mv /usr/sbin/sendmail.postfix /usr/sbin/sendmail.postfix-bin
~# ln -s /usr/sbin/sendmail.postfix-wrapper /usr/sbin/sendmail.postfix
</code></pre>
</li>
<li>Wait for an hour and change the sendmail back:
<pre><code>~# rm -f /usr/sbin/sendmail.postfix
~# mv /usr/sbin/sendmail.postfix-bin /usr/sbin/sendmail.postfix
</code></pre>
</li>
</ol>
<p>Check the <code>/var/tmp/mail.send</code> file. There should be lines starting with <strong>X-Additional-Header:</strong> pointing to the domain folders where the scripts that sent the mail are located.</p>
<p>You can see all the folders from which mail PHP scripts were run with the following command:</p>
<pre><code>    ~# grep X-Additional /var/tmp/mail.send | grep `cat /etc/psa/psa.conf | grep HTTPD_VHOSTS_D | sed -e 's/HTTPD_VHOSTS_D//' `
</code></pre>
<p><span style="color: red;"> <strong>NOTE:</strong> If you see no output from the above command, it means no mail was sent using the PHP mail() function from the Plesk virtual hosts directory. </span></p>
<p>Usually, that means one of the mail accounts has been compromised. Check the login attempt count:</p>
<pre><code># zgrep -c 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog*
/usr/local/psa/var/log/maillog:221000
/usr/local/psa/var/log/maillog.processed:362327
/usr/local/psa/var/log/maillog.processed.1.gz:308956
</code></pre>
<p>If you see an unusually high number of login attempts, it is very likely accounts were compromised. You can try identifying these accounts in the following way:</p>
<pre><code># zgrep 'sasl_method=LOGIN' /usr/local/psa/var/log/maillog* | awk '{print $9}' | sort | uniq -c | sort -nr | head
891574 sasl_username=admin@example.com
</code></pre>
<p>To stop spam from being sent, change passwords for the compromised accounts and restart the Postfix service.</p>
<p>For <code>Plesk 12</code> also visit <a href="http://download1.parallels.com/Plesk/Doc/en-US/online/plesk-administrator-guide/index.htm?fileName=71349.htm">Administrator&#8217;s Guide page</a></p>
</div>
</div>
<div class="kcs-customers-words">
<h2>Palabras de búsqueda:</h2>
<h1 class="customer-word onclick-search-with-content">Deferred E-Mails In Queue Not Delivering</h1>
<h1 class="customer-word onclick-search-with-content">wrapper</h1>
<h1 class="customer-word onclick-search-with-content">Spam on PPA Node</h1>
<h1 class="customer-word onclick-search-with-content">Mail Spamming</h1>
<h1 class="customer-word onclick-search-with-content">spam from external domain</h1>
<h1 class="customer-word onclick-search-with-content">11</h1>
<h1 class="customer-word onclick-search-with-content">pleskfatalexception</h1>
<h1 class="customer-word onclick-search-with-content">sending email name of someone else</h1>
<h1 class="customer-word onclick-search-with-content">SPam</h1>
<h1 class="customer-word onclick-search-with-content">mail</h1>
<h1 class="customer-word onclick-search-with-content">Script can be send mail but the option was disable on hosting plan</h1>
<h1 class="customer-word onclick-search-with-content">Suspicious E-Mail Headers In Mail Queue</h1>
<h1 class="customer-word onclick-search-with-content">Hello, Since last update to plesk12 have many problems of spam received as sent. We have verified that the settings wrapper in plesk 11.5 is not equal in plesk 12. I followed the steps in the kb http://kb.sp.parallels.com/1711 but not correct for plesk12. Could you install wrapper to ples12, please? Thanks.</h1>
<h1 class="customer-word onclick-search-with-content">php ini plesk</h1>
<h1 class="customer-word onclick-search-with-content">apache</h1>
<h1 class="customer-word onclick-search-with-content">spam</h1>
<h1 class="customer-word onclick-search-with-content">spam issue</h1>
<h1 class="customer-word onclick-search-with-content">mail queue spam</h1>
<h1 class="customer-word onclick-search-with-content">mail queue</h1>
<h1 class="customer-word onclick-search-with-content">error wrapper</h1>
<h1 class="customer-word onclick-search-with-content">mails rdns do not match to SMTP banner</h1>
<h1 class="customer-word onclick-search-with-content">Nonostante sia stato attivata la&#8217;utentificazione smtp, da giorni in coda mail ci sono svariate mail inviate da WORLDST-UQ3K9Q0</h1>
<h1 class="customer-word onclick-search-with-content">thousands of spam for an email address that doesn&#8217;t exist</h1>
<h1 class="customer-word onclick-search-with-content">postfix/smtp: certificate verification failed for gmail Equifax Secure Certificate Authority</h1>
<h1 class="customer-word onclick-search-with-content">outgoing spam</h1>
<h1 class="customer-word onclick-search-with-content">Spam mails getting sent</h1>
<h1 class="customer-word onclick-search-with-content">Spam being sent to our SMTP</h1>
<h1 class="customer-word onclick-search-with-content">plesk server mail not nbeing sent</h1>
<h1 class="customer-word onclick-search-with-content">DNS Flood Analysis</h1>
<h1 class="customer-word onclick-search-with-content">sql</h1>
<h1 class="customer-word onclick-search-with-content">spammer</h1>
<h1 class="customer-word onclick-search-with-content">plesk panel running slow</h1>
<h1 class="customer-word onclick-search-with-content">Mail Spmming</h1>
<h1 class="customer-word onclick-search-with-content">script</h1>
</div>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/many-email-messages-are-sent-from-php-scripts-on-the-server-how-can-i-find-the-domains-on-which-these-scripts-are-running-if-i-am-using-postfix/">Many email messages are sent from PHP scripts on the server. How can I find the domains on which these scripts are running if I am using Postfix?</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">319</post-id>	</item>
		<item>
		<title>Aumentar la swap en GNU/Linux</title>
		<link>https://agcapa.es/aumentar-la-swap-en-gnulinux/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 13 Oct 2015 15:29:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=314</guid>

					<description><![CDATA[<p>En algunas ocasiones es necesario que nuestro GNU/Linux tenga mas swap, ya sea porque tiene mas aplicaciones o lo que fuese, entonces lo que podemos hacer es aumentar el tamaño de la swap, antes de empezar comprobamos cuanto de swap tenemos con el siguiente comando: # grep SwapTotal /proc/meminfo SwapTotal:     2096440 kB Ahora empezemos a&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/aumentar-la-swap-en-gnulinux/">Aumentar la swap en GNU/Linux</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>En algunas ocasiones es necesario que nuestro GNU/Linux tenga mas swap, ya sea porque tiene mas aplicaciones o lo que fuese, entonces lo que podemos hacer es aumentar el tamaño de la swap, antes de empezar comprobamos cuanto de swap tenemos con el siguiente comando:</p>
<p># grep SwapTotal /proc/meminfo<br />
SwapTotal:     2096440 kB</p>
<p>Ahora empezemos a asiganrle mas swap, para ello creamos un archivo con el comnado dd, dicho archivo actuara como swap, claro seria recomendable tener una particion, pero bueno asumimos que ya no tenemos mas particiones.</p>
<p># dd if=/dev/zero of=/mnt/swap_extra bs=1M count=2048<br />
2048+0 records in<br />
2048+0 records out<br />
2147483648 bytes (2,1 GB) copied, 25,3026 seconds, 84,9 MB/s</p>
<p>Donde:</p>
<ul>
<li>count -&gt; define el tamaño del fichero</li>
<li>bs -&gt; define el tamaño del bloque</li>
</ul>
<p>Hemos creado un archivo de 2GB dentro del directorio /mnt, ahora modificamos los permisos</p>
<p># chmod 600 /mnt/swap_extra</p>
<p>Formateamos el fichero swap_extra para que actue como swap</p>
<p># mkswap /mnt/swap_extra<br />
Configurando espacio de intercambio versión 1, tamaño = 2147479 kB</p>
<p>Ahora solo nos queda activarlo</p>
<p># swapon /mnt/swap_extra</p>
<p>SI quisiremoas desactivarlo simplemente ejecutamos</p>
<p># swapoff /mnt/swap_extra</p>
<p>Ahora debemos editar el fstab para que cuando la maquina se inicie carge la swap adicional, para ello agregamos  al final del archivo lo siguiente:</p>
<p>/mnt/swap_extra         none                    swap    sw              0 0</p>
<p>Con esto ya tenemos 2GB mas de swap … y lo verificamos con el comando</p>
<p>siguiente</p>
<p># grep SwapTotal /proc/meminfo<br />
SwapTotal:     4193584 kB</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/aumentar-la-swap-en-gnulinux/">Aumentar la swap en GNU/Linux</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">314</post-id>	</item>
		<item>
		<title>Linux: Listar procesos por % cpu o uso de memoria</title>
		<link>https://agcapa.es/linux-listar-procesos-por-cpu-o-uso-de-memoria/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 24 Aug 2015 08:10:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://agcapa.es/?p=311</guid>

					<description><![CDATA[<p>Con estas dos secuencias de comandos podréis ver de un modo rápido y sencillo los procesos ordenados por uso (%) de CPU y memoria. Por supuesto no es necesario (ni práctico) escribir el comando completo en la shell cada vez que lo queráis ejecutar, os recomiendo crear un alias específico para cada uno de ellos.&#8230;</p>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/linux-listar-procesos-por-cpu-o-uso-de-memoria/">Linux: Listar procesos por % cpu o uso de memoria</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Con estas dos secuencias de comandos podréis ver de un modo rápido y sencillo los procesos ordenados por uso (%) de CPU y memoria. Por supuesto no es necesario (ni práctico) escribir el comando completo en la shell cada vez que lo queráis ejecutar, os recomiendo <a title="alias en Linux" href="http://rm-rf.es/como-crear-atajos-de-teclados-en-linux-bashrc/" target="_blank" rel="noopener noreferrer">crear un alias</a> específico para cada uno de ellos.</p>
<p>Listar procesos por % cpu, veréis que eliminamos aquellos que usan 0.0 de CPU con <a title="Comando sed" href="http://rm-rf.es/sobre/sed/" target="_blank" rel="noopener noreferrer">sed</a> (sed ‘/^ 0.0 /d):</p>
<pre>ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'</pre>
<p>Ejemplo:</p>
<pre>$ ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'
%CPU CPU  NI S     TIME COMMAND
0.2   -   0 S 00:00:24 metacity
0.2   -   0 S 00:00:00 /usr/bin/python /usr/bin/terminator
0.2   -   0 S 00:00:28 gnome-screensaver
0.2   -   0 S 00:00:31 gnome-panel
4.6   -   0 S 00:08:23 /usr/bin/pulseaudio --start
7.4   -   0 S 00:13:24 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
7.5   -   0 S 00:04:31 rhythmbox
14.4   -   0 S 00:08:50 /usr/lib/firefox-3.5.4/firefox-3.5</pre>
<p>Listar procesos por uso de memoria (en KB):</p>
<pre>ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS</pre>
<p>Ejemplo (reducido):</p>
<pre>$ ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
23964 gnome-panel
26168 nautilus
26256 /usr/bin/python /usr/bin/terminator
58340 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
58728 rhythmbox
128736 /usr/lib/firefox-3.5.4/firefox-3.5
</pre>
<p>La entrada <a rel="nofollow" href="https://agcapa.es/linux-listar-procesos-por-cpu-o-uso-de-memoria/">Linux: Listar procesos por % cpu o uso de memoria</a> se publicó primero en <a rel="nofollow" href="https://agcapa.es">Programador</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">311</post-id>	</item>
	</channel>
</rss>
