lunes, 22 de agosto de 2011

Cómo dividir el contenido de WordPress en dos, tres o más columnas


Con el uso de la función “preg_split” de PHP podemos dividir el contenido de WordPress con el uso de la etiqueta mas y publicarlo separado, como la muestra de abajo, pero hay un problema con esta método, solo podemos dividir el contenido en 2 partes, sólo podemos utilizar la etiqueta más una vez, sólo divide el contenido en 2 partes separadas o columnas.

function split_content() {
global $more;
$more = true;
$content = preg_split('/<\/span>/i', get_the_content('more'));
for($c = 0, $csize = count($content); $c < $csize; $c++) { $content[$c] = apply_filters('the_content', $content[$c]); } return $content; } Vamos a ver lo que pasa por la función, WordPress publica automáticamente la primera etiqueta más como una etiqueta span, la segunda o la tercera las publicara como comentario (<— more —>).
aquí es cuando produce el problema, “preg_split”está buscando el contenido por un etiqueta de span con un id variable, sólo una etiqueta span con esta descripción existe, el resto de las etiqueta más no son etiquetas span, la función sólo puede ver la primera etiqueta más y la única etiqueta span.

Para obtener el contenido separado del resto de las etiquetas más hay que introducir otra función PHP “explode”, es una función muy similar, la única diferencia es “explode” busca para un string, “preg_split” utiliza expresiones regulares para buscar.
la idea es utilizar “preg_split” para coger la etiqueta span (primera etiqueta más) y la “explode” a tomar el comentario de etiquetas más (<— more —>).
en primer “preg_split” pone el contenido en dos matrices, primera matriz es el contenido hasta la primera etiqueta más, segunda matriz es todo el resto del contenido a partir de la primera etiqueta más, ahora “explode” pone la segunda matriz (resto del contenido) en nuevas matrices separados por el comentario de etiquetas más (<— more —>).
function explode_content($newcontent) {
$content = explode('
', $newcontent);
$content2 = explode('
', $newcontent);
if(count($content) <= count($content2)) { $content = $content2 ; } for($c = 0, $csize = count($content); $c < $csize; $c++) { $content[$c] = apply_filters($newcontent, $content[$c]); $remtag[$c] = closeTags($content[$c]); } return $remtag; } Hay estas posibilidades donde puedes colocar la etiqueta más
Blahblah<—more—>
<—more—>

Blahblah<—more—>

, (h2,h3,…) (no use etiquetas más inmediatamente después de las etiquetas de titulos, haz un salto de línea)

Otro Problema. Las etiquetas “más” secundarias en WordPress se publican como comentarios dentro del código y estos pueden contener etiquetas (como
) dentro. Usando la función “exolode” podemos tomar el contenido entre las etiquetas “más” pero las etiquetas qué se cierran después de una sección quedarán abiertas, causando un error de validación WC3 y en este caso concreto un salto de linea extra.

De forma predeterminada WordPress ha declaado la primera etiqueta más (la etiqueta span) a cualquier tipo de relación con cualquier etiqueta html, pero no la segunda ni la tercera, una vez después de la separación tenemos que utilizar la función “preg_match_all” para determinar los cierres de las etiquetas de que falta, después tenemos que insertar la finalización de las etiquetas que faltan.
function closeTags($html) {
preg_match_all("/<\/?(\w+)((\s+(\w|\w[\w-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/i",$html,$result);
$tags = &$result[0]; $closeCnt = 0;
for ($i=count($tags)-1;$i>=0;$i--) {
if ($tags[$i]{strlen($tags[$i])-2}!='/') {
if ($tags[$i]{1}!='/') {
if (!$closeCnt) $html .= ''; else $closeCnt--;
} else $closeCnt++;
}}
return $html;
}

Podría preguntarse cómo llamar a los contenidos por separado en una página, utilizamos “array_shift” para imprimir y cambiar la matriz del contenido, en el ejemplo siguiente muestro cómo obtener cuatro columnas en una fila con el uso de etiqueta mas.









Así que ahora tenemos nuestro contenido separado en dos, tres o más columnas utilizando la etiqueta más, sin falta de cierre de las etiquetas HTML, esta funcion ofrece ventaja completa de CMS de WordPress:

Permitir cantidad infinita de separación contenido de WordPress usando un editor
No hay falta de cierre de las etiquetas HTML junto con la separación
Ahorro de memoria y espacio al no tener que cargar el panel editor de extra o cualquier otro métodos trenzado o plugin
Funciona tanto para las entradas y las páginas de WordPress

Esta gran capacidad de CMS aporta una gran cantidad de ideas a los diseñadores de WordPress en términos de gestión de contenidos WordPress, puede hacer plantillas de página que con distintas configuraciones de columnas, y todavía se puede utilizar la etiquetas más con el uso por defecto, para una demostración en vivo se pueden ver diferentes páginas en mi pagina web y hacerte una idea de lo que puedes hacer de este código.

Comenta, comparte tu opinión, dime si te funciona, si tienes una mejor idea compártela.

No hay comentarios:

Publicar un comentario