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

スクロールしても固定されているCTAボタンを設置したいです!どうやって実装できますか?

こんにちは!フリーランスWEBデザイナーのやよいです!

今回は、プラグインなしで「固定のCTAボタンを設置するカスタマイズ方法」をご紹介します!

※今回はCTAボタンを設置していますが、もちろん普通のボタンや画像でもできます◎)
※個人的に、これが実装できた瞬間は超気持ちよかったです

これをやってみようと思ったきっかけは、「LPに固定表示できるCTAボタンは設置できますか?」とお客様からご相談いただいたこと。

最初は、「何かプラグインがあったらプラグイン使えばいいかな〜」とも思ったのですが、「運用上、あまりプラグインは乱用したくない」&「有料のプラグインが多い割にいいプラグインがない」かったので、《PHP/HTML/CSS》をカスタマイズして実装することにしました!

※今回は、「JIN:R」のカスタマイズ方法をご紹介していますが、今度「SWELL」の方法もご紹介したいと思います^^(おそらく基本的な対応方法はあまり変わらないと思います!)

自分のメモ帳目的でもメモしているので、ぜひ皆さんもご参考ください!

目次

【前提】WordPressの固定ページでは「sticky」の機能がサポートされていない

WordPressの投稿ページでは、「sticky」機能は有効なようなのですが、固定ページでは「sticky」機能はサポートされていないそうなのです。

なので、普通に実装しても「あれ?できない…涙」ってなった方が多いかと思います。

手順

STEP
「functions.php」に下記のPHPコードを追記する

外観 > テーマファイルエディター > テーマのための関数 (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');
STEP
親テーマから子テーマへ「home.php」をコピーする

次に「home.php」へ追加でPHPの記述を行いたいところなのですが、デフォルトのままだと、子テーマには「home.php」がありません。子テーマで「home.php」を編集するために、親テーマから複製して子テーマに「home.php」ファイルを持ってくる必要があります。

この作業は、WordPress側からはできないので、一旦サーバー側の「ファイルマネージャー」を使って、ファイルの複製を行いましょう。

※子テーマの配下へ複製させます。

STEP
出現した「home.php」へPHPコードを追記する

子テーマへ、「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の追記は完了です!

STEP
CSSクラスを追加

固定させたいブロックにCSSを追加します。

ブロックを選択したら「ブロック > 高度な設定 > 追加 CSS クラス」からCSSクラスを追加できます。

今回はサンプルとして「sticky-action」というクラス名を指定します。

これで、HTML側でクラス名の指定が完了します。

STEP
CSSを追加

次に、固定させるための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」に邪魔なコード(今回の場合)があるので、それを修正しています。

STEP
完成

以上で完成です!

目次