/home/preegmxb/gymnyou.com/wp-content/plugins/sight/render/sight-load-more.php
<?php
/**
* Portfolio Load More Posts via AJAX.
*
* @package sight
*/
/**
* Processing data query for load more
*
* @param string $method Processing method $wp_query.
* @param array $data Data array.
*/
function sight_portfolio_load_more_query_data( $method = 'get', $data = array() ) {
global $wp_query;
$output = array();
$vars = array(
'in_the_loop',
'is_single',
'is_page',
'is_archive',
'is_author',
'is_category',
'is_tag',
'is_tax',
'is_home',
'is_singular',
'is_post_query',
);
if ( 'get' === $method ) {
$output = $data;
}
foreach ( $vars as $variable ) {
if ( ! isset( $wp_query->$variable ) ) {
continue;
}
if ( 'get' === $method ) {
$output[ $variable ] = $wp_query->$variable;
}
if ( ! isset( $data[ $variable ] ) ) {
continue;
}
if ( 'init' === $method ) {
$wp_query->$variable = $data[ $variable ];
}
}
if ( 'get' === $method ) {
$output = apply_filters( 'ajax_query_args', $output );
}
return wp_json_encode( $output );
}
/**
* Get load more args.
*
* @param array $data The data.
* @param array $attributes The attributes.
* @param array $options The options.
*/
function sight_portfolio_get_load_more_args( $data, $attributes = false, $options = false ) {
// Ajax Type.
$ajax_type = version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ? 'ajax_restapi' : 'ajax';
$ajax_type = apply_filters( 'ajax_load_more_method', $ajax_type );
$args = array(
'type' => $ajax_type,
'nonce' => wp_create_nonce(),
'url' => admin_url( 'admin-ajax.php' ),
'rest_url' => esc_url( get_rest_url( null, '/sight/v1/portfolio-more-posts' ) ),
'posts_per_page' => get_query_var( 'posts_per_page' ),
'query_data' => sight_portfolio_load_more_query_data( 'get', $data ),
'attributes' => wp_json_encode( $attributes ),
'options' => wp_json_encode( $options ),
'max_num_pages' => $data['max_num_pages'],
'pagination_type' => $data['pagination_type'],
'translation' => array(
'load_more' => esc_html__( 'Load more', 'sight' ),
'loading' => esc_html__( 'Loading', 'sight' ),
),
);
return $args;
}
/**
* Fires after the query variable object is created, but before the actual query is run.
*
* @param object $wp_query WP Query.
*/
function sight_portfolio_pre_get_posts( &$wp_query ) {
if ( isset( $wp_query->query['is_sight_query'] ) ) {
$offset = (int) $wp_query->get( 'offset' );
$paged = (int) $wp_query->get( 'paged' );
$posts_per_page = (int) $wp_query->get( 'posts_per_page' );
if ( $wp_query->is_paged ) {
$page_offset = $offset + ( ( $paged - 1 ) * $posts_per_page );
$wp_query->set( 'offset', $page_offset );
} else {
$wp_query->set( 'offset', $offset );
}
}
}
add_action( 'pre_get_posts', 'sight_portfolio_pre_get_posts', 1 );
/**
* Filters the number of found posts for the query.
*
* @param int $found_posts The number of posts found.
* @param object $wp_query WP Query.
*/
function sight_portfolio_found_posts( $found_posts, $wp_query ) {
if ( isset( $wp_query->query['is_sight_query'] ) ) {
$offset = isset( $wp_query->query['offset'] ) ? $wp_query->query['offset'] : 0;
$found_posts = (int) $found_posts - (int) $offset;
}
return $found_posts;
}
add_filter( 'found_posts', 'sight_portfolio_found_posts', 1, 2 );
/**
* Get More Posts
*/
function sight_portfolio_load_more_posts() {
$posts_end = false;
// Response default.
$response = array(
'page' => 2,
'posts_per_page' => 10,
'query_data' => array(),
);
if ( wp_doing_ajax() ) {
check_ajax_referer();
}
// Set response values of ajax query.
if ( isset( $_POST['page'] ) && $_POST['page'] ) { // Input var ok.
$response['page'] = sanitize_key( $_POST['page'] ); // Input var ok; sanitization ok.
}
if ( isset( $_POST['posts_per_page'] ) && $_POST['posts_per_page'] ) { // Input var ok.
$response['posts_per_page'] = sanitize_key( $_POST['posts_per_page'] ); // Input var ok; sanitization ok.
}
if ( isset( $_POST['query_data'] ) && $_POST['query_data'] ) { // Input var ok.
$response['query_data'] = map_deep( json_decode( stripslashes( $_POST['query_data'] ), true ), 'sanitize_text_field' ); // Input var ok; sanitization ok.
}
if ( isset( $_POST['attributes'] ) && $_POST['attributes'] ) { // Input var ok.
$response['attributes'] = map_deep( json_decode( stripslashes( $_POST['attributes'] ), true ), 'sanitize_text_field' ); // Input var ok; sanitization ok.
}
if ( isset( $_POST['options'] ) && $_POST['options'] ) { // Input var ok.
$response['options'] = map_deep( json_decode( stripslashes( $_POST['options'] ), true ), 'sanitize_text_field' ); // Input var ok; sanitization ok.
}
// Set Query Vars.
$query_vars = array_merge(
(array) $response['query_data']['query_vars'],
array(
'is_sight_query' => true,
'paged' => (int) $response['page'],
'posts_per_page' => (int) $response['posts_per_page'],
)
);
// Supportfolio filtering for wp authors.
if ( $response['query_data']['is_author'] && $query_vars['author'] ) {
$query_vars['supportfolio_filters'] = true;
}
$attributes = $response['attributes'];
$options = $response['options'];
// Get Posts.
ob_start();
if ( isset( $_POST['terms'] ) && $_POST['terms'] ) { // Input var ok.
$terms = array_map( 'sanitize_text_field', $_POST['terms'] ); // Input var ok; sanitization ok.
if ( $terms ) {
$query_vars['tax_query'] = array();
$query_vars['tax_query'][] = array(
'taxonomy' => 'sight-categories',
'field' => 'slug',
'terms' => $terms,
);
$query_vars['tax_query']['relation'] = 'AND';
}
}
$the_query = new WP_Query( $query_vars );
$global_name = 'wp_query';
$GLOBALS[ $global_name ] = $the_query;
sight_portfolio_load_more_query_data( 'init', $response['query_data'] );
if ( $the_query->have_posts() ) :
// Set query vars, so that we can get them across all templates.
set_query_var( 'sight_query', $response['query_data'] );
// Get total number of posts.
$total = $the_query->post_count;
while ( $the_query->have_posts() ) :
$the_query->the_post();
// Start counting posts.
$current = $the_query->current_post + 1 + $query_vars['posts_per_page'] * $query_vars['paged'] - $query_vars['posts_per_page'];
// Check End of posts.
if ( $the_query->found_posts - $current <= 0 ) {
$posts_end = true;
}
$portfolio_entry = new Sight_Entry( $attributes, $options );
// Init portfolio entry.
$portfolio_entry->init();
// Get item project.
require apply_filters( 'sight_portfolio_item_path', SIGHT_PATH . 'render/handler/portfolio-entry.php', $attributes, $options, $portfolio_entry );
endwhile;
endif;
wp_reset_postdata();
$content = ob_get_clean();
if ( ! $content ) {
$posts_end = true;
}
// Return Result.
$result = array(
'posts_end' => $posts_end,
'content' => $content,
);
return $result;
}
/**
* AJAX Load More
*/
function sight_portfolio_ajax_load_more() {
// Check Nonce.
check_ajax_referer();
// Get Posts.
$data = sight_portfolio_load_more_posts();
// Return Result.
wp_send_json_success( $data );
}
add_action( 'wp_ajax_sight_portfolio_ajax_load_more', 'sight_portfolio_ajax_load_more' );
add_action( 'wp_ajax_nopriv_sight_portfolio_ajax_load_more', 'sight_portfolio_ajax_load_more' );
/**
* More Posts API Response
*
* @param array $request REST API Request.
*/
function sight_portfolio_more_posts_restapi( $request ) {
// Get Data.
$data = array(
'success' => true,
'data' => sight_portfolio_load_more_posts(),
);
// Return Result.
return rest_ensure_response( $data );
}
/**
* Register REST More Posts Routes
*/
function sight_portfolio_register_more_posts_route() {
register_rest_route(
'sight/v1',
'/portfolio-more-posts',
array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => 'sight_portfolio_more_posts_restapi',
'permission_callback' => function() {
return true;
},
)
);
}
add_action( 'rest_api_init', 'sight_portfolio_register_more_posts_route' );