サポート » 使い方全般 » more(続きを読む)がある場合のみ実行する条件分岐方法

  • 解決済 Tonokix

    (@magictoolpc)


    ワードプレスをCMS的に使うべく勉強中です。

    フォーラムやGoogleで検索してみたのですがうまく探しきれなかったので
    できれば皆さんのお力を借りたい次第です。

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

    category.phpにタイトルと本文(more以前)を一覧表示させており、
    single.phpではタイトルと本文(more以降)を表示させております。
    そして、共に共通のsidebar.phpを読み込んでいます。

    moreが存在しない場合にはsidebar.phpを読み込まないような
    状態にしたいのですが、どのように実装すれば可能でしょうか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • #未検証。「〜」は省略の意味ですー。

    global $post, $page, $pages;
    $hasmore = false;
    
    //ここからループ処理
     〜
    the_post();
     〜
    the_content(); // とか get_the_content() とか
     〜
    $content = $pages[$page - 1];
    if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) )
      $hasmore = true;
     〜
    //ここまでループ処理
    
    if ( $hasmore )
      get_sidebar();
    トピック投稿者 Tonokix

    (@magictoolpc)

    kzさん

    回答ありがとうございます。
    経験が浅くphpもろくに理解していないため
    記述内容がよくわからず理解がむずかしかったです。

    sidebar.php内に下記を記述しています。

    <?php if(is_category() or is_single()): ?>
    ここは処理を書いてます。
    <?php endif; ?>

    moreがある場合にのみsidebar.php内の

    <?php if(is_category() or is_single()): ?>内容<?php endif; ?>

    を実行するといった場合はどう条件分岐すればよろしいでしょうか??

    sidebar.php を読み込まない、ではなく
    sidebar.php 内の一部を実行する、なら以下のとおり:

    ※more があったかどうかは category.php, single.php で判断します。

    category.php, single.php を以下の *ように* 記述。

    global $post, $page, $pages;
    $hasmore = false;
    
    //ここからループ処理
     〜
    the_post();
     〜
    the_content(); // とか get_the_content() とか
     〜
    $content = $pages[$page - 1];
    if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) )
      $hasmore = true;
     〜
    //ここまでループ処理
     〜

    sidebar.php を以下の *ように* 記述。

    <?php
    if ( $hasmore ) :
      if(is_category() or is_single()):
    ?>内容<?php
      endif;
    endif;
    ?>

    で OK◎

    トピック投稿者 Tonokix

    (@magictoolpc)

    kzさん

    ご回答ありがとうございます。

    すみません、何度か試してみたのですがうまく動作しないです。
    ちょっと質問なのですが、下記の記述は<?php ?>などで囲む必要はありますでしょうか?
    投稿ページで実装をしたいのですが、その際には$pages[$page – 1];を書き換える必要はありますでしょうか??

    global $post, $page, $pages;
    $hasmore = false;
    
    //ここからループ処理
     〜
    the_post();
     〜
    the_content(); // とか get_the_content() とか
     〜
    $content = $pages[$page - 1];
    if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) )
      $hasmore = true;
     〜
    //ここまでループ処理
     〜

    現状category.phpには下記のように記述しております。

    <?php if(have_posts()):while(have_posts()):the_post(); ?>
    <div class="coArea">
    <h3><?php the_title(); ?></h3>
    <?php the_content(); ?>
    </div>
    <?php endwhile;endif; ?>

    category.phpを下記を試し、

    <?php
    global $post, $page, $pages;
    $hasmore = false;
    ?>
    <?php if(have_posts()):while(have_posts()):the_post(); ?>
    <div>
    <h3><?php the_title(); ?></h3>
    <?php the_content(); ?>
    <?php
    $content = $pages[$page - 1];
    if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) )
      $hasmore = true;
    ?>
    </div>
    <?php endwhile;endif; ?>

    sidebar.phpに

    <?php
    if ( $hasmore ) :
      if(is_category() or is_single()):
    ?>内容<?php
      endif;
    endif;
    ?>

    を追記してみましたがうまく動きませんでした。
    基本的な部分で間違っていますでしょうか??

    何度もどうもお手数おかけします。

    sidebar.phpに

    <?php
    global $hasmore;
    if ( $hasmore ) :
      if(is_category() || is_single()):
    ?>内容<?php
      endif;
    endif;
    ?>

    でどうでしょー

    トピック投稿者 Tonokix

    (@magictoolpc)

    kzさん

    試してみたところ、希望通りの動作になりました!
    お忙しいところ何度もご回答いただきありがとございました^^

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「more(続きを読む)がある場合のみ実行する条件分岐方法」には新たに返信することはできません。