Files
wp-blog/wp-content/themes/Beginning/functions/ajax-load.php
T
2018-05-08 11:22:54 +08:00

124 lines
3.0 KiB
PHP

<?php
/**
* 判断 AJAX 加载页面
*/
function Bing_is_ajax_load_page(){
return isset( $_GET['ajax_load'] ) && $_GET['ajax_load'] == 'page' && Bing_mpanel( 'ajax_load_page' ) && !is_robots() && !is_feed() && !is_trackback();
}
/**
* AJAX 加载页面
*/
function Bing_ajax_load_page(){
if( Bing_is_ajax_load_page() ){
do_action( 'ajax_load_page' );
$GLOBALS['ajax_load_page_data'] = apply_filters( 'ajax_load_page_data', array() );
ob_start( 'Bing_ajax_load_page_data' );
}
}
add_action( 'template_redirect', 'Bing_ajax_load_page', 2 );
/**
* 处理 AJAX 加载页面数据
*/
function Bing_ajax_load_page_data( $code ){
$defaults = array(
'code' => $code,
'title' => wp_get_document_title(),
'body_class' => join( ' ', get_body_class( $class ) ),
'refresh_sidebar' => false,
'last_change' => get_option( THEME_SLUG . '_last_change' )
);
$data = array_merge( $defaults, $GLOBALS['ajax_load_page_data'] );
return wp_json_encode( $data );
}
/**
* AJAX 加载页面时删除请求 AJAX 内容链接参数
*/
function Bing_ajax_load_page_delete_url_query(){
$search = array(
'?ajax_load=page&',
'?ajax_load=page',
'&ajax_load=page&',
'&ajax_load=page'
);
$replace = array(
'?',
'',
'&',
''
);
$_SERVER['REQUEST_URI'] = str_replace( $search, $replace, $_SERVER['REQUEST_URI'] );
}
add_action( 'ajax_load_page', 'Bing_ajax_load_page_delete_url_query', 2 );
/**
* AJAX 加载页面时移除侧边栏
*/
add_action( 'ajax_load_page', 'Bing_remove_sidebar' );
/**
* AJAX 加载页面时移除页脚
*/
function Bing_ajax_load_page_remove_footer(){
add_action( 'get_footer', '_Bing_ajax_load_die', 1 );
}
add_action( 'ajax_load_page', 'Bing_ajax_load_page_remove_footer' );
/**
* AJAX 加载页面时在需要的时机结束程序
*
* 用来代替在 WordPress 4.7 测试版中被修改的 `_ajax_wp_die_handler()` 函数。
*
* @ignore
*
* @since Beginning 4.0.0
* @access private
*/
function _Bing_ajax_load_die() {
die;
}
/**
* AJAX 加载页面时禁止缓存
*
* @see nocache_headers()
*/
add_action( 'ajax_load_page', 'nocache_headers', 16 );
/**
* AJAX 加载页面时某些情况重新加载侧边栏
*/
function Bing_ajax_load_page_refresh_sidebar( $data ){
if( Bing_mpanel( 'sidebar' ) && ( Bing_mpanel( 'sidebars_list' ) || is_date() ) ){
ob_start();
get_sidebar();
$data = array_merge( $data, array(
'refresh_sidebar' => true,
'sidebar_code' => ob_get_clean()
) );
}
return $data;
}
add_action( 'ajax_load_page_data', 'Bing_ajax_load_page_refresh_sidebar' );
/**
* 重定向时如果是 AJAX 加载页面则添加查询参数
*/
function Bing_redirect_ajax_load_page_query( $location ){
if( Bing_is_ajax_load_page() )
$location = add_query_arg( 'ajax_load', 'page', $location );
return $location;
}
add_filter( 'wp_redirect', 'Bing_redirect_ajax_load_page_query' );
//End of page.