【JIN:R】プラグインなしで固定ボタン(CTA)を設置する方法《PHP/HTML/CSSのみで実装できる◎》

スクロールしても固定されているCTAボタンを設置したいです!どうやって実装できますか?
こんにちは!フリーランスWEBデザイナーのやよいです!
今回は、プラグインなしで「固定のCTAボタンを設置するカスタマイズ方法」をご紹介します!
※今回はCTAボタンを設置していますが、もちろん普通のボタンや画像でもできます◎)
※個人的に、これが実装できた瞬間は超気持ちよかったです
これをやってみようと思ったきっかけは、「LPに固定表示できるCTAボタンは設置できますか?」とお客様からご相談いただいたこと。
最初は、「何かプラグインがあったらプラグイン使えばいいかな〜」とも思ったのですが、「運用上、あまりプラグインは乱用したくない」&「有料のプラグインが多い割にいいプラグインがない」かったので、《PHP/HTML/CSS》をカスタマイズして実装することにしました!
※今回は、「JIN:R」のカスタマイズ方法をご紹介していますが、今度「SWELL」の方法もご紹介したいと思います^^(おそらく基本的な対応方法はあまり変わらないと思います!)
自分のメモ帳目的でもメモしているので、ぜひ皆さんもご参考ください!
【前提】WordPressの固定ページでは「sticky」の機能がサポートされていない
WordPressの投稿ページでは、「sticky」機能は有効なようなのですが、固定ページでは「sticky」機能はサポートされていないそうなのです。
なので、普通に実装しても「あれ?できない…涙」ってなった方が多いかと思います。
手順
「外観 > テーマファイルエディター > テーマのための関数 (functions.php)」から下記のコードを追記します。(現在の記述は残し、その下に追記します)
そして「ファイルを更新」をクリックします。
※このとき、BASIC認証がかけられているとエラーが発生するので一時的に解除するなどしてください!(←私です)
// カスタムフィールドを追加する関数
function add_sticky_custom_field() {
add_meta_box(
'sticky_page',
'Sticky Page',
'sticky_page_callback',
'page',
'side'
);
}
add_action('add_meta_boxes', 'add_sticky_custom_field');
// メタボックスのコールバック関数
function sticky_page_callback($post) {
$value = get_post_meta($post->ID, '_sticky_page', true);
?>
<label for="sticky_page_field"><?php _e('Make this page sticky?', 'textdomain'); ?></label>
<input type="checkbox" id="sticky_page_field" name="sticky_page_field" value="yes" <?php checked($value, 'yes'); ?> />
<?php
}
// メタボックスのデータを保存する関数
function save_sticky_page_meta_box_data($post_id) {
if (array_key_exists('sticky_page_field', $_POST)) {
update_post_meta(
$post_id,
'_sticky_page',
$_POST['sticky_page_field']
);
}
}
add_action('save_post', 'save_sticky_page_meta_box_data');
次に「home.php」へ追加でPHPの記述を行いたいところなのですが、デフォルトのままだと、子テーマには「home.php」がありません。子テーマで「home.php」を編集するために、親テーマから複製して子テーマに「home.php」ファイルを持ってくる必要があります。
この作業は、WordPress側からはできないので、一旦サーバー側の「ファイルマネージャー」を使って、ファイルの複製を行いましょう。
※子テーマの配下へ複製させます。
子テーマへ、「home.php」のコピーが完了すると、WordPressの管理画面内の子テーマからも「投稿ページ (home.php)」が見れるようになります。
そして、「投稿ページ (home.php)」へ以下のコードを追記します。
<?php
// Stickyページのクエリ
$sticky_pages = new WP_Query(array(
'post_type' => 'page',
'meta_key' => '_sticky_page',
'meta_value' => 'yes'
));
// Stickyページを表示するループ
if ($sticky_pages->have_posts()) {
while ($sticky_pages->have_posts()) {
$sticky_pages->the_post();
// 固定ページの表示
get_template_part('template-parts/content', 'page');
}
}
wp_reset_postdata();
?>
追記する場所として、以下のコードの上に追記するようにしてください。(※こちらは追記しなくてOK↓)
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php get_template_part('object/new-post-list'); ?>
<?php endwhile; ?>
<?php else : ?>
<article class="new-post-list-item">記事がありません</article>
<?php endif; ?>
これでひとまずPHPの追記は完了です!
固定させたいブロックにCSSを追加します。
ブロックを選択したら「ブロック > 高度な設定 > 追加 CSS クラス」からCSSクラスを追加できます。
今回はサンプルとして「sticky-action」というクラス名を指定します。
これで、HTML側でクラス名の指定が完了します。
次に、固定させるためのCSSを記載します。
「外観 > カスタマイズ > 追加 CSS」から以下のコードを追加します。
/* 固定ボタンのカスタマイズ */
.sticky-action {
position: -webkit-sticky;
position: sticky;
bottom: 0; /*必要に応じて位置を修正*/
left: 0; /*必要に応じて位置を修正*/
z-index: 1000;
padding: 0px;
}
@media (max-width: 551px) {
#mainContentInner {
overflow: visible !important;
overflow-x: hidden;
overflow-y: hidden;
}
}
ちなみに、「JIN:R」のテーマ側で、親要素の「#mainContentInner」に邪魔なコード(今回の場合)があるので、それを修正しています。
以上で完成です!