【问题标题】:WP Shortcodes not returning contentWP简码不返回内容
【发布时间】:2018-03-15 11:27:43
【问题描述】:

我正在尝试在模板文件中设置简码。

我有以下设置:

作为 WP 页面中的内容:

[test]shortcode![/test]

在functions.php中:

function test( $atts, $content = null ) {
    return '<h1>'.$content.'</h1>';
}

add_shortcode("test", "test"); 

在上面页面的template.php中:

<?php echo do_shortcode('[test]'); ?>

虽然没有返回任何内容。如果我在 template.php 中调用 the_post()the_content() ,短代码确实会正确显示为 h1 但这不是我想要的功能,我需要能够在特定位置插入 [test] 短代码。

此外,我似乎可以在函数中添加硬编码内容并显示它,所以很可能 $content 变量没有返回任何数据?是什么原因造成的?

【问题讨论】:

    标签: php wordpress wordpress-theming themes


    【解决方案1】:

    您应该回显短代码以使其正常工作:

    &lt;?php echo do_shortcode('[test]'); ?&gt;

    【讨论】:

    • 抱歉,我刚刚错过了帖子中的回声部分,现在已修复。我在我的文件中回显它,但无济于事。
    【解决方案2】:

    参考这个https://developer.wordpress.org/reference/functions/do_shortcode/

    你必须简单地回显短代码

    <?php echo do_shortcode('[test]'); ?>
    

    【讨论】:

    • 抱歉,当我回复 Dimitar 时,这只是我的帖子中的一个错字,我在我的文件中呼应了 do_shortcode。
    【解决方案3】:

    您需要回显输出。当使用 do_shortcode 时,它​​将在 wp-includes 中运行,有一个文件 shortcodes.php。触发函数时会将内容返回给调用函数。所以代码将如下所示:

     <?php echo do_shortcode('[test]'); ?>
    

    第二件事, 您的函数参数具有默认的 null 参数,因此如果您不将任何内容传递给简码,那么它将不会显示任何内容。

    你需要做这样的事情

    <?php echo do_shortcode('[test param="content_to_be_show"]'); ?>
    

    或者,如果您想在开始标签和结束标签内容之间传递参数,您应该执行以下操作:

    function my_custom_shortcode_func( $atts, $content = null ) {
       return '<p>' . $content . '</p>';
    }
    
    add_shortcode( 'my_custom_shortcode', 'my_custom_shortcode_func' );
    <?php echo do_shortcode('[my_custom_shortcode]<p>Hello this is from custom shortcode contents</p>[/my_custom_shortcode]'); ?>
    

    【讨论】:

    • 感谢您的回复,但是正如其他 cmets 中提到的那样,这只是帖子中的一个错字,我在我的文件中呼应了 do_shortcode。
    • 我不需要参数,但是我想在短代码的开始和结束语句中显示内容,如此处所示 - [test] display-this-content [/test ]
    • 我已经更新了我的答案,但在你的问题中,你的回调函数和短代码名称都是相同的,所以这可能是个问题
    • 再次感谢您的回复,但这仍然有效。作为记录,您示例中 do_shortcode 函数中的

      将是自行生成的,对吗?所以我的模板文件只有 ?

    【解决方案4】:

    您没有在测试短代码之间指定任何内容,因为您得到空结果字符串。你需要写

    $strvar = 'Load String value here';
    echo do_shortcode('[test]'.$strvar.'[/test]');
    

    以上代码给出的结果为&lt;h1&gt;Load String value here&lt;/h1&gt;

    $strvar = get_the_content();

    【讨论】:

    • 所以这段代码 [test]shortcode![/test] 应该可以通过 WP 界面进行编辑,我希望能够在里面显示内容(在这种情况下是“shortcode!”)一个模板。我明白你在说什么,但我不需要硬编码开始和结束短代码标签之间的内容,我想将该内容称为变量。
    • 您可以通过变量添加动态内容。 在此行之前,在 $strvar 中设置您的动态内容。
    • 我不太确定该怎么做,因为你可以说我不知道​​我在做什么 :) 。并且可能会有很多不同的动态内容,所以我仍然需要一种方法在 WP 编辑器中使用打开标签/关闭标签语义来区分它,短代码似乎是 atm 的方式
    • 使用 $strvar= get_the_content();它将模板页面的内容分配给变量。因此,在 WP Backend 中,您为模板页面描述添加的任何内容都会显示出来。
    • 我这样做了,但是它最终显示页面上的所有内容,而不是仅显示短代码开始和结束标记中的内容。所以当我在 WP 编辑器中编辑页面时,我现在有这样的东西:在这里加载字符串值 [test] [/test],我只想显示“这里”,我该如何专门针对它? get_the_content() 似乎正在返回所有内容
    猜你喜欢
    • 2011-11-05
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多