web-dev-qa-db-ja.com

カスタムテンプレートからページ内にPHP/HTMLコードを追加する

私は息子が彼の金融サイトでカスタムプログラミングを手伝っているのを手伝っています。彼の最初のプロジェクトはjQuery、flot、phpなどを使ったカスタムスプレッドシートです。

スプレッドシートがページの最後にある限り、私は子テーマを作成し、テンプレート、functions.php、スタイルシートなどを作成しました。しかし今、私はスプレッドシートの前後両方にテキストを追加する機能を追加することでそれを改善しようとしています。

私の最初のアイデアは、私が単にショートコードを使うことができるかもしれないということでしたが、それが正しい方法であるかどうか私は知りません。ショートコードは大量のphp/htmlを混ぜて出力するためのものではないようです。ファイルをインクルードしてスプレッドシートファイルに関数を呼び出すことはできますが、これは機能しますが、これまでのところショートコードは実際のショートコード自体をプリントアウトする以外には何もしていません。しかし、それが間違った方法であったとしても、それを機能させるために時間を無駄にしたくはありません。

私はこれを行うことができる方法について何かアイデアはありますか? the_post()を手動で解析して自分でショートコードを処理することができると思いますが、組み込みのメソッドが使える場合はそれをするのは嫌です。

詳細情報
私はショートコードを試してみました。私のfunctions.php(私はいくつかのJavaScriptとCSSファイルをロードするために使用されていることを私は知っている)で:

function register_shortcodes() {
  add_shortcode('spreadsheet_placeholder', 'display_spreadsheet');
}
add_action( 'init', 'register_shortcodes');

私はページの真ん中にタグ[spreadsheet_placeholder]を置き、真ん中にそのタグでレンダリングされたページを置きます。今日まではタグを表示していましたが、関数(display_spreadsheet)を含む外部phpファイルをインクルードするという素晴らしいアイデアがありました。

スプレッドシートはphpファイルをインクルードした後に表示されるようになりましたが、私が望んでいた方法とは異なります。しかし、それはうまくいきました。中央ではなくコンテンツの上に表示されているだけです。直接出力するだけでなく、データを返す必要があることを読んだので、そのようなことを期待しました。

Nowdoc変数を使用して関数全体を変数に保存しようとしましたが、phpおよびhtmlとphpタグを混在させているため、これは非常に楽観的であると思われます。 PHPコードをいくつかの変数として保存し、それらを連結してコード全体を返します。しかし、それはWordPressよりもPHPの問題であると私は思います。

現時点では、どちらが簡単なのかわかりません。それを実行するか、ページのコンテンツ内で自分自身でショートコードのようなタグを解析し、コード内のロジックを実行します。

ソリューション

Ob_start()の使用に関する手助けをしてくれたbongerとBrad Daltonに感謝します。

私はそのファイルから私のオリジナルのphp/htmlコードを取り出し、それを関数の中の別のファイルに入れました。そのファイルをfunctions.phpにインクルードして、その関数へのショートコード登録をポイントしました。次に、Bradの例を使用して、ファイル全体を最後に返したところ、すべてが問題なく機能しました。

あなたの両方に感謝します。私は結果に満足しています、そして私の息子もそうです。

2
Marty Fried

これは shortcode のコーディング方法です。

function foobar_func( $atts ){
    return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );

そして、出力バッファリングを使って関数を実行するために

add_shortcode( 'shortcode_tag', 'function_name' );
function function_name($atts) {
    ob_start();

    // Add your code

    $var = ob_get_contents();
    ob_end_clean();
    return $var;

}
1
Brad Dalton