【WordPress】個別記事に関わる関数/single.php

index.php関連はこちら↓

投稿した記事に用いられる関数のメモを残します。

スポンサーリンク

WordPressテンプレート階層

まず事前に、WPにはテンプレート階層が存在し、ファイル名によって表示するページのテンプレートが決まるようになっています。つまりは、命名規則があります。

今回は、個別記事ページを作っていきたいので「single.php」ファイルを作成します。

1年前にちょこっとかじったPHPのFW「Laravel」も命名規則バッキバキでしたw
PHPのFWってこういうのが多いのか。。?(いや、そんなことないか?)

WPテンプレート階層(Codex)

個別記事ページに使う関数/single.php

1.the_content()
 記事の中身を表示させる関数。ブロックエディタで作成したHTMLがそのまま書き出されるためタグで囲う必要はなし!

2.wp_link_pages()
 記事内の改ページに対するページャー表示。自動的にHTMLが書き出されるためタグで囲う必要はない。引数にパラメータを入れる事で、任意の文字列にしたりカスタマイズが可能。

2-1.wp_link_pages()パラメータの癖
 任意の文字列にする場合、nextpagelinkとpreviouspagelinkにStringを代入するのですが、また別の引数であるnext_or_numberがnumber以外の設定時でなければ効きません。
 個人的に、ハマったポイントなのですが、以下のコードでちゃんと実証ができました。

<?php 
    $args = array(
      'next_or_number' => '',
      'nextpagelink' => 'next page',
      'previouspagelink' => 'previous page',
    );
    wp_link_pages($args); ?>

 このパラメータを操作する参考記事はこちらです。
 https://elearn.jp/wpman/function/wp_link_pages.html
 https://developer.wordpress.org/reference/functions/wp_link_pages/
 この改ページ機能って使った事ないのですが、需要あるのですかね・・・うーん、思いつかない。。。

3.the_author()
 記事を書いた人を表示する関数。プロフィール等のユーザー登録情報まで表示させたい時は、get_the_author_meta()関数を用いて、引数に取得したいパラメータを入れる。
 get_the_author_meta()については、書き出しがされないのでechoが必要
 get_the_author_meta()パラメータ一覧

4.previous_post_link()/next_post_link()
 「次の記事」と「前の記事」を表示させるページャー。引数に「%link」と入れることで、前後の記事タイトルが<a>タグで出力される。

  <?php next_post_link('%link'); ?>
  <?php previous_post_link('%link'); ?>

4-1.前後に記事がないかを確認する
 上記previous_post_link()/next_post_link()の関数を使うだけでは、前後にページがないときも発動してしまうので、
 get_next_post()
 get_previous_post( )

 を使ってifで制御させる。

4-2.ページャーを任意の文字列に変更する。


    <?php if(get_next_post()): ?>
      <div class="next-page"><?php next_post_link( '%link','次の記事'); ?></div>
    <?php endif; 
      if(get_previous_post( )):?>
        <div class="prev-page"><?php previous_post_link( '%link','前の記事'); ?></div>
    <?php endif; ?> 

4-3.ページャーを同一カテゴリーのみにスコープさせる。
 第3引数にTRUEを入れる
 参考記事:https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/next_post_link

    <?php if(get_next_post()): ?>
      <div class="next-page"><?php next_post_link( '%link','次の記事',TRUE); ?></div>
    <?php endif; 
      if(get_previous_post( )):?>
        <div class="prev-page"><?php previous_post_link( '%link','前の記事',TRUE); ?></div>
    <?php endif; ?>

5.comment_form()/wp_list_comments()
 記事内コメントの表示に関する関数。
 コメント機能は、comments.phpファイルを作成してパーツを外出し。
 個別記事(single.php)内にcomments_template();関数で呼び出す。

<?php comments_template(); ?>

 comments.php 内に、comment_form()/wp_list_comments()を記述。

 comment_form():入力フォームの表示
  注)comment_form()だけでは、投稿されたコメントが表示されません。あくまでもフォームのみ。
 wp_list_comments():入力されたコメントの表示。<li>タグで書き出されるため、<ul>もしくは<ol>で囲む。

<ol>
 <?php wp_list_comments(); ?>
</ol>
 
<div>
  <?php comment_form(); ?>
</div>

6.the_post_thumbnail()/アイキャッチ画像の表示
 アイキャッチについてのfunctions.php記載方法、関数の説明については、index.phpについて記載した記事をご参照ください。
 アイキャッチに関する関数の記事はこちら。
 下記コードは、アイキャッチの設定がない場合は画像を表示しません。(elseに何も記載しない)
 index.phpの記事内では、任意のclass名を付けておりませんでしたが、下記コードでは任意のclass名に置き換えをしています。

    <?php 
      if(has_post_thumbnail(  )){
        the_post_thumbnail( 'medium', array('class' => 'th-image'));
      }
    ?>

7.パンくずリストの表示
 get_the_category()でカテゴリを取得して、配列を格納。<a>タグにget_category_linkでURLを書き出す。Stringの表示はget_the_category()の戻り値であるcat_nameを出力。
get_the_category()の戻り値一覧はこちら
get_category_link()の詳細はこちら

<ul class="bc">
  <li class="bc-list"><a href="<?php echo esc_url(home_url('/')); ?>">Home</a></li>
  <li class="bc-list">
    <?php
     $cat = get_the_category( );
     $cat = $cat[0];
     {echo '<a href="'.get_category_link($cat ->term_id).'">'.$cat->cat_name.'</a>';} ?>
  </li>
</ul>

パンくずリストは、functions.phpで設定して、各個別ページphpには実行関数で読み込むという方法もあるそうです。こちらの記事がとても参考になります。
WordPress プラグインなしでパンくずリストを表示 | ウインドミル (wind-mill.co.jp)

カテゴリーごとのページを表示する場合

カテゴリーごとの表示は、category.phpもしくはarchive.phpが存在しない場合、index.phpを表示させる仕様になっています。詳しくは、テンプレート階層を参照。
カテゴリごとのページを表示させたい場合は、category.phpを作成する。

1.single_cat_title()
 カテゴリー名称を呼び出す関数。例えば、「News」や「Diary」など。
 この関数は、loop処理に入らないように記述する。

固定ページの作成

管理画面 > 固定ページ > タイトルを入れる > パーマリンク
パーマリンクにPHPファイル名を入れる。

例えば、phpファイル名が「page-aaa.php」の場合、パーマリンクには「aaa」と記入。

phpファイルで作りこむ部分と、管理画面の固定ページ上で入力した部分をドッキングする事が可能。
部分的に文言の変更が時々あったりする場合に、HTMLの知識がなくても更新ができるため便利です。
管理画面から入力された情報を読み込む場合は、phpファイル内に下記コードを追加。

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

タイトルとURLをコピーしました