包含库的get_post()在内容末尾输出一个不匹配的结束div

时间:2019-01-21 作者:Michae Pavlos Michael

我创建了一个自定义页面,使用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。

有人对可能发生的事情有什么想法吗?

谢谢你抽出时间

1 个回复
最合适的回答,由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。

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {