web-dev-qa-db-ja.com

プログラムによる改ページの挿入

プログラムでWordPressに改ページを追加する方法はありますか?

私はこれをウィジェットとして投稿内に入るPHPループ内で実行しようとしています。それはYelpからYelpから取得した情報を生成しますが、私はそのループに<!--nextpage-->改ページを作成させたいです。ループを繰り返すたびに。改ページを含める部分を除いて、私はすべてを終えました。それは明らかにそれが以前に実行されるのでその<!--nextpage-->タグを挿入するだけではうまくいかないからです。

私の質問は、そうするための別の方法はありますか?おそらくフックかフィルタか、それともPHPと同等のものでしょうか。最初に質問をする方法がわからなかったので、他にどのように質問を明確にするのかわからないので、必要なものを述べています。

更新日:私は私がショートコードとして使えるようにするプラグインを使ってみることもしました、それから私はPHPの中でdo_shortcodeを使うことを試みました、そしてそれはタグとして飛び出しますがコメントとして取り込まれます。

1
Lloan Alas

デフォルトの改ページをオーバーライドする - 外部コンテンツパーツを使用する

ループ内でWP_Query::setup_postdata()を呼び出すと、改ページはthe_post()メソッドで発生します。

ページ部分はグローバルな$pages配列に格納され、get_the_content()関数で取得されます。

これはthe_contentフィルタがコンテンツに適用される前にすべて起こります。

このデフォルトの改ページは、私たち自身のget_the_content()ラッパーを使って修正することができます。

テーマテンプレートにこれがあるとしましょう。

// Display
the_content();

// Paging
wp_link_pages();

以下は、いくつかの外部コンテンツ部分を使用して改ページを修正する2つの方法です。

1)子テーマの変更

対応する子テーマでは、これを次のように置き換えます。

// 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();

2)フィルターによる修正

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];
}
1
birgire