【问题标题】:Wordpress shortcode does not work when its wrapped in HTML用 HTML 包装的 Wordpress 简码不起作用
【发布时间】:2026-01-11 05:05:01
【问题描述】:

我创建了包含 HTML 元素的 Wordpress 页面,例如 <div><ul>,例如

<div id="main" class="large-12 medium-12 columns clearfix" role="main">
  <h2 class="press-list-header">Articles</h2>
    <ul class="press-list">

    </ul>
</div> 

我想在这些 HTML 元素中放置这样的短代码:

<div id="main" class="large-12 medium-12 columns clearfix" role="main">
  <h2 class="press-list-header">Articles</h2>
    <ul class="press-list">
[picture image="http://example.com/image1.jpg" thumbnail="http://example.com/image1-thumbnail.jpg"]
[picture image="http://example.com/image2.jpg" thumbnail="http://example.com/image2-thumbnail.jpg"]
[picture image="http://example.com/image3.jpg" thumbnail="http://example.com/image3-thumbnail.jpg"]
    </ul>
</div> 

当我这样做时,短代码只会在呈现的页面上显示为常规文本。如果我只是将短代码放在 HTML 元素之外,那么它们可以正常地将预期内容呈现到页面上。

我怎样才能让我的短代码呈现包含在 HTML 元素中的内容?

更新

我应该更具描述性。我想让我的客户可以轻松地在 TinyMCE 编辑器中输入页面和帖子的短代码。我不希望他们不得不处理 php 或 html 代码。他们无论如何都无法访问那些.php 模板文件,因为他们不是开发人员。我已经得到了短代码,它只适用于帖子而不适用于页面。我相信这是因为我对所有页面都使用了一个名为 custom-page.php 的模板,它看起来像:

<?php /* Template Name: Custom */ ?>
<?php get_header(); ?>

  <div id="content">        
    <div id="inner-content" class="row clearfix">

      <?php the_post(); global $post; echo $post->post_content; ?>

    </div> <!-- end #inner-content -->
  </div> <!-- end #content -->

<?php get_footer(); ?>

我已经确定问题出在线路上

<?php the_post(); global $post; echo $post->post_content; ?>

由于某种原因,它只是呈现短代码文本。它不允许短代码运行和呈现预期的内容。如何重写这一行以使短代码正确执行?

【问题讨论】:

    标签: php wordpress wordpress-theming shortcode


    【解决方案1】:

    你正在寻找do_shortcode():

    <?php echo do_shortcode("[shortcode]"); ?>
    

    所以在你的模板中,它看起来是这样的:

    <div id="main" class="large-12 medium-12 columns clearfix" role="main">
      <h2 class="press-list-header">Articles</h2>
        <ul class="press-list">
    <?php echo do_shortcode("[picture image=\"http://example.com/image1.jpg\" thumbnail=\"http://example.com/image1-thumbnail.jpg\"]"); ?>
    <?php echo do_shortcode("[picture image=\"http://example.com/image2.jpg\" thumbnail=\"http://example.com/image2-thumbnail.jpg\"]"); ?>
    <?php echo do_shortcode("[picture image=\"http://example.com/image3.jpg\" thumbnail=\"http://example.com/image3-thumbnail.jpg\"]"); ?>
        </ul>
    </div>
    

    添加到您的 UPDATEdo_shortcode 函数仍然是要走的路:

    <?php the_post(); global $post; echo do_shortcode($post->post_content); ?>
    

    【讨论】:

    • 非常感谢,但我不清楚。我用 Update1 编辑了我的帖子,以更详细地解释我的问题。我希望你能提供帮助。谢谢。
    • 您可以在任何地方使用函数do_shortcode,因此您可以在自定义页面中执行以下操作:&lt;?php do_shortcode( $post-&gt;post_content) ?&gt;
    【解决方案2】:

    你需要这样做

    <?php 
    echo do_shortcode("[picture image='http://example.com/image1.jpg' thumbnail='http://example.com/image1-thumbnail.jpg']"); 
    ?>
    

    【讨论】:

    • 嘿抱歉我不清楚。我编辑了我的问题以使其更清楚。有什么想法吗?
    【解决方案3】:
     <?php echo do_shortcode('<div id="main" class="large-12 medium-12 columns clearfix"   role="main">
     <h2 class="press-list-header">Articles</h2>
     <ul class="press-list">
     [picture image="http://example.com/image1.jpg" thumbnail="http://example.com/image1-thumbnail.jpg"]
     [picture image="http://example.com/image2.jpg" thumbnail="http://example.com/image2-thumbnail.jpg"]
     [picture image="http://example.com/image3.jpg" thumbnail="http://example.com/image3-thumbnail.jpg"]
     </ul>
    </div>');
    

    【讨论】:

    • 谢谢,但我不够清楚。我编辑了我的问题。你怎么看?