PHP code inside shortcodes

时间:2015-12-30 作者:theo

基本上,我有这行代码:

<?php echo do_shortcode(\'[O_U user_name="operator" 
blocked_message="This page is restricted for guests."] 
**Content Goes here** [/O_U]\'); ?>
现在,内部内容在这里,我使用常规HTML创建我的内容。但是,现在,我需要在HTML中添加一些php。

现在,我需要填充select 用MySQL结果标记。

我有一个php代码:

<?php
        $database_name = "rams";
        $mydb = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_HOST);
        $mydb -> show_errors();

        //Populate languages
        $languages = $mydb -> get_results(
            \'SELECT * FROM language_skills\'
        );

        foreach ($languages as $language){
           //do some echo of html
        }
?>
我怎样才能在这里取得成果?现在,echo在那里等待字符串。我曾考虑过heredoc和一个自定义函数,但我似乎无法实现这个结果。

UPDATE:

我设法得到了我的数据。它在一个数组中。如何在上述情况下显示所有数组结果?

我的数组是这样的:

<option value="$value">$content</option>
它准确地显示了我使用时需要的内容:

[shortcode].$array[index].[/shortcode]
如何添加所有索引?我尝试了每个,但在短代码之间不起作用

答复:

我使用内爆将数组更改为字符串,代码现在可以按我的需要工作。

2 个回复
最合适的回答,由SO网友:fischi 整理而成

不能将PHP函数放在短代码中。

但是,您不需要这样做。你可以用你的foreach-循环创建html并将其存储在变量中,例如$shortcodehtml.

所以,之后,你可以打电话

echo do_shortcode(\'[O_U user_name="operator" blocked_message="This page is restricted for guests."]\' . $shortcodehtml . \'[/O_U]\');
更好的版本是,如果您在shortcode函数中创建输出-从我的角度来看,没有必要将整个html传递给shortcode-但这应该可以很好地工作。

SO网友:Rohit Pande

使用PHP 在函数定义中填充,而不是在执行短代码时。

若要对Fischi的答案进行更多补充,您可以参考下面的代码片段。

function wptuts_first_shortcode($atts, $content=null){

    $return_variable = "";
    $database_name = "rams";
    $mydb = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_HOST);
    $mydb -> show_errors();

    //Populate languages
    $languages = $mydb -> get_results(
        \'SELECT * FROM language_skills\'
    );

    foreach ($languages as $language){
       $return_variable = $return_variable."<br />".$language;
    }
    return $return_variable;
  }

add_shortcode($return_variable, \'wptuts_first_shortcode\');
您可以在快捷代码显示中使用返回值。

参考link 供其他参考。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请