Czy istnieje sposób na podzielenie treści postu i krótkiego kodu galerii. Chcę wyświetlać galerię poza moją normalną treścią bez względu na to, jak i gdzie jest ona umieszczona. Mogę użyć tego, aby uzyskać sam shortcode:
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
Ale to nie działa, jeśli krótki kod galerii nie jest pierwszą instancją. Czy istnieje sposób na całkowite podzielenie treści i galerii?
Edycja: Mam pół-rozwiązanie, ale wydaje się, że jest to długa, kręta droga do rozwiązania tego. Najpierw pobiera pierwszy krótki kod w poście (który musi zostać naprawiony, ponieważ chcę tylko krótki kod „Galeria”), a następnie usuwa wszystkie krótkie kody z treści (ponownie, nie tak naprawdę, co chcę zrobić.
<?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; ?>
Edycja nr 2 - Ok, w poście udało mi się uzyskać tylko skróty galerii. Dodałem również filtr, aby usunąć formularz shortcode galerii the_content()
- problem polega na tym, że niekoniecznie usuwa on shortcode, ponieważ go publikuje, ale nie pozwala mi na uruchomienie „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);
Pętla
<?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>
w Loop zwróci mój krótki kod Dwa razy (jestem na jednej stronie, powinien być zapętlony dwa razy - więc nie działa do_shortcode ()). Nie pewny dlaczego.
źródło
the_content()
. Jednak trudniejsze, jeśli istnieje już wiele takich stron.Odpowiedzi:
Otwarty dla każdego, kto może to uprościć, ale oto, co wymyśliłem, że zadziałało dla mnie.
Po pierwsze - pobierz galerię, używając
get_post_gallery()
, jak tylko zacznie się pętla:strip_shortcode_gallery()
Funkcja - functions.phpZasoby:
Przepełnienie stosu:
Co pierwotnie zaczynałem, co nie działało zgodnie z oczekiwaniami:
źródło
Podstawowe wyrażenia regularne o krótkim kodzie
Zasadniczo możemy to zrobić za pomocą Regex - w rzeczywistości nawet z Regex dostarczonym przez core
get_shortcode_regex()
.Najpierw musimy pobrać tagi shortcode i zbudować wyrażenie regularne. Funkcja podstawowa
get_shortcode_regex()
niestety nie daje szansy na wprowadzenie argumentu, więc zostalibyśmy z wyrażeniem regularnym pasującym do każdego krótkiego kodu, co jest niepożądane, ponieważ chcemy jedynie celować na ten[gallery]
krótki kod.Złap wszystkie galerie
Następnie potrzebujemy Regex, który łapie wszystkie galerie. Dlatego dzwonimy,
preg_match_all()
ponieważ zwróci wszystkie0
dopasowania dla shortcode galerii jako tablicę z indeksem (reszta będzie częściowymi dopasowaniami i może zostać zignorowana).Teraz
$galleries[0]
zawiera szereg tagów shortcode galerii.Treść bez galerii
Następną rzeczą, którą musimy zrobić, to usunąć wszystkie
[gallery]
skróty z treści. Wykorzystamy ponownie ten sam Regex i uruchomimy goget_the_content()
. Oczywiście stosujemythe_content
filtr, ponieważ podczas renderowania można było dodać krótki kod poprzez wywołanie zwrotne.$content
Zmienna posiada obecnie nasze treści.Przykład wywołania zwrotnego w celu zmiany treści
lub: Jak podzielić zawartość na galerie i resztę postu
Możemy łatwo po prostu zastąpić treść naszą nową treścią podczas oddzwaniania:
które najpierw dodałyby wszystkie galerie, a następnie dodały naszą zawartość bez galerii, obie oddzielone regułą poziomą. To tylko punkt wyjścia.
źródło
To nie powinno być takie skomplikowane. Poniższy kod można w razie potrzeby skrócić do kilku wierszy.
Podejście 1. Uzyskaj czystą treść postu, usuwając wszystkie skróty, w tym jeden z galerii z treści postu.
Uwaga: wszystkie pozostałe skróty zostaną usunięte z posta. Jeśli nie umieścisz tam niestandardowych skrótów, to podejście jest dla Ciebie.
Załóżmy, że jesteś w pętli WP
Załóżmy, że Cię nie ma
Podejście 2. Usuń tylko
[gallery]
krótki kod, zachowaj wszystkie pozostałe kody.Opiera się na wewnętrznej realizacji tego, jak
[gallery]
wygląda krótki kod, który może zostać zmieniony przez zespół WP, więc może nie jest tak przyszłościowy, jak pierwsze podejście:W pętli WP
Z tego
źródło