コード
メニューとウィジェットを表示させる
メニューとウィジェットって、混同しやすいのは私だけ?
冷静に考えれば全然別物だけど、それらをサイト表示させる時のコードを比較の意味でこの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.phpにadd_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】微妙に違うheaderを読み込む
フロントページとそれ以降のページのヘッダーやフッターを少しだけ変えたい時。
そう、一字変えたくても同じheader.phpは使えないですよね。
そんな時は新しいheader.phpを作るわけですが、その名前の付け方に決まりがあります。
header-name.php
「name」のところに任意の名前をつけますが、必ず-(ハイフン)でつなぐこと。
よくある_(アンダーバー)では機能しません。その上で、
get_header( 'name' )
とします。
また、get_template_partを使うときは少し違っていて、
get_template_part( '特定テンプレートの名前' )
となり、
get_template_part( 'header-name' )
のように表記しなければなりません。
ついごっちゃになってしまうけど、これらの機能はとても便利なのです。