投稿のコンテンツとギャラリーのショートコードを分割する方法はありますか。ギャラリーの配置方法や場所に関係なく、通常のコンテンツの外側にギャラリーを表示したい。これを使用してショートコード自体を取得できます。
if(has_shortcode(get_the_content(), 'gallery')){
$pattern = get_shortcode_regex();
preg_match("/$pattern/s", get_the_content(), $matches);
echo do_shortcode($matches[0]);
}
しかし、ギャラリーの短いコードが最初のインスタンスでない場合、これは機能しません。コンテンツとギャラリーを完全に分割する方法はありますか?
編集:私は半解決策を持っていますが、それを取り巻くには長い道のりのようです。最初に投稿内の最初のショートコードを取得し(「ギャラリー」ショートコードのみが必要なため修正する必要があります)、その後コンテンツからすべてのショートコードを削除します(もう一度、実際にやりたいことではありません)。
<?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; ?>
編集#2 -OK、投稿でギャラリーショートコードしか取得できませんでした。ギャラリーショートコードフォームを削除するためのフィルターも追加しました。the_content()
問題は、ショートコードが投稿されるため、必ずしもショートコードを削除するとは限らないが、「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);
ループ
<?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>
The Loopでは、短いコードを2回返します(私は1ページにあり、2回ループする必要があります-そのため、do_shortcode()を実行しません)。理由はわかりません。
the_content()
ます。ただし、このようなページが既に多数ある場合は、より注意が必要です。