doudonn WEB制作やサーバーの話とかいろいろ

プラグインを使わないワードプレスの高速化方法を紹介

doudonn 更新日:
プラグインを使わないワードプレスの高速化方法を紹介

ワードプレスの高速化!

前にも書きましたが、いかにDBへアクセスさせないか?となる。
ちょっと面倒だけど効果の高い方法を紹介します。

※ページ丸ごとキャッシュ以外の方法で

1、ページ表示を軽くする考え方

次の2つです。

・サブクエリを使わない
・関数をできるだけ使わない

サブクエリ(WP_Query)での記事一覧取得などは絶対にしてはいけない。
そして、「get_the_category()」などの関数も使ってはダメです。
この二つを守ると劇的に軽くなる。

ではどうやって実現するのか?を書いていく。

2、ページ情報を記載したファイルを作る

<?php
$postid = '1375';
$title = 'ワードプレスは記事データのキャッシュが必須!という話';
$permalink = 'https://doudonn.com/wa-dopuresu/1375/';
$text = 'ワードプレスはとにかく軽くするベテランほど軽さを重視するだろう。良いサーバーも大事ですが、軽くすることの方が大事です。このあたり…';
$eyecatch_medium_large = 'https://doudonn.com/tenpu/2022/12/ai1375-768x403.jpg';
$eyecatch_full = 'https://doudonn.com/tenpu/2022/12/ai1375.jpg';
$cat_id = '17';
$cat_name = 'ワードプレス';
$cat_slug = 'wa-dopuresu';
$posted_date = '2022/12/25';
$the_modified_date1 = '2022-12-28T14:04:43+09:00';
$the_modified_date2 = '2022/12/28';
$nextpost_id = 'https://doudonn.com/wa-dopuresu/1398/';
$extpost_title = 'ワードプレスで絶対やる初期設定5選(あまり書かれていないやつ)';
$prevpost_id = '';
$prevpost_title = '';
$tagumei = array('キャッシュ');
$tagumei2 = 'キャッシュ';
$taguid = array('20');
$datePublished = '2022-12-25T17:20:22+09:00';
$tagusuu = '0';
?>

※自分に必要なデータだけ取得ください

予め使う記事データは取得してキャッシュとしてファイルにしておきます。
やり方は「ワードプレスは記事データのキャッシュが必須!という話」を見てみてください。

これがあるとサブクエリも関数も使う必要が無くなる。
最初に一度読み込んで、変数として使っていきます。

※容量を抑えるべく変数名はもっと短くするのが良い

3、具体的な使い方(header.php)

最初の読み込み

if(is_single()){

global $cat_id,$cat_name,$cat_slug,$postid,$title,$permalink,$the_modified_date1,$the_modified_date2,$nextpost_id,$nextpost_title,$prevpost_id,$prevpost_title,$tagumei,$tagumei2,$taguid,$tagusuu,$eyecatch_full;

$kcache= "/home/example/example.com/public_html/cache/".$post->ID.".php";
include($kcache);
}

他のテンプレートでも変数を使うため、「global」を指定します。
その後にファイルを読み込む。

構造化データ

<?php if(is_single()):?>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage":{
"@type":"WebPage",
"@id":"<?php echo $permalink;?>"
},
"headline": "<?php echo $title;?>",
"image": {
"@type": "ImageObject",
"url": "<?php echo $eyecatch_full;?>",
"width": 1200,
"height": 630
},
"datePublished": "<?php echo $datePublished; ?>", 
"dateModified": "<?php echo $the_modified_date1; ?>", 
"author": {
"@type": "Person",
"name": "doudonn",
"url": "https://doudonn.com/"
},
"description": "<?php echo $text; ?>"
}
</script>
<?php endif; ?>

関数を多用しがちな構造化データも変数で対応できる。
アイキャッチ画像はサイズを統一すると無駄が無くて良い。

ogp

<?php
if( is_home() || is_single() ){

if( is_single() ) {
$ogp_title = $title;
$ogp_descr = $text;
$ogp_url = $permalink;
$ogp_type = "article";
} elseif (is_home()) {
$ogp_title = "doudonn - WEB制作の話とかいろいろ";
$ogp_descr = "";
$ogp_url = "https://doudonn.com";
$ogp_type = "website";
}

if( is_single() ) {
$ogp_img = $eyecatch_full;
} else {
$ogp_img = 'https://doudonn.com/tenpu/2022/12/20221225ogp.jpg';
}
?>
<meta property="og:title" content="<?php echo $ogp_title ?>" />
<meta property="og:description" content="<?php echo $ogp_descr ?>" />
<meta property="og:type" content="<?php echo $ogp_type ?>" />
<meta property="og:url" content="<?php echo $ogp_url ?>" />
<meta property="og:image" content="<?php echo $ogp_img ?>" />
<meta property="og:site_name" content="doudonn - WEB制作の話とかいろいろ" />
<meta name="twitter:card" content="summary_large_image" />
<meta property="og:locale" content="ja_JP" />
<?php } ?>

このサンプルはトップページ・記事ページだけ対応しています。
自分のサイトに合わせて作成ください。

パンくずリンク

<div id="breadcrumb" class="breadcrumb breadcrumb-categor" itemscope itemtype="https://schema.org/BreadcrumbList">

<span class="breadcrumb-home" itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><a href="https://doudonn.com" itemprop="item"><span itemprop="name">HOME</span></a><meta itemprop="position" content="1" /></span> > 

<span class="breadcrumb-item" itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><a href="https://doudonn.com/<?php echo $cat_slug ?>" itemprop="item"><span itemprop="name"><?php echo $cat_name ?></span></a><meta itemprop="position" content="2" /></span> > 

<span class="breadcrumb-item pankuzu-kijimei" itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><a href="<?php echo $permalink ?>" itemprop="item"><span itemprop="name"><?php echo $title ?></span></a><meta itemprop="position" content="3" /></span>

</div>

親カテゴリとかを使わないなら、こんなにシンプルになる。
使う場合は親カテゴリも最初に取得して組み立てておくと良い。

4、具体的な使い方(single.php)

global指定

global $cat_id,$cat_name,$cat_slug,$postid,$title,$permalink,$the_modified_date1,$the_modified_date2,$nextpost_id,$nextpost_title,$prevpost_id,$prevpost_title,$tagumei,$tagumei2,$taguid,$tagusuu,$eyecatch_full;

こうしないと使えないので必須。

更新日の表示

更新日:<time itemprop="dateModified" datetime="<?php echo $the_modified_date1 ?>"><?php echo $the_modified_date2 ?></time>

次前リンク

<?php if(!empty($nextpost_id)){ ?>
<div class="nextlink">次:<a href="<?php echo $nextpost_id ?>"><?php echo $nextpost_title ?></a></div>
<?php }else{ ?>
<div class="nextlink">次:無し</div>
<?php } ?>

<?php if(!empty($prevpost_id)){ ?>
<div class="prevlink">前:<a href="<?php echo $prevpost_id ?>"><?php echo $prevpost_title ?></a></div>
<?php }else{ ?>
<div class="prevlink">前:<a href="https://doudonn.com">TOPへ戻る</a></div>
<?php } ?>

タグの表示(リンク付き)

<?php if ($tagusuu > 0) { ?>
<li>tag:<?php

for($i=0;$i<$tagusuu;$i++){ ?>
<span><a href="https://doudonn.com/tag/<?php echo $tagumei[$i] ?>"><?php echo $tagumei[$i] ?></a></span>
<?php } ?>

</li>
<?php } ?>

(こんなん動けばいいんよ…)

--

とまぁ、こんな感じで関数を使いがちな処理も変数で高速に。

関連記事一覧を表示したい場合は、キャッシュファイルをループで読み込んで表示させればいい。
サブクエリを使うより爆速です。メモリもほぼ使わない。

まとめ

サブクエリと関数を使わなければメッチャ早い。

わざわざ記事タイトルを表示するのに関数の「the_title()」とか使っちゃダメです。
記事ページを表示した段階で「$post」データは変数として読み込まれているので、
変数の「$post->post_title」を使うのが良い。

小さな積み重ねですが、これを徹底すると軽くなる。
何をやるにもこの意識で組み立ててみてください。
ワードプレスの便利機能をことごとく使わないやり方とも言える。

本気でやるのなら、メインクエリーさえ読み込ませないのが良い。
ただ、さすがにそこまでやると不便すぎるので自分はやっていません。
もはや静的サイトジェネレーターみたいになってしまう。

--

という感じで、このブログも爆速です。
是非真似してみてください!

※ちなみに、自分は動的なサイトを作るのでキャッシュプラグインは使いません。
訪問ユーザーによって表示を変えないといけない。

※全てカスタムフィールドに入れるのも良いですね。
どっちが速くなるのか気になる。

--

キャッシュの関連記事
ワードプレスの関連記事

記事一覧はこちら:ワードプレス

管理人について
doudonn
名前:doudonn(どうどん)
ひたすらWEB制作な人。
一応社長です。音ゲー好き

<Twitterはこちら>
ゲーム垢
WEB制作垢
お知らせ

2022年11月30日に全記事削除しました。
まだ再開に向け作りかけ。


無駄にページ表示速度にこだわってます。

役立ちサイト
wiki
© 2022-2023 doudonn All Rights Reserved.