web-dev-qa-db-ja.com

コンテンツフックと外部テンプレートパーツの後のWordpress

私は この方法を使用しようとしています プレーンテキストを使用するのではなく、テンプレート部分(HTML Code)を含めるようにしています。テキストを使用すると、the_contentフィルタを使用してコンテンツの下に正しく表示されます。ただし、get_template_partを実行しようとすると、コンテンツはコンテンツの下ではなく、Wordpressの投稿の上部に表示されます。

Wordpressの単一コンテンツの前後にテンプレート部分を追加/取得するためのより良い方法はありますか?

これは私がフィルタで試しているコードです:

function educadme_book_fields_content_hook( $content ) {    
if( is_singular('books') ) {            
$beforecontent = '';
$aftercontent = get_template_part( 'parts/book', 'fields' );
$fullcontent = $beforecontent . $content . $aftercontent;
return $fullcontent;
}

また試してみました:

$content .= get_template_part( 'parts/book', 'fields' );
return $content;

それでも、get_template_partのすべてのコンテンツと同じ問題が、the_contentだけでなくタイトルの上にも表示されます。ありがとうございます。

1
Dr.Hariri

Get_template_partとrequireは、コンテンツをコンテンツの上に表示し、下には表示しないため使用できませんでした(Thanks @benoti)ので、別の方法を使用することにしました。

ob_start(); ?>
<? global $post; ?>

Long HTML Content with some PHP variables inside to load all the custom fields & style I wanted instead of using an external file which I prepared before.

<?php
$book_fields = ob_get_clean();      
$fullcontent = $content . $book_fields;
return $fullcontent;
1
Dr.Hariri

関数からのreturnechoの組み合わせはテキストの位置を変えることに注意してください。

あなたがこの簡単な例を取るならば:

function test(){
    $the_test = 'test return';
    echo 'test echo';
    return $the_test;
}

echo test();

エコーされた行の場所にかかわらず、echoはreturn $the_test;の前に呼び出されるため、この行は常にecho test();の前に出力されます。

表示するには、 get_template_part および/または template_redirect アクションを実行する必要があります。あなたが望むようなコンテンツ。

私が何を意味するのか、そしてあなたの問題との関係を理解し​​てください。

1
Benoti