¿Hay alguna manera de dividir el contenido de la publicación y el código corto de la galería? Quiero mostrar la galería fuera de mi contenido normal, sin importar cómo o dónde se coloque. Puedo usar esto para obtener el shortcode en sí:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Pero esto no funciona si el código corto de la galería no es la primera instancia. ¿Hay alguna manera de dividir mi contenido y galería completamente?
Editar: Tengo una solución parcial, pero parece una forma larga de hacerlo. Primero toma el primer shortcode en la publicación (que debe corregirse ya que solo quiero el shortcode "Galería") y luego elimina todos los shortcodes del contenido (de nuevo, no es realmente lo que quiero hacer.
<?php if(has_shortcode(get_the_content(), 'gallery')) : ?>
<?php
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
?>
<div id="content">
<?php echo strip_shortcodes(get_the_content()); ?>
</div>
<div id="gallery">
<?php echo do_shortcode($matches[0]); ?>
</div>
<?php endif; ?>
Edición n. ° 2 : Ok, solo he podido obtener códigos abreviados de la galería en la publicación. También he agregado un filtro para eliminar el formulario de shortcode de la galería the_content()
: el problema es que no necesariamente elimina el shortcode ya que lo publica, pero no me permite ejecutar "do_shortcode ()"
Funciones.php
function remove_gallery($content) {
global $post;
if($post->post_type == 'artcpt')
remove_shortcode('gallery', $content);
return $content;
}
add_filter( 'the_content', 'remove_gallery', 6);
El lazo
<?php preg_match('/\[gallery ids=[^\]]+\]/', get_the_content(), $matches); ?>
<div id="content">
<?php the_content(); ?>
</div>
<div id="gallery">
<?php echo do_shortcode($matches[0]); ?>
</div>
en The Loop, devolverá mi código corto dos veces (estoy en una sola página, debería repetirse dos veces, por lo que no se ejecuta do_shortcode ()). No estoy seguro de por qué.
fuente
the_content()
. Más complicado si ya hay muchas páginas como esta, sin embargo.Respuestas:
Abierto a cualquiera que pueda simplificar esto, pero esto es lo que se me ocurrió y funcionó para mí.
Lo primero es lo primero: obtenga la galería, utilizando
get_post_gallery()
, tan pronto como comience el ciclo:strip_shortcode_gallery()
Función - functions.phpRecursos:
Desbordamiento de pila:
De lo que originalmente estaba saliendo, que no funcionó como se esperaba:
fuente
Core shortcode Expresiones regulares
Básicamente podemos hacer eso con un Regex, incluso con el Regex proporcionado por core by
get_shortcode_regex()
.Primero tenemos que tomar las etiquetas de código corto y construir una expresión regular.
get_shortcode_regex()
Lamentablemente, la función principal no ofrece la oportunidad de presentar un argumento, por lo que nos quedaría con una expresión regular que coincida con todos y cada uno de los códigos cortos, lo que no es deseado ya que solo queremos apuntar al[gallery]
código corto.Atrapa todas las galerías
Luego necesitamos un Regex que capture todas las galerías. Por lo tanto, estamos llamando,
preg_match_all()
ya que devolverá todas las coincidencias para el shortcode de la galería como una matriz con un0
índice (el resto serán coincidencias parciales y se pueden ignorar).Ahora
$galleries[0]
contiene una variedad de etiquetas de código corto de galería.El contenido sin galerías.
Lo siguiente que debemos hacer es eliminar todos los
[gallery]
códigos cortos del contenido. Usaremos el mismo Regex nuevamente y lo ejecutaremosget_the_content()
. Por supuesto, aplicamos elthe_content
filtro ya que el shortcode podría haberse agregado a través de una devolución de llamada en el momento del renderizado.La
$content
variable ahora contiene nuestro contenido.Ejemplo de devolución de llamada para alterar el contenido
o: Cómo puedes dividir el contenido en galerías y el resto de la publicación
Podríamos reemplazar fácilmente el contenido con nuestro nuevo contenido durante una devolución de llamada:
que primero agregaría todas las galerías, luego agregaría nuestro contenido sin galerías, ambas separadas por una regla horizontal. Esto es sólo un punto de partida.
fuente
No debería ser tan complicado. El código a continuación se puede acortar a un par de líneas si lo desea.
Enfoque 1. Obtenga el contenido limpio de la publicación eliminando todos los códigos cortos, incluido el de galería del contenido de la publicación.
NB: todos los demás códigos cortos se eliminarán de la publicación. Si no coloca códigos cortos personalizados allí, entonces el enfoque es para usted.
Suponga que está en el bucle de WP
Asume que estás fuera
Enfoque 2. Elimine solo el
[gallery]
shortcode, mantenga todos los demás shortcodes.Se basa en la realización interna de cómo se
[gallery]
ve el shortcode, que puede ser cambiado por el equipo de WP, por lo que tal vez no sea una prueba futura como el primer enfoque:En el bucle WP
Fuera de el
fuente