Existe uma maneira de dividir o conteúdo da postagem e o código curto da galeria. Quero exibir a galeria fora do meu conteúdo normal, não importa como ou onde ela é colocada. Eu posso usar isso para obter o próprio código de acesso:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Mas isso não funciona se o código curto da galeria não for a primeira instância. Existe uma maneira de dividir meu conteúdo e galeria completamente?
Edit: Eu tenho uma semi-solução, mas parece um longo caminho a percorrer. Primeiro ele pega o primeiro código de acesso na postagem (que precisa ser corrigido, pois eu quero apenas o código de acesso "Galeria") e remove todos os códigos de acesso do conteúdo (novamente, não é exatamente o que eu quero fazer).
<?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; ?>
Edit # 2 - Ok, eu consegui apenas códigos de acesso da galeria no post. Também adicionei um filtro para remover o formulário de código de acesso da galeria the_content()
- o problema é que ele não está necessariamente removendo o código de acesso, pois ele é publicado, mas não está permitindo que eu execute "do_shortcode ()"
Functions.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);
O laço
<?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>
no The Loop ele retornará meu código curto duas vezes (estou em uma única página, deve ser repetida duas vezes - portanto, não está executando do_shortcode ()). Não sei por que.
fonte
the_content()
. Mais complicado, se já houver muitas páginas como essa, no entanto.Respostas:
Aberto a qualquer pessoa que possa simplificar isso, mas eis o que eu criei que funcionou para mim.
O primeiro é o primeiro - obtenha a galeria, usando
get_post_gallery()
assim que o loop iniciar:strip_shortcode_gallery()
Função - functions.phpRecursos:
Stackoverflow:
O que eu estava saindo originalmente, que não funcionou como o esperado:
fonte
Expressões regulares do shortcode principal
Basicamente, podemos fazer isso com um Regex - na verdade, mesmo com o Regex fornecido pelo core by
get_shortcode_regex()
.Primeiro, precisamos pegar as tags shortcode e criar uma regex.
get_shortcode_regex()
Infelizmente, a função principal não oferece chance de apresentar um argumento, para que fiquemos com um regex que corresponda a todo e qualquer código abreviado, o que é indesejável, pois queremos apenas segmentar o[gallery]
código abreviado.Pegue todas as galerias
Em seguida, precisamos de um Regex que capture todas as galerias. Portanto, estamos chamando,
preg_match_all()
pois ele retornará todas as correspondências para o código de acesso da galeria como matriz com um0
índice (o restante será correspondências parciais e pode ser ignorado).Agora
$galleries[0]
contém uma variedade de tags de shortcode da galeria.O conteúdo sem galerias
A próxima coisa que precisamos fazer é remover todos os
[gallery]
códigos de acesso do conteúdo. Vamos usar o mesmo Regex novamente e executá-loget_the_content()
. É claro que aplicamos othe_content
filtro, pois o código de acesso poderia ter sido adicionado por meio de um retorno de chamada no momento da renderização.A
$content
variável agora mantém nosso conteúdo.Exemplo de retorno de chamada para alterar o conteúdo
ou: como você pode dividir o conteúdo em galerias e no restante da postagem
Poderíamos facilmente substituir o conteúdo pelo nosso novo conteúdo durante um retorno de chamada:
que adicionaria primeiro todas as galerias e, em seguida, nosso conteúdo sem galerias, ambos separados por uma regra horizontal. Isto é só um ponto de partida.
fonte
Não deve ser tão complicado. O código abaixo pode ser reduzido para duas linhas, se desejar.
Abordagem 1. Obtenha o conteúdo limpo da publicação removendo todos os códigos de acesso, incluindo a galeria do conteúdo da publicação.
Nota: todos os outros códigos de acesso serão removidos da publicação. Se você não colocar códigos de acesso personalizados lá, a abordagem será a sua.
Suponha que você esteja no loop WP
Suponha que você está fora
Abordagem 2. Remova apenas o
[gallery]
código curto, mantenha todos os outros códigos curtos.Baseia-se na realização interna da aparência do
[gallery]
código de acesso, que pode ser alterado pela equipe do WP, portanto, talvez não seja uma prova futura do que a primeira abordagem:No loop WP
Fora disso
fonte