給 WordPress 的頁碼添加頁碼輸入框,輸入頁碼後點擊跳轉到指定頁碼。
效果如圖

第一步:添加頁碼函數。
下面的頁碼輸出函數是阿樹一直在用的,可放心直接使用。
當然,在函數後面輸出部分,可以按照自己的需求改動。
- function ashuwp_pagenavi() {
- global $wp_query, $wp_rewrite;
- $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
- $pagination = array(
- 'base' => esc_url_raw( str_replace( 999999999, '%#%', get_pagenum_link( 999999999, false ) ) ),
- 'format' => '',
- 'total' => $wp_query->max_num_pages,
- 'current' => $current,
- 'show_all' => false,
- 'type' => 'plain',
- 'end_size'=>'1',
- 'mid_size'=>'3',
- 'prev_text' => '上一頁',
- 'next_text' => '下一頁'
- );
- $total_pages = $wp_query->max_num_pages;
- if( !emptyempty($wp_query->query_vars['s']) )
- $pagination['add_args'] = array('s'=>get_query_var('s'));
- echo '<div class="page_nav"><div class="nav_wrap clearfix">';
- echo '<div class="total"><span> 第'.$current.'/'.$total_pages.'頁, 共</span><span class="blue">'.$wp_query->found_posts.'</span><span> 個結果</span></div>';
- if($total_pages>1){
- echo '<div class="goto">
- <span> 跳轉至:第</span>
- <input id="page_input" type="text" max="'.$total_pages.'" name="page_num" value="" />
- <span> 頁</span>
- <a href="#" class="go_btn"> 確認</a>
- </div>';
- }
- echo '<div class="page-nav clearfix"><nav>';
- if ( $current !=1 ) {
- echo '<a class="page-numbers first" href="'. esc_html(get_pagenum_link(1)).'"> 首頁</a>';
- }
- echo paginate_links($pagination);
- if ( $current < $total_pages ) {
- echo '<a class="page-numbers last" href="'. esc_html(get_pagenum_link($total_pages)).'"> 尾頁</a>';
- }
- echo '</nav></div>';
- echo '</div></div>';
- }
在需要輸出頁碼的頁面,執行該函數即可,即直接加上下面代碼即可執行。
- <?php ashuwp_pagenavi(); ?>
第二步:js 文件。
既然是輸入頁碼跳轉,那肯定要用到 js 。下面的 js 代碼阿樹加了註釋,請將 js 代碼加入到 js 文件中即可,當然需要 jquery 支持。
思路很簡單,就是在點擊 「跳轉」 按鈕的時候,獲取輸入的頁碼,再獲取任意一個頁碼鏈接,將頁碼數字替換掉即可。
本教程的頁碼鏈接類型為:http://www.ashuwp.com/courses/page/4 這種,如果你的不是這種,請修改下面 js 裏面的頁碼替換部分。
- jQuery(document).ready( function($){
- //.page_nav a.go_btn 為確認按鈕,點擊執行
- $('.page_nav a.go_btn').on('click',function(event){
- event.preventDefault(); //取消默認動作
- page_input = $('#page_input'); //獲取輸入框的值
- page_max = page_input.attr('max'); //獲取輸入框中的 max 屬性的值,就是最大頁碼
- if(page_input.val()==''){
- alert('請輸入頁碼');
- return false;
- }
- if((page_input.val()<1) || (page_input.val()>page_max)){
- alert('請輸入 1 至' + page_max + '之間的數字');
- return false;
- }
- page_links = $('.page-nav a').eq(1).attr('href'); //從頁碼列表中獲取任意一個鏈接, 此處獲取第一個鏈接
- go_link = page_links.replace(//page/([0-9]{1,})/g, '/page/'+page_input.val()); //將頁碼數字替換
- location.href = go_link; //跳轉
- });
- });
第三步:拓展。
事實上有前面兩個步驟以及可以正常工作了,但是如果加一個限制,只能輸入數字,會更好,所以完整的 js 代碼如下:
- jQuery(document).ready( function($){
- //.page_nav a.go_btn 為確認按鈕,點擊執行
- $('.page_nav a.go_btn').on('click',function(event){
- event.preventDefault(); //取消默認動作
- page_input = $('#page_input'); //獲取輸入框的值
- page_max = page_input.attr('max'); //獲取輸入框中的 max 屬性的值,就是最大頁碼
- if(page_input.val()==''){
- alert('請輸入頁碼');
- return false;
- }
- if((page_input.val()<1) || (page_input.val()>page_max)){
- alert('請輸入 1 至' + page_max + '之間的數字');
- return false;
- }
- page_links = $('.page-nav a').eq(1).attr('href'); //從頁碼列表中獲取任意一個鏈接, 此處獲取第一個鏈接
- go_link = page_links.replace(//page/([0-9]{1,})/g, '/page/'+page_input.val()); //將頁碼數字替換
- location.href = go_link; //跳轉
- });
- $.fn.onlyNum = function onlyNum() {
- $(this).keypress(function (event) {
- var eventObj = event || e;
- var keyCode = eventObj.keyCode || eventObj.which;
- if ((keyCode >= 48 && keyCode <= 57))
- return true;
- else
- return false;
- }).focus(function () {
- //禁用輸入法
- this.style.imeMode = 'disabled';
- }).bind("paste", function () {
- //獲取剪切板的內容
- var clipboard = window.clipboardData.getData("Text");
- if (/^d+$/.test(clipboard))
- return true;
- else
- return false;
- });
- };
- //#page_input 為頁碼輸入框
- $('#page_input').onlyNum();
- });
END 。