web-dev-qa-db-ja.com

HTMLテンプレートページを返す PHP 関数

自分のサイトに挿入するためにショートコードを使用できるフォームを作成したいです。

HTML部分を別のファイルで作成してから、それをPHP shortcodeを付けて挿入することができれば(それをショートコードにするという仕組みからページのロジックを切り離すために)本当にいいでしょう。

どうすればいいの?

- アップデート -

これは私がしたことです:私は2つのファイルを持っています。一つは 'profiletemplate.php'、もう一つは 'scodes'です。どちらも私が自分のサイト用に作っているプラ​​グインの一部で、それらを初期化するinit.phpが付いています。その内容は次のとおりです。

init.php

<?php
require_once(dirname(__FILE__).'/pages/scodes.php');
?>

scodes.php

function jf_testcode() {
    include dirname(__FILE__) . 'profiletemplate.php';
}

add_shortcode('testfield', 'jf_testcode');

profiletemplate.php

<?php // Template for my form shortcode ?>
<form>
Testing
</form>

それから私は自分のサイトのページで[testfield]ショートコードを使います。

アップデート2

そのため、このメソッドは機能していますが、ショートコードが呼び出される場所にHTMLを挿入するわけではありません。その代わりに、単にページの上部にコンテンツを挿入しているだけです(関数で 'return' Testing 'の代わりに' echo 'Testing'を言った場合のように)。

8
William

私の以前のコメントで忘れていたことは、ショートコード return content、提案されたincludeと私の代わりの get_template_part の両方が直接コンテンツを出力するということです。ショートコードが呼び出される場所ではなく、あなたのページのこれに対抗するには、 出力バッファリング を使用する必要があります。

あなたのfunctions.php(またはあなたのサイトの サイト固有の関数 file)でショートコードを定義してください。

function my_form_shortcode() {
    ob_start();
    get_template_part('my_form_template');
    return ob_get_clean();   
} 
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );

それから、テーマフォルダにmy_form_template.phpという名前のファイルが必要です。これはショートコードを配置した場所にロードされます。

18
helgatheviking

functions.php に以下を追加してください。

function my_form_shortcode() {
    include dirname( __FILE__ ) . 'my_form_template.php';
} // function my_form_shortcode
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );

ファイル my_form_template.php

<?php // Template for my form shortcode ?>
<form ...>
    FIELDS
</form>
2
tfrommen