プログラムでWordPressに改ページを追加する方法はありますか?
私はこれをウィジェットとして投稿内に入るPHPループ内で実行しようとしています。それはYelpからYelpから取得した情報を生成しますが、私はそのループに<!--nextpage-->
改ページを作成させたいです。ループを繰り返すたびに。改ページを含める部分を除いて、私はすべてを終えました。それは明らかにそれが以前に実行されるのでその<!--nextpage-->
タグを挿入するだけではうまくいかないからです。
私の質問は、そうするための別の方法はありますか?おそらくフックかフィルタか、それともPHPと同等のものでしょうか。最初に質問をする方法がわからなかったので、他にどのように質問を明確にするのかわからないので、必要なものを述べています。
更新日:私は私がショートコードとして使えるようにするプラグインを使ってみることもしました、それから私はPHPの中でdo_shortcode
を使うことを試みました、そしてそれはタグとして飛び出しますがコメントとして取り込まれます。
ループ内でWP_Query::setup_postdata()
を呼び出すと、改ページはthe_post()
メソッドで発生します。
ページ部分はグローバルな$pages
配列に格納され、get_the_content()
関数で取得されます。
これはthe_content
フィルタがコンテンツに適用される前にすべて起こります。
このデフォルトの改ページは、私たち自身のget_the_content()
ラッパーを使って修正することができます。
テーマテンプレートにこれがあるとしましょう。
// Display
the_content();
// Paging
wp_link_pages();
以下は、いくつかの外部コンテンツ部分を使用して改ページを修正する2つの方法です。
対応する子テーマでは、これを次のように置き換えます。
// Setup our content parts
$parts = [ get_the_content(), 'Part Two', 'Part Three', 'Part Four' ];
// Display
if( function_exists( 'get_the_content_part_wpse194155' ) )
echo apply_filters( 'the_content', get_the_content_part_wpse194155( $parts ) );
else
the_content();
// Paging
wp_link_pages();
the_content
フィルタを使うこともできます。例:
! is_admin() && add_filter( 'the_content', function( $content )
{
if( ! in_the_loop() || ! function_exists( 'get_the_content_part_wpse194155' ) )
return $content;
// Setup our content parts
$parts = [ $content, 'Part Two', 'Part Three', 'Part Four' ];
// Display
return get_the_content_part_wpse194155( $parts );
} );
ここでは、デモンストレーション用に静的コンテンツ部分を使用しているだけです。一般的に、投稿ごとに異なるコンテンツ部分があります。
カスタムラッパーは次のように定義されています。
/**
* Modify globals to support page breaks between given content parts
*
* @param array $parts Array of content parts
* @return string|null A single content part
*/
function get_the_content_part_wpse194155( array $parts )
{
global $page, $pages, $multipage, $numpages;
// No paging needed
if( count( $parts ) <= 1 )
return array_pop( $parts );
// Init
$out = '';
$break = '<!--nextpage-->';
$page = (int) get_query_var( 'page' );
// Loop - add page breaks between parts
foreach( (array) $parts as $part )
$out .= $part . $break;
// Remove the last empty page break
if( count( $parts ) > 0 )
$out = mb_substr( $out, 0, -1 * strlen( $break ) );
// Adjust the globals
$pages = explode( $break, $out );
$page = ( $page > count( $pages ) || $page < 1 ) ? 1 : $page;
$numpages = count( $pages );
$multipage = 1;
return $pages[$page-1];
}