WordPressで作ったWebサイトを、
スクロールすると、次ページが
自動でロードされる無限スクロー
ルが出来るようにする、という
方法です。今更感満載ですけど。
よく見かける、「スクロールするだけで次ページが次々とロードされる」みたいなサイトをWordPressで作ろう、みたいな話。既出な話題なので基本的な導入方法だけ書きます。
無限スクロール(Infinite Scroll)出来るようにする
WordPressを無限スクロール出来る様にします。
以下、手順。サンプルコードはTwenty Elevenで動作テストしています。
スクリプトを用意する
無限スクロールさせるスクリプトを用意します。いろいろあるのでお好みで構いません。今日はWordPressのプラグインにもなっているInfinite Scrollを使います。じゃあプラグイン使えよ、って話ですが。
Infinite ScrollはjQuertyのプラグインなのでjQuery本体をロードして下さい。
jQueryコアをロードした状態で、以下をfunctions.phpに追加。
function wp_infinite_scroll_js(){ wp_register_script( 'wp_infinite_scroll', get_template_directory_uri() . '/javascript/jquery.infinitescroll.min.js', array('jquery'),null,true ); //個別ページ以外で読み込み if( ! is_singular() ) { wp_enqueue_script('wp_infinite_scroll'); } } add_action('wp_enqueue_scripts', 'wp_infinite_scroll_js');
まず、固定ページ、記事ページ、画像ページ以外でinfinitescroll.jsをフッターに読み込みます。テーマファイル内の/javascript/というフォルダに入っていると仮定しています。
Infinite Scrollのセッティング
WordPressに合わせてセッティングします。Twenty Elevenでは、次ページの出力をfunctions.phpで行っています。出力されるHTMLは以下のようになります。
<nav id="nav-below"> <h3 class="assistive-text">投稿ナビゲーション</h3> <div class="nav-previous"><a href="http://example.com/?paged=2" ><span class="meta-nav">←</span> 古い投稿</a></div> <div class="nav-next"></div> </nav>
これに合わせてセレクタを指定します。
function wp_infinite_scroll_js_setting() { //個別ページ以外で読み込み if( ! is_singular() ) { ?> <script> var infinite_scroll = { loading: { img: "<?php echo get_template_directory_uri(); ?>/img/loader.gif" }, //WordPressに合わせてセレクタをそれぞれ指定 "nextSelector":"#nav-below .nav-previous a", "navSelector":"#nav-below", "itemSelector":"article", "contentSelector":"#content" }; jQuery( infinite_scroll.contentSelector ).infinitescroll( infinite_scroll ); </script> <?php } } add_action( 'wp_footer', 'wp_infinite_scroll_js_setting',100 );
jQueryのコアはWordPressコアに含まれているものを使用していると仮定しています。導入する際はご利用中のテーマにあわせて下さい。
細かいセット内容はinfinitescrollのドキュメントをご参照下さいませ。
動作確認
最後に動作を確認します。
↑ うまいこと次ページをスクロールだけで読み込んでくれました。
実際に導入するなら出来ればhashchangeイベント等を使って「ブラウザの戻る」にも対応させたいところですね。ページを見に行ってから戻ったら最初からスクロールし直し、というのは結構なストレス、というか結構な確立で離脱されます。
簡単ではありましたが、以上となります。