Rest API for cache-search
This commit is contained in:
parent
b1c3c76fa6
commit
8d0a24d35c
|
@ -1616,4 +1616,66 @@ add_action( 'pre_get_posts', function( $q ){
|
||||||
if ( $q->is_home() && $q->is_main_query() && $q->get( 'paged' ) > 1 )
|
if ( $q->is_home() && $q->is_main_query() && $q->get( 'paged' ) > 1 )
|
||||||
$q->set( 'post__not_in', get_option( 'sticky_posts' ) );
|
$q->set( 'post__not_in', get_option( 'sticky_posts' ) );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 定制实时搜索 rest api
|
||||||
|
* @rest api接口路径:https://sakura.2heng.xin/wp-json/cache_search/v1/json/
|
||||||
|
* @可在cache_search_json()函数末尾通过设置 HTTP header 控制 json 缓存时间
|
||||||
|
*/
|
||||||
|
function cache_search_json() {
|
||||||
|
$vowels = array("[", "{","]","}","<",">","\r\n", "\r", "\n","-","'",'"','`'," ",":",";",'\\'," ","toc");
|
||||||
|
$regex = <<<EOS
|
||||||
|
/<\/?[a-zA-Z]+("[^"]*"|'[^']*'|[^'">])*>|begin[\S\s]*\/begin|hermit[\S\s]*\/hermit|img[\S\s]*\/img|{{.*?}}|:.*?:/m
|
||||||
|
EOS;
|
||||||
|
|
||||||
|
$posts = new WP_Query('posts_per_page=-1&post_status=publish&post_type=post');
|
||||||
|
while ($posts->have_posts()) : $posts->the_post();
|
||||||
|
$output .= '{"type":"post","link":"'.get_post_permalink().'","title":'.json_encode(get_the_title()).',"comments":"'.get_comments_number('0', '1', '%').'","text":'.json_encode(str_replace($vowels, " ",preg_replace($regex,' ',get_the_content()))).'},';
|
||||||
|
endwhile;
|
||||||
|
wp_reset_postdata();
|
||||||
|
|
||||||
|
$pages = get_pages();
|
||||||
|
foreach ($pages as $page) {
|
||||||
|
$output .= '{"type":"page","link":"'.get_page_link($page).'","title":'.json_encode($page->post_title).',"comments":"'.$page->comment_count.'","text":'.json_encode(str_replace($vowels, " ",preg_replace($regex,' ',$page->post_content))).'},';
|
||||||
|
}
|
||||||
|
|
||||||
|
$tags = get_tags();
|
||||||
|
foreach ($tags as $tag) {
|
||||||
|
$output .= '{"type":"tag","link":"'.get_term_link($tag).'","title":'.json_encode($tag->name).',"comments":"","text":""},';
|
||||||
|
}
|
||||||
|
|
||||||
|
$categories = get_categories();
|
||||||
|
foreach ($categories as $category) {
|
||||||
|
$output .= '{"type":"category","link":"'.get_term_link($category).'","title":'.json_encode($category->name).',"comments":"","text":""},';
|
||||||
|
}
|
||||||
|
if(akina_option('live_search_comment')){
|
||||||
|
$comments = get_comments();
|
||||||
|
foreach ($comments as $comment) {
|
||||||
|
$is_private = get_comment_meta($comment->comment_ID, '_private', true);
|
||||||
|
if($is_private){
|
||||||
|
$output .= '{"type":"comment","link":"'.get_comment_link($comment).'","title":'.json_encode(get_the_title($comment->comment_post_ID)).',"comments":"","text":'.json_encode($comment->comment_author.":该评论为私密评论").'},';
|
||||||
|
continue;
|
||||||
|
}else{
|
||||||
|
$output .= '{"type":"comment","link":"'.get_comment_link($comment).'","title":'.json_encode(get_the_title($comment->comment_post_ID)).',"comments":"","text":'.json_encode(str_replace($vowels, " ",preg_replace($regex," ",$comment->comment_author.":".$comment->comment_content))).'},';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = substr($output,0,strlen($output)-1);
|
||||||
|
|
||||||
|
$data = '['.$output.']';
|
||||||
|
$result = new WP_REST_Response(json_decode($data), 200);
|
||||||
|
$result->set_headers(array('Content-Type' => 'application/json',
|
||||||
|
'Cache-Control' => 'max-age=3600')); // json 缓存控制
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_action( 'rest_api_init', function () {
|
||||||
|
register_rest_route( 'cache_search/v1', '/json/', array(
|
||||||
|
'methods' => 'GET',
|
||||||
|
'callback' => 'cache_search_json',
|
||||||
|
) );
|
||||||
|
} );
|
||||||
|
|
||||||
//code end
|
//code end
|
||||||
|
|
Loading…
Reference in New Issue