Nakkan Base

コード

メニューとウィジェットを表示させる

メニューとウィジェットって、混同しやすいのは私だけ?

冷静に考えれば全然別物だけど、それらをサイト表示させる時のコードを比較の意味でこの1ページに書いておこうと思う。

ファイルは、home.phpとかfront-page.phpとかtop.phpとかindex.phpになると思いますが、その時それぞれで。

=メニューの場合(下はサイドバー表示の場合)=

<aside class="sidebar">

      <?php register_nav_menu( 'side-nav', 'サイドナビゲーション', ); ?>

      <?php wp_nav_menu( array( 'theme_location' => 'side-nav' ) ); ?>
   
</aside>

=ウィジェットの場合=

<div class="sidebar">
  <?php
  if (is_active_sidebar('sidebarのID')) :
    dynamic_sidebar('sidebarのID');
  else :
  ?>
    <div class="widget">
      <h2>No Widget</h2>
      <p>ウィジットは設定されていません。</p>
    </div>
  <?php endif; ?>
</div>

これを混同して、ウィジェット表記の場所にメニュー表記をしてしまい、メニュー以外のウィジェットが表記されず「????」ってなっていたのであった。

ひとつの記事を抜粋じゃなくそのまま表示したい(カスタム投稿の場合)

こういう時は、迷わず次のようなコードを使っていた。

  <div class="info">
	  <h2><?php echo get_the_title(345); ?></h2>
  <p>
   <?php 
	  $page_data = get_page_by_path('greetings');
	  $page = get_post($page_data);
    $content = $page->post_content;

    echo apply_filters('the_content', $content); ?>
  </p>
  </div>

これで思い通り表示されるので、問題ないと思っていた。

ところが・・・

これが使えるのは、投稿ページのトップに表示することを指定した記事と、固定ページのみだということが判明!

わざわざ太字かつ赤字にしちゃったけど、正直それぐらい衝撃的だった。

今回、カスタム投稿なるものを作ってしまったため、そしてその記事をトップページに表示したかったため、この問題と丸一日格闘したことを書いておこうと思う。

結論から言うと、次のコードをトップページとなるhome.phpに記入することで解決した。

  <div class="info info1">
	 <h2><?php echo get_the_title(342); ?></h2>
	  
	  <?php
	 $page_id = 342; //表示したい固定ページのページID
	  $alternative_post = get_post( $page_id );
	 echo apply_filters('the_content', $alternative_post->post_content); ?>
	  
	</div>

おや? もしかしてこの方が簡単だぞ…。

パスとなる’スラッグ’書かなくて良いもんね。

めでたし。

カテゴリーページのカテゴリーネームを表示する

ウィジェットなどの『カテゴリー』項目をクリックした時、もしそのカテゴリーが空でもタイトルには【カテゴリーネーム】(例えば「ブログ」とか「趣味」とか)を表示させたいですよね?

こんな風に…↓

category.phpには、「カテゴリー名を出力する」ために

<?php
    $category = get_the_category(); // これがまず必要
    $cat_name = $category[0]->cat_name; // カテゴリ名を変数$cat_nameに代入
    echo $cat_name; // カテゴリ名を出力
?>

のように記述してありますが、これだと上のようにはならなくて、タイトルが表示されたりされなかったり(投稿ページのカテゴリータイトルは表示されたが、固定ページのそれは非表示)。

このようになります。↓

実はこの「カテゴリーの表示」には他にも問題が発生しまして、PHPを8.0以上にアップしたせいか、今までと同じ記述をしてもエラーが出てしまうという…(怖💦)

それらが全て絡んでいるのか、はたまた別々の問題なのかさえもわからず、悩みまくりです(現在進行形)😱

で、とりあえずこの問題に関しては解決したのでメモ。

これは

<h3><?php single_cat_title(); ?></h3>

このたった1行でよかったんです!

これで最初の画像のように、全ての項目においてちゃんとカテゴリータイトルが表示されるようになりました。

【WordPress】カスタムヘッダーの設置

カスタムヘッダーの設置は、functions.phpadd_theme_support()で追加できる。

…のは知っていた。

知っていたけど、理解してたかというと、していなかった感じ。

要はfunctions.phpに機能を追加するだけではダメで、header.phpも触らないといけないのです。

=functions.php=

// カスタムヘッダー
add_theme_support( 'custom-header' );

=header.php=

  <!-- custom header -->
<?php $header_image = get_header_image();
          if ( ! empty( $header_image ) ) : ?>
 <div id="header_img">
  <a href="<?php echo home_url(); ?>"><img src="<?php header_image(); ?>" alt="<?php bloginfo('name'); ?>"  /></a>
 </div>
<?php endif;?>

この<?php header_image(); ?>を何というか初めて理解したわけです。

自分で作ったテーマのヘッダーが、どうして変更できなかったかという理由がわかったわけです。

header.phpを書き換えてなかった。

「別にいいや」と思って放置していたので、今回このように恥ずかしいことになりました。

まあでも、このブログはこういう超初心者さんのためのものなので、お役に立てていただきたいと思います。

すごくよくわかるリンク様を貼っておきます。

★WordPressにヘッダー画像機能(カスタムヘッダー)がない場合の作り方

【WordPress】微妙に違うheaderを読み込む

フロントページとそれ以降のページのヘッダーやフッターを少しだけ変えたい時。

そう、一字変えたくても同じheader.phpは使えないですよね。

そんな時は新しいheader.phpを作るわけですが、その名前の付け方に決まりがあります。

 header-name.php 

「name」のところに任意の名前をつけますが、必ず-(ハイフン)でつなぐこと。

よくある_(アンダーバー)では機能しません。その上で、

get_header( 'name' )

とします。

また、get_template_partを使うときは少し違っていて、

get_template_part( '特定テンプレートの名前' )

となり、

get_template_part( 'header-name' )

のように表記しなければなりません。

ついごっちゃになってしまうけど、これらの機能はとても便利なのです。