将ob_start和ob_get_lean与WordPress快捷代码一起使用

时间:2021-10-12 作者:Chaudhry Waqas

我在我的短代码中包含HTML模板,方法是使用ob_start &;ob_get_clean. 一切正常,但返回的HTML结构已损坏。

这就是我如何将html模板包含在我的shortcode函数中。

function return_cards_grid_section(){
  //this variable is in the same file
  global $subsitesDetails;
  ob_start();

  get_template_part(\'/templates/views/cards\', null, [
        \'subsitesDetails\' => $subsitesDetails
    ]);

  return ob_get_clean();
}
下面是我的卡片html文件代码

<section class="cards-in-grid-section mt-50">
    <div class="p-10 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-2 xl:grid-cols-2 gap-5">

        <?
        foreach($args[\'subsitesDetails\'] as $subsite) {
            ?>
            <a href="<?= $subsite[\'url\']; ?>" target="_blank" class="block rounded overflow-hidden shadow-lg">
                <img class="w-full h-64 object-cover object-center" src="<?=$imageUrl?>" alt="Mountain">
                <div class="px-6 py-4">
                    <div class="font-bold text-xl mb-2"><?= $subsite[\'title\'] ?></div>
                    <p class="text-pink text-base whitespace-normal"><?= $subsite[\'description\'] ?></p>
                </div>

                <div class="px-6 pt-4 pb-2">
                    <?
                    $tags = [\'tag1\', \'tag2\', \'tag3\'];
                    foreach ($tags as $tag){
                    ?>
                        <span class="inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2"><?=$tag; ?></span>
                    <?
                    }
                    ?>
                </div>
            </a>
        <?
        }
        ?>
    </div>
</section>

如果我使用相同的HTML模板而不使用短代码,我会得到正确的HTML结构。但是,当我试图通过短代码做同样的事情并包含HTML模板时,输出HTML的结构就不正确了。一直在试图找出问题,但不确定代码中的错误。

Output - 使用上述代码。Output 2 - 代码的预期输出。

任何形式的帮助都将不胜感激。谢谢

1 个回复
SO网友:Chaudhry Waqas

在使用开发人员工具检查代码之后,我能够找出问题所在。代码被包装在pre 导致代码破坏其正确结构的标记。

找到的解决方案pre 标签问题here 解决了问题。

相关推荐

shortcode // get posts by ids

我正在寻找一个解决方案,以显示在一个快捷码自定义职位。对于一篇文章来说,这已经按预期工作了,但是我想指定多个ID。比如:[posts id=1、2、3、4]因为我来自前端领域,我缺乏相应地调整功能的方法,希望这里有人能为我提供解决方案。add_shortcode( \'posts\', \'posts_shortcode\' ); function posts_shortcode($atts) { $atts = shortcode_atts( array(&#x