【2024最新】WordPressのプラグインなしで、OGPの設定をする!Jetpackと共存&Facebook・Twitter Cardsも出力
2024/11 更新
先日、OGPの設定を「WP-OGP」のプラグインを変更して使えるようにしたのですが(詳細は こちら と こちら)、たまたま別案件で要素検証をしてhead内を見てみたら、OGPの記述が2つある!? ということに気づき、どうやらその原因はJetpackが吐き出しているOGPの記述ということがわかりました。
JetpackはWordPressでサイトを作っている方ならご存知だと思うのですが、非常に便利なWP用のプラグインです。ですので、Jetpackが自動でOGPを出力して「Twitter Cards」等の記述も一緒に出力してくれるならそれでいいのでは?と思い「WP-OGP」のプラグインをオフにしてみたのですが、「Twitter Cardsの記述」がホームでなかったり、「app_id」や「admin」がうまく出力されなかったり、descriptionが長ったらしかったり、「Twitter cards」が自動で吐き出されなくなったりと、その挙動一つ一つを把握して出力するのは大変だな。。
と思い、プラグインを使わず、オリジナル(手動)でOGP設定をすることにしました。
目次
ということで、今回はプラグインで「OGP」を設定をするのではなく、オリジナルの「OGP」を手動で設定する方法です。
現在『Twitter → X』となってますが、「Twitter Cards」の設定は現時点で有効です。
ツイートをカードで最適化する
2024年11月時点
プラグインなしで、FacebookやTwitter CardのOGPの設定をする!
やる作業としては大きく分けて以下の3つ。
- Jetpackの吐き出すOGP設定を止める。
- 今まで使用していたプラグイン(WP-OGP)を止める。
- オリジナルのogp.phpを作成して読み込む。
html宣言の編集や、facebookアプリの設定は、以前の記事(こちら)にあるので今回は省略しています。
1. Jetpackの吐き出すOGP設定を止める
これは以下の記述をTheme内のfunction.phpに記述します。
// Jetpackのパブリサイズ共有で自動的に出力されるOGPの設定の削除 add_filter('jetpack_enable_open_graph', '__return_false', 99);
「Jetpack」を使ってない方はスルーしてください。
2. WP-OGPを止める
これはそのままプラグインの設定で、WP-OGPを、他のOGPのプラグインを使ってる方はそのプラグインを停止(無効化)します。
「WP-OGP」を使ってない方はスルーしてください。
3. オリジナルのOGP.phpを作成して読み込む
先ほども記載しましたが、これはhtml宣言の編集や、facebookアプリの設定が終わっている必要があるので、それがまだの方は以前書いた記事(こちら)を参考にしてくださいね。
この設定が終わっている状態で、
まずは header.phpの<head>タグ内に以下の記述をコピペします。
<?php get_template_part('ogp');?>
次に以下のOGP.phpのファイルを作成します。
//とある場所はコメントアウトで、説明を記載しています。
25行目はogp画像としてオリジナルの画像を設定していますので、必ず変更してください。
41-43行目はTwitter Cardsの設定ですので、こちらも必ず変更してください。
<!--- OGP設定 ---> <meta property="og:type" content="blog"> <?php if (is_single()){ //単一記事ページの場合 if(have_posts()): while(have_posts()): the_post(); echo '<meta property="og:description" content="'.mb_substr(get_the_excerpt(), 0, 100).'">';echo "\n"; //抜粋を表示 endwhile; endif; echo '<meta property="og:title" content="'; the_title(); echo '">';echo "\n"; //単一記事タイトルを表示 echo '<meta property="og:url" content="'; the_permalink(); echo '">';echo "\n"; //単一記事URLを表示 } else { //単一記事ページページ以外の場合(アーカイブページやホームなど) echo '<meta property="og:description" content="'; bloginfo('description'); echo '">';echo "\n"; //「一般設定」管理画面で指定したブログの説明文を表示 echo '<meta property="og:title" content="'; bloginfo('name'); echo '">';echo "\n"; //「一般設定」管理画面で指定したブログのタイトルを表示 echo '<meta property="og:url" content="'; bloginfo('url'); echo '">';echo "\n"; //「一般設定」管理画面で指定したブログのURLを表示 } $str = $post->post_content; $searchPattern = '/<img.*?src=(["\'])(.+?).*?>/i'; //投稿にイメージがあるか調べる if (is_single()){ //単一記事ページの場合 if (has_post_thumbnail()){ //投稿にサムネイルがある場合の処理 $image_id = get_post_thumbnail_id(); $image = wp_get_attachment_image_src( $image_id, 'full'); echo '<meta property="og:image" content="'.$image[0].'">';echo "\n"; } else if ( preg_match( $searchPattern, $str, $imgurl ) && !is_archive()) { //投稿にサムネイルは無いが画像がある場合の処理 echo '<meta property="og:image" content="'.$imgurl[2].'">';echo "\n"; } else { //投稿にサムネイルも画像も無い場合の処理 $ogp_image = get_home_url().'/ABC_images/ABC.png'; //ここはオリジナルの画像のURLにしています。Theme内ではなく、ホーム直下にフォルダを作って置いてます。Theme内のimageフォルダは、get_template_directory_uri().'/images/ABC_Logo.png'; です。 if (isset($imgurl[2])) { echo '<meta property="og:image" content="'.$imgurl[2].'">'; } else { error_log("エラー: $imgurl[2] が定義されていません"); } echo "\n"; } } else { //単一記事ページページ以外の場合(アーカイブページやホームなど) if (get_header_image()){ //ヘッダーイメージがある場合は、ヘッダーイメージを取得 echo '<meta property="og:image" content="'.get_header_image().'">';echo "\n"; } else { //ヘッダーイメージがない場合の画像をとってくる。600×313pxのものを使っています。 echo '<meta property="og:image" content="'.get_home_url().'/ABC_images/ABC_image.png">';echo "\n"; //Theme内ではなく、ホーム直下にフォルダを作って置いてます。Theme内のスクリーンショットにする場合は、.get_template_directory_uri().'/screenshot.png">';echo "\n"; } } ?> <meta property="og:site_name" content="<?php bloginfo('name'); ?>"> <meta property="og:locale" content="ja_JP" /> <meta property="fb:app_id" content="APP_ID"> <meta property="fb:admins" content="ADMIN_ID"><!--これはなしでもOKのようです。--> <!--以下はTwitter Cardsの設定--> <meta name="twitter:card" content="summary_large_image"><!--標準はsummary--> <meta name="twitter:site" content="@Web_Design_ABC(@Twitterアカウント)"> <meta name="twitter:creator" content="@Web_Design_ABC(@Twitterアカウント)" ><!--これはなしでもOKと思います。--> <!--- /OGP設定 --->
以上です!
と言っても々一行一行チェックするのはかなり大変ですが、
ここはきちんと設定しておかないと後々困りますので、面倒くさくても設定してくださいね。
Google AdS
関連記事
【2021】FacebookやTwitter CardのOGPの設定をする!チェックツールURLも!プラグインなし
今まで何度も『OGP』の設定に関する記事は書いてきたのですが、新規サイト立ち上げで参考にしようと見てみたら、Facebo…
IcoMoonでSVGスプライトを作ってSVGアイコンを使う方法:WordPress & html での設定方法
今までSVGアイコンはきちんと把握せず使ってきたので、少々トラブルがあっても『頻繁に使う訳ではないし、とりあえず使えてた…
WPでin_categoryが効かない!サイドバーが出てこない!原因と対処(解決)方法
管理しているサイトでカテゴリー単位で色々「in_category」で分岐してサイドバーの出し分けをしていたのですが、ある…
WordPress:プラグイン”RSSImport”を使って気になるサイト等の最新情報を表示させる方法
前回はRSSのボタンを自分のサイトに表示させる方法を書いたのですが、今回は自分のサイト以外(勿論自分のものもOK!)の気…
『reCAPTCHA v3』を問い合わせページのみ&左側に表示させる方法:その2
前回書いた『reCAPTCHA v3』を問い合わせページのみ&左側に表示させる方法:その1の続きです! 今…