我在一个公文包网站工作,在那里,平面设计师希望在页面顶部、页面标题和其他内容上方有一个旋转木马。当她在后端创建一个页面时,它看起来很正常(标题、旋转木马、内容),她知道它在前端的外观会有所不同(旋转木马、标题、内容)。
在shortcode的日子里,我通过以下方式实现了这一点:
在主题内容中使用正则表达式。php来查找短代码并对其调用do\\u短代码。这发生在调用页面上的\\u内容之前
$regex = \'/\\[carousel[^\\]]*id=[\\\'"](.*)[\\\'"]?[^\\]]*\\]/\';
if ( preg_match_all( $regex, $post->post_content, $matches ) )
{ echo do_shortcode($matches[0][0]); }
the_title( \'<h2 class="entry-title">\', \'</h2>\' );
the_content( \'Continue reading...\', false );
主题功能中的。php,在\\u内容上创建一个过滤器以删除短代码
function carousel_remover( $content ) {
if ( has_shortcode( $content, \'carousel\' ) ) {
$regex = \'/\\[carousel[^\\]]*id=[\\\'"](.?)[\\\'"]?[^\\]]*\\]/\';
if ( preg_match( $regex, $content ) ) {
// Filter the shortcode out of the_content
$content = preg_replace( $regex, \'\', $content, 1);
}
}
return $content;
}
add_filter( \'the_content\', \'carousel_remover\' );
在内容中调用\\u内容时。php,已删除短代码。因此,所有内容的呈现顺序为:短代码、标题、所有其他内容carousel插件最近更新了一个Gutenberg块,此过程不适用于块。
我添加了一个正则表达式来匹配内容中的块代码。php,拉出post ID,并对其调用do\\u shortcode。这是可行的,旋转木马呈现在标题上方。
但是,删除函数中的块代码。php不工作。一些日志转储显示,当内容传递到\\u内容过滤器时,该块已经呈现为HTML。因此,浏览器可以获取旋转木马、标题、旋转木马和内容。我还尝试删除内容中的块。php,但这也不起作用:
if ( has_block( "client/carousel" ) ) {
$blocks = parse_blocks( $post->post_content );
foreach ( $blocks as $block ) {
if ( \'client/carousel\' === $block[\'blockName\'] ) {
$num = $block[\'attrs\'][\'id\'];
$regex_gutenberg = \'/<!-- wp:client/carousel {"id":"(.*)"} \\/-->/\';
$post->post_content = preg_replace( $regex_gutenberg, \'\', $post->post_content, 1 );
echo do_shortcode("[carousel id=\'".$num."\']");
break; // Only do this for the first carousel block found...
}
}
}
将从$post中删除该块->;发布内容,但调用内容时仍会呈现内容。
在呈现内容之前,我应该在哪里挂接以删除块?或者,是否有更简单的方法将标题向下移动到第一个旋转木马的下方?
提前感谢你的建议。