ショートコード内のテンプレート部分、予期しない結果

Aug 16 2020

ショートコードでテンプレートパーツを呼び出そうとしています。私はこのサイトでこれを何度も繰り返す方法についてすべて読みましたが、それでもいくつかのことを試した後でも、単純なphpエコー時間文字列を呼び出すことができません。ファイル名はtest- one.phpです。これが私が試したものです:

function test_2( $attr ) {
    ob_start();
    get_template_part( 'test', 'one' );
    return ob_get_clean();
}

add_shortcode('test2', 'test_2');

function test_2( $attr ) {
    ob_start();
    get_template_part( 'test-one' );
    return ob_get_clean();
}
add_shortcode('test2', 'test_2');

function test_2( $attr ) {
    ob_start();
    get_template_part( 'wp-content/themes/theme-name/template-parts/test-one' );
    return ob_get_clean();
}

add_shortcode('test2', 'test_2');

テンプレートパーツコードは

<?php

echo "Current as of <br>  ".date("m-d-Y h:i:sa");

うまくいくはずですよね?どこが間違っているのですか?

回答

2 Howdy_McGee Aug 17 2020 at 00:25

このget_template_part()関数はディレクトリ名を想定していないため、明示的に指定する必要があります。また、アクティブなテーマディレクトリにも関連しています。そのため、多くの例では、アクティブなテーマのルートにあるテンプレートを探していました。正しい形式は次のとおりです。

get_template_part( 'template-parts/test-one' );

必要に応じて、フォルダの名前をincまたはに変更できますincludes。これは任意です。この変更を関数呼び出しに反映する必要があります。


ちなみに、WordPressでは2番目のパラメーターを渡すことができ、ダッシュで結合されたファイルを検索します。たとえば、これも機能します。

get_template_part( 'template-parts/test', 'one' );

これの利点は、特定のパーツの複数の「タイプ」を持つことができることです。content-post.php投稿コンテンツを出力するためのファイルと、content-page.phpページコンテンツを出力するためのファイルがある場合があります。次に、テーマで次の方法でテンプレートを呼び出すことができます。

get_template_part( 'template-parts/content', $post->post_type );

少しダイナミックにするだけです。


別のサイドノート。これらの種類の機能で問題が発生したときはいつでも、いつでも使用できます。

add_action( 'init', function() {
    $template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
    die( 'end' );
} );

これにより、WordPressがテンプレートにアクセスしようとしているテンプレートパスが出力されます。