サポート » 使い方全般 » ループで出力されるコンテンツの間に任意のコードを差し込みたい

  • いつも皆様のお知恵を拝借させていただいています。
    ありがとうございます。

    現在、下記のような、
    ループ処理の途中で、任意のコンテンツを挟み込む仕様について
    解決できずにいます。

    【実現したいこと】
    ループで出力の7件の間に先頭から数えて5番目と6番目の出力のあとに
    任意のコードを差し込みたい

    【出力コードイメージ】
    <div>
    りんご ← ループで出力
    ごりら ← ループで出力
    らっぱ ← ループで出力
    ぱんてぃ ← ループで出力
    てぃぼらん ← ループで出力
    <span>おいおい!</span> ← 差し込み(任意のコード)
    ぼらんてぃあ ← ループで出力
    <p>吾輩は猫である(・ω<)</p> ← 差し込み
    あっこにおまかせ ← ループで出力。ループ抜ける
    </div>

    【現在立ち止まっているコード】home.php(固定ページ用)で使用予定です。

    <ul>
        <?php
    if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
    } elseif ( get_query_var('page') ) {
        $paged = get_query_var('page');
    } else {
        $paged = 1;
    }
    query_posts( array( 'post_type' => 'post', 'posts_per_page' => 9, 'orderby' => 'desc', 'paged' => $paged ) );
    		?>
    
    <?php $adcounter = 0; ?>
        <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
        <?php $adcounter++; ?>
        <?php if ($count == 6) : ?>
        <span>おいおい!</span>
        <?php elseif ($count == 8) : ?>
        <p>吾輩は猫である(・ω<)</p>
    	<?php endif; ?>
    	<?php endwhile; endif; wp_reset_query(); ?>
    </ul>

    6番目と8番目に表示する特定のコードは特定のページのカスタムフィールドに入力した任意のコードで出力させる予定ですが、この6番目と8番目の間でもどちらが6にくるか8にくるか、ランダムに決定できるような将来のアレンジも考えています。

    いろいろ調べてみた結果、下記のサイトの情報が近いように感じたのですが、
    このとおりコードを実装してもうまく動作せず、ここで立ち往生しています。

    http://www.agentwp.com/how-to-insert-adsense-code-after-first-second-or-nth-post-in-wordpress

    すごく複雑な処理が必要だと思いますので、なかば諦めてoffsetでいくつもループを作ろうかと考えていますが、スマートなやり方についてアドバイスいただけましたら嬉しいです。

    なんとか、この限界を超えたいです。

    どうぞよろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • カウント処理にadcounter変数を使っているのに条件分岐がcountなせいではないでしょうか?

    gogoweb様

    さっそくのアドバイスありがとうございました。

    $countを$adcounterに変更したところ、
    6件目の後ろと、8件目の後ろに表示させられました。
    合計11件表示です。

    このやり方が実際ベストなのか引き続き模索してみたいと思います。
    あとは7件目と9件目をそれぞれの間でランダムに表示させる方法も
    引き続き募集中でございます。

    取り急ぎお礼申し上げたいと思いました。

    ありがとうございました。

    こんにちは

    なんとか、この限界を超えたいです。

    こういうのに弱いので、、、

    Twentyelevenのindex.phpの内容を、以下に置き換えてみてください

    手直し

    <?php
    /**
     * The main template file.
     *
     * This is the most generic template file in a WordPress theme
     * and one of the two required files for a theme (the other being style.css).
     * It is used to display a page when nothing more specific matches a query.
     * E.g., it puts together the home page when no home.php file exists.
     * Learn more: http://codex.wordpress.org/Template_Hierarchy
     *
     * @package WordPress
     * @subpackage Twenty_Eleven
     */
    /* 気に入ったら この区間は functions.phpへ移動 */
    	add_filter( 'the_content','my_ad_add' );
    
    	function my_ad_add( $content ){
    
    		$advertizing_data = array( 'AAA','おおお','へへへ' );
    
    		$randamize = rand( 0 , 2);
    
    		$advertizing_text = $advertizing_data[ $randamize ];
    
    		$count = my_count();
    
    		if( $count > 5 and $count < 10 ) {
    
    			return $content. $advertizing_text;
    		}
    		return $content;
    
    	}
    
    	function my_count(){
    		static $my_count = 1;
    
    		return $my_count++;
    
    	}
    /* この区間は functions.phpへ移動  ここまで */
    
    get_header(); ?>
    
    		<div id="primary">
    			<div id="content" role="main">
    
    			<?php if ( have_posts() ) : ?>
    
    				<?php twentyeleven_content_nav( 'nav-above' ); ?>
    
    				<?php /* Start the Loop */ ?>
    				<?php while ( have_posts() ) : the_post(); ?>
    
    					<?php get_template_part( 'content', get_post_format() ); ?>
    				<?php endwhile; ?>
    
    				<?php twentyeleven_content_nav( 'nav-below' ); ?>
    
    			<?php else : ?>
    
    				<article id="post-0" class="post no-results not-found">
    					<header class="entry-header">
    						<h1 class="entry-title"><?php _e( 'Nothing Found', 'twentyeleven' ); ?></h1>
    					</header><!-- .entry-header -->
    
    					<div class="entry-content">
    						<p><?php _e( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'twentyeleven' ); ?></p>
    						<?php get_search_form(); ?>
    					</div><!-- .entry-content -->
    				</article><!-- #post-0 -->
    
    			<?php endif; ?>
    
    			</div><!-- #content -->
    		</div><!-- #primary -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    nobita様

    コードのご紹介ありがとうございます!

    おおぉ~~!!!

    まったく何が書いてあるのかわかりません!(笑)

    the_contentということはコンテンツ入力エリアに何かしでかしているのでしょうかね。

    $advertizing_data = array( ‘AAA’,’おおお’,’へへへ’ );


    このAAAやおおおなどの部分にHTMLを記述すればいいということなんですね。
    もし、ここがカスタムフィールドの特定の値の場合も、post_customなどで値を代入すればいいということでしょうか。

    拝見したところでは、index.phpをもとにされているので、
    6番目と8番目だけ、the_contentの値を記入したものでなく、functionの中に書いたさきのAAAとおおおなどを返すといったことなのかなとお見受けしました。

    同様の処理を、もし最初に私が記述させていただいたコードの中で実装可能か(つまり、the_contentをつかわない方法など)ご教授いただけますと嬉しいです。

    いつも質問ばかりですみません。

    コード手直ししたので、もういっぺん確認して置いてください

    そのコードを、functions.phpに貼り付けると、カテゴリでも、アーカイブでも、6番から9番までの投稿本文の後ろに、追加文字列が張り付きます。

    テンプレートを書き直す手間がないので、簡単なんじゃないかなと、、、

    同様の処理を、もし最初に私が記述させていただいたコードの中で実装可能か(つまり、the_contentをつかわない方法など)ご教授いただけますと嬉しいです。

    多分、大丈夫だと思います。
    試してないですが、query_postの前に、

    $advertizing_data = array( 'AAA','おおお','へへへ' );
    
    $randamize = rand( 0 , 2);
    
    $advertizing_text = $advertizing_data[ $randamize ];

    で、<span>おいおい!</span>の代わりに、echo $advertizing_text;

    で、いいような気がします。(試していないです)

    nobita様

    またまたご紹介くださいましてありがとうございました。

    試させていただいて、またご報告できるようにいたしますね。

    そのコードを、functions.phpに貼り付けると、カテゴリでも、アーカイブでも、6番から9番までの投稿本文の後ろに、追加文字列が張り付きます。

    こちら少し気になりました。

    というのは、今回はトップページ(home.phpで固定)や、特定の固定ページにて同様のquery_postsを書いて、今回の実装を配置したいと考えておりまして、

    その他の、カテゴリーやアーカイブページにおいて同様の処理が走ってしまうと、ちょっと面倒なことになってしまいます。

    私の説明が足らず、

    せっかく、先のことまで考えてくださって効率のよいコードをくださったのに、すみません。

    もし、このfunctions.phpに書くコードをカテゴリーやページごとに条件分岐できる方法ございましたらご示唆くださいましたらと思います。

    何度もすみませんです。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「ループで出力されるコンテンツの間に任意のコードを差し込みたい」には新たに返信することはできません。