見出し画像

使いこなすべし!WordPressでfunctions.phpから制御できる便利コード3選

add_theme_support

WordPressを組み込むサイトは、メディアサイトが大多数を占めるかと思います。メディアサイトにはサムネイル(WordPressでいうアイキャッチ)は必須ですよね。そんなときに使えるコードをご紹介します。

■アイキャッチ機能を追加

<?php add_theme_support('post-thumbnails'); ?>

上記のコードを挿入すると記事のサイドバーにアイキャッチ画像を指定するエリアが出てきます。


add_image_size

任意のサイズのアイキャッチ画像を出力

上記したアイキャッチ画像機能の追加はほぼ必須ですが、こちらも使いこなせるとよりよいかと思うのであわせてご紹介します。

アイキャッチ画像を出力するとき、WordPressのデフォルトで用意されている出力サイズは

・thumbnail ー 150 x 150

・medium ー 300 x 300

・large ー 640 x 640

・full ー アップロードした画像の元サイズ

・array(横, 縦) ー 指定した数値のサイズ

の5種類が用意されています。出力するときは、

<?php the_post_thumbnail('xxx'); ?>

'xxx'の部分に上のどれかの値を入力するとアイキャッチ画像は表示されます。しかし、画像が大量に表示されるようなサイトではなるべくサイズが小さすぎずも大きすぎずもない、適したサイズで画像を出力させて軽量化したいですよね。

そんなときに使えるのが以下のコードになります。

<?php add_image_size('bestSize',1200,9999); ?>

このように、第一引数で「任意の名前」、第二引数で「横サイズ」、第三引数で「縦サイズ」を指定し、the_post_thumbnail関数の'xxx'の箇所に「任意の名前」を入力すると、横幅1200pxの画像を出力する事ができます。(サイズを「9999」と指定すると、autoと同義で出力されます)。

3度以上同じサイズで画像を出力するならば、array()で定義するよりも使いまわせるimage_sizeを定義してあげた方が有用になりますね。

参考URL:https://wpdocs.osdn.jp/テンプレートタグ/the_post_thumbnail


$query->set

WordPressには大まかに分けてメインループとサブループという2種類のループがあり、メインループは

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

とはじめ、サブループは

<?php $query = new WP_Query( 'cat=-3,-8' ); ?>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>

このように、WP_Queryで条件を指定して始めるループの事を指します。

(ループについての公式ドキュメントはこちら


サブループは同じページで複数のループを回せたり、条件をその場で指定できたりと便利なのですが、category.phptag.phparchive.phpなどファイル名からWordPressが自動的に処理を読み込んでくれるファイルの中身は、メインループで記述しなければページネーションなどのバグがかなり起こりやすいです。

ですが、例えば記事の表示件数を変えたい…、並び順を変えたい…などと制御したいときに推奨されるのが以下の手法になります。

一度例として、コードを記述します。

■メインループの条件を制御

function mainloop_query( $query ) {
 if ( is_admin() || ! $query->is_main_query() ) {
   return;
 }

 if ( $query->is_category() || $query->is_tag()) {
   $query->set( 'posts_per_page', 12 );
   $query->set( 'orderby', 'date' );
   $query->set( 'order', 'desc' );
 }
}
add_action( 'pre_get_posts', 'mainloop_query' );
if ( is_admin() || ! $query->is_main_query() ) {
   return;
 }

この記述は管理画面のループに干渉しないようにしています。そして、

if ( $query->is_category() || $query->is_tag()) {

category.phpとtag.phpのメインループの中身に限定して、

$query->set( 'posts_per_page', 12 );

表示件数を12件にして、

 $query->set( 'orderby', 'date' );

並び替えを日付順し、

$query->set( 'order', 'desc' );

並び順を降べきにする、という制御ができるという事です。

ループ文の条件を指定できる他の書き方として、query_posts()という関数もありますが、こちらのループを回した後にwp_reset_query()を記述し忘れると他ページのクエリも書き換えられてしまったり、意図せぬ挙動を引き起こしてしまうため現在非推奨とされています


いかがでしたでしょうか?

functions.phpはコードの書き方をミスすると全画面真っ白になる!いじるの怖い!と言われがちですが、使いこなすとよりよいサイト運営が実現できます。ぜひ参考にしてください。




 

この記事が気に入ったらサポートをしてみませんか?