我创建了一个自定义页面,使用get\\u post(id)从各种帖子中获取内容。
我使用此函数获取帖子:-
function get_my_post($id){
$get_post = get_post($id);
$content = apply_filters(\'the_content\', $get_post->post_content);
echo $content;
}
然而,输出似乎打破了DOM。经过一些调查,我意识到包含图库短代码的帖子在内容末尾有一个单独的结束div,没有匹配的开始div。例如,包含图库的其中一篇帖子的回显输出如下所示:-
<figure class=\'gallery-item\'>
<div class=\'gallery-icon landscape\'>
<img width="700" height="469" src="https://testsite.com/wp-content/uploads/DSC_0668-700x469.jpg" class="attachment-medium size-medium" alt="" srcset="https://testsite.com/wp-content/uploads/DSC_0668-700x469.jpg 700w, https://testsite.com/wp-content/uploads/DSC_0668-768x514.jpg 768w, https://testsite.com/wp-content/uploads/DSC_0668-1000x669.jpg 1000w, https://testsite.com/wp-content/uploads/DSC_0668-400x268.jpg 400w, https://testsite.com/wp-content/uploads/DSC_0668.jpg 1600w" sizes="(max-width: 700px) 100vw, 700px" />
</div>
</figure>
<figure class=\'gallery-item\'>
<div class=\'gallery-icon landscape\'>
<img width="700" height="469" src="https://testsite.com/wp-content/uploads/DSC_0251-700x469.jpg" class="attachment-medium size-medium" alt="" srcset="https://testsite.com/wp-content/uploads/DSC_0251-700x469.jpg 700w, https://testsite.com/wp-content/uploads/DSC_0251-768x514.jpg 768w, https://testsite.com/wp-content/uploads/DSC_0251-1000x669.jpg 1000w, https://testsite.com/wp-content/uploads/DSC_0251-400x268.jpg 400w, https://testsite.com/wp-content/uploads/DSC_0251.jpg 1600w" sizes="(max-width: 700px) 100vw, 700px" />
</div>
</figure>
<figure class=\'gallery-item\'>
<div class=\'gallery-icon landscape\'>
<img width="700" height="469" src="https://testsite.com/wp-content/uploads/DSC_0192-700x469.jpg" class="attachment-medium size-medium" alt="" srcset="https://testsite.com/wp-content/uploads/DSC_0192-700x469.jpg 700w, https://testsite.com/wp-content/uploads/DSC_0192-768x514.jpg 768w, https://testsite.com/wp-content/uploads/DSC_0192-1000x669.jpg 1000w, https://testsite.com/wp-content/uploads/DSC_0192-400x268.jpg 400w, https://testsite.com/wp-content/uploads/DSC_0192.jpg 1600w" sizes="(max-width: 700px) 100vw, 700px" />
</div>
</figure>
</div>
正如您所看到的,末尾有一个不应该存在的不匹配的结束div,这会弄乱DOM。
以下是输出上述内容的帖子内容:-
[gallery link="none" size="medium" columns="3" ids="79,78,75"]
如果删除库短代码,所有其他类型的内容都可以正常工作。如果我回显未经\\u内容过滤器处理的原始内容,这也行得通——尽管这显然回显了未经渲染的库短代码。但将过滤器应用到画廊会给我一个单独的div。
有人对可能发生的事情有什么想法吗?
谢谢你抽出时间
最合适的回答,由SO网友:mrben522 整理而成
如果您查看gallery shortcode函数,则开头div(与您缺少的更接近的部分相匹配)如下所示:
$gallery_div = "<div id=\'$selector\' class=\'gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}\'>";
然后运行此筛选器
$output = apply_filters( \'gallery_style\', $gallery_style . $gallery_div );
很可能在您的主题或插件中的某个地方有代码
gallery_style
过滤,这就是你的罪魁祸首。
以下是删除库样式的正确方法。在前面代码的正上方是:
/**
* Filters whether to print default gallery styles.
*
* @since 3.1.0
*
* @param bool $print Whether to print default gallery styles.
* Defaults to false if the theme supports HTML5 galleries.
* Otherwise, defaults to true.
*/
if ( apply_filters( \'use_default_gallery_style\', ! $html5 ) ) {
$gallery_style = "
因此,您只需强制该过滤器返回false,如下所示:
add_filter( \'use_default_gallery_style\', \'__return_false\');
然后去掉你的主题添加的过滤函数,它会清除样式和开头div。