【问题标题】:Can't get shortcodes from post to display in theme on Wordpress无法从帖子中获取短代码以在 Wordpress 的主题中显示
【发布时间】:2015-12-18 13:28:18
【问题描述】:

我已经为 wordpress 创建了一个自定义主题,并试图在首页添加一个轮播,我能够添加轮播,当我对图像进行硬编码时,一切正常。我现在想要做什么是在页面内容中使用简码制作图像模块。

我现在要做的是从管理仪表板中的页面内容设置图像 src,如下所示:

<div id="img-carousel" class="carousel slide" data-ride="carousel">
    <ol class="carousel-indicators">
        <li data-target="#img-carousel" data-slide-to="0" class="active"></li>
        <li data-target="#img-carousel" data-slide-to="1"></li>

        <?php if( shortcode_exists( 'carousel-img3' ) && !empty( do_shortcode( '[carousel-img3]' ) ) ) { ?>
        <li data-target="#img-carousel" data-slide-to="2"></li>
        <?php } ?>

    </ol>
    <div class="carousel-inner" role="listbox">
        <div class="item active">
            <img src="http://placehold.it/1903x647" alt="item0">
        </div>
        <div class="item">
            <img src="http://placehold.it/1903x647" alt="item1">
        </div>

        <?php if( shortcode_exists( 'carousel-img3' ) && !empty( do_shortcode( '[carousel-img3]' ) ) ) { ?>
        <div class="item">
            <img src="<?php echo do_shortcode( '[carousel-img3]' ); ?>" alt="item2">
        </div>
        <?php } ?>
    </div>
</div>

我的简码功能如下:

function carousel_img3_func( $params = null, $content ) {
    return $content;
}
add_shortcode( 'carousel-img3', 'carousel_img3_func' );

我的页面在 wordpress 管理中是这样的

[carousel-img3]http://placehold.it/1903x647[/carousel-img3]

当我查看页面时没有显示任何内容,然后我将do_shortcode() 更改为以下内容

do_shortcode( '[carousel-img3]http://placehold.it/1903x647[/carousel-img3]' )

这会将图像添加到轮播中并显示在轮播中。无论如何,我可以让它直接从页面中提取简码信息,并能够在未来添加更多简码,以添加更多图像。例如

[carousel-img3]http://placehold.it/1903x647[/carousel-img3]
[carousel-img4]http://placehold.it/1903x647[/carousel-img4]

【问题讨论】:

  • 可能与您的短代码名称中的连字符有关。尝试在任何地方将carousel-img3 更改为carousel_img3
  • @rnevius 我也认为我尝试过使用连字符下划线但都不起作用

标签: php wordpress


【解决方案1】:

也许您应该将结构更改为:

//[carousel images="foo.jpg,bar.jpg"]
function carousel_func( $atts ) {
    $ouptput = "";
    $images = explode(",",$atts['images'];
    foreach($images as $image){
        $output .= "<div class='item'><img src='" . $image . "' /></div>";
    }
    return $output
}
add_shortcode( 'carousel', 'carousel_func' );

【讨论】:

  • 我已经尝试过这段代码,它和我的一样,如果我将图像网址硬编码到它显示的主题,但它不会从帖子内容中提取
  • 你能在代码运行后发布你的html代码吗?还是链接?
  • 抱歉没有链接该站点当前处于脱机状态,但是 html 输出显示没有一个项目 div 看起来像 &lt;div class="carousel-inner" role="listbox"&gt;&lt;/div&gt; 但是如果我将 &lt;?php echo do_shortcode( '[carousel images="foo.jpg,bar.jpg"]' ); ?&gt; 添加到模板文件中,它确实会将图像添加到页面,但我不想将其硬编码到模板文件中。
  • 我认为您对短代码的工作方式感到困惑。如果您在 Wordpress 的内容编辑器中添加简码,它将被简码函数的输出替换。所以我们需要三样东西:1)内容编辑器中的简码 2)简码函数 3)模板文件中内容编辑器的输出。你错过了3)。这可以在 the_content 中,也可以在自定义字段中。
  • 没问题。我会为此使用 ACF。 (中继器字段)。很容易实现:advancedcustomfields.com/resources/repeater
【解决方案2】:

使用简码不是编辑主题的正确方法,而应使用主题选项页面。我已经使用 Wordpress codex https://codex.wordpress.org/Creating_Options_Pages

完成了这项工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2014-01-04
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多