サポート » 使い方全般 » single.phpでmoreの前後を別々に表示したい

  • 解決済 sigeo

    (@sigeo)


    やりたいことは、<!–more–> の直下、記事続きが始まる前に
    全ページ共通のコンテンツをデフォルト挿入したいということです。

    MTの場合だと普通に出来るのですが、WPではその概念がなかったようでしたので、
    お分かりになる方がいらっしゃいましたらご教示いただけますでしょうか。

    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    sigeoさん、こんにちは。

    プラグインにすることも出来ますが、今回はお手軽にユーザー関数での実装でいってみます。
    まず、利用しているテーマフォルダ内にある、functions.phpに以下のコードを追加します。(<?php ?>の括りの中にいれてください。)
    これが呼び出されると、本来一括りにされていたmore前後の記事のhtmlが分けられた状態で
    戻されてきます。

    function get_the_divided_content( $more_link_text = null, $stripteaser = 0, $more_file = '' ) {
    	$regex = '#(<p><span id="more-[\d]+"></span></p>|<span id="more-[\d]+"></span>)#';
    	$content = get_the_content( $more_link_text, $stripteaser, $more_file );
    	$content = apply_filters( 'the_content', $content );
    	$content = str_replace( ']]>', ']]&gt;', $content );
    	if ( preg_match( $regex, $content ) ) {
    		list( $content_array['before'], $content_array['after'] ) = preg_split( $regex, $content, 2 );
    	} else {
    		$content_array['before'] = '';
    		$content_array['after'] = $content;
    	}
    	return $content_array;
    }

    次に、投稿、ページのテンプレート(single.phpやpage.phpなど)内の

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    の記述直後で、先ほど記述した関数を呼び出します。

    <?php $content = get_the_divided_content( '<p class="serif">続きを読む
    ' ); ?>

    記事の出力については、まず全文出力してしまう

    <?php the_content( ************* ); ?>

    という記述を削除します。(バックアップはとっておいてください。)
    その代替として、more以前の記事を

    <?php echo $content['before']; ?>

    で出力。
    その後に、共通コンテンツを記述して、
    最後に下記コードでmore以降の記事を出力します。

    <?php echo $content['after']; ?>

    なお、moreタグが無い場合は、共通コンテンツの後に記事が表示されるようになっています。

    MTをご存じの方なので、テンプレートの編集などは問題ないと思いますが、ご不明な点などあれば返信ください。

    トピック投稿者 sigeo

    (@sigeo)

    jim912さん、こんにちは。

    すみません、ずっと気付いていませんでした。

    ありがとうございます。
    実現することが出来ました。

    早速いろいろなところで試してみます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「single.phpでmoreの前後を別々に表示したい」には新たに返信することはできません。