web-dev-qa-db-ja.com

PHP ショートコード内のコード

基本的に、私はこのコード行を持っています:

<?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を追加する必要があります。

今のところ、 / - タグのoptionに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とカスタム関数について考えました、しかし私は結果を達成するように思えません。

更新:

私は自分のデータを手に入れた。それは配列です。どのように私は上記の状況ですべての配列結果を示すことができますか?

私の配列は次のようになります。

<option value="$value">$content</option>

それは私が使うときに私が欲しいものを正確に示しています:

[shortcode].$array[index].[/shortcode]

すべてのインデックスを追加する方法私はそれぞれのために試したが、それはショートコードの間に動作しません

回答:

配列を文字列に変更するためにimplodeを使用しましたが、コードは目的どおりに機能します。

1
theo

あなたのショートコードの中にPHP関数を入れることはできません。

ただし、する必要はありません。 foreach-ループを使用してhtmlを作成し、それを変数に格納することができます(例:$shortcodehtml)。

だから、その後、あなたは呼び出すことができます

echo do_shortcode('[O_U user_name="operator" blocked_message="This page is restricted for guests."]' . $shortcodehtml . '[/O_U]');

ショートコード関数の内部に出力を作成するのであれば、それを改善したものになるでしょう。私の観点からは、html全体をショートコードに渡す必要はありませんが、これでも問題はありません。

1
fischi

あなたのショートコードを実行している間ではなく、あなたの関数定義の中で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 を参照してください。

1
Rohit Pande