Skip to content

Instantly share code, notes, and snippets.

@luancmaia
Last active August 29, 2015 14:07
Show Gist options
  • Save luancmaia/d3168bc7d875041ee5d4 to your computer and use it in GitHub Desktop.
Save luancmaia/d3168bc7d875041ee5d4 to your computer and use it in GitHub Desktop.
//Requisição Ajax
Parametros :
'post_type' => 'Nome do Post Type Usado',
'type' => 'search' para buscas ou 'load' para carregar mais conteudos,
'param' => em 'search' o valor buscado, em 'load' um array com os ids que não devem ser buscados,
'img_field' => caso queira que retorne imagem passe o nome do campo do acf,
'quantity' => quantidade de posts que vai buscar
OBS: O Modelo abaixo está com os parametros preenchidos só para melhor entendimento.
$.ajax({
'url': window.ajaxurl,
'type': 'POST',
'dataType': 'json',
'data': {
'action' : 'ft_global_ajax',
'post_type' : 'post',
'type' : 'search',
'param': 'lorem ipsum',
'img_field' : 'post-imagem',
'quantity': '4',
},
'success': function( response ) {
if ( response !== 0 ) {
//Foreach para varrer o array de resultados e poder manipular cada um deles.
$.each( response.objects, function( i, object ){
console.log( object );
// Aqui ficaria o HTML e o append em algum lugar da pagina.
//Ex: var html = '<h1>' + object.title + '</h1>';
// html .= '<p>' + object.content + '</p>';
// $('body').append(html);
} );
}
},
'beforeSend': function( data ) {
// Faça alguma coisa antes de rodar o ajax
// Ex: Dar show no Loading
},
'complete': function( data ) {
// Faça alguma coisa quando completar o ajax
// Ex: Dar hide no Loading
}
})
//Tratamento de dados PHP
add_action( 'wp_ajax_ft_global_ajax', 'ft_global_ajax' );
add_action( 'wp_ajax_nopriv_ft_global_ajax', 'ft_global_ajax' );
function ft_global_ajax() {
$request = (object) $_POST;
$response = (object) array();
$response->status = false;
$response->message = 'Houve alguma falha!';
//Verifica se tem algum parametro vazio, se sim, retorna a função.
foreach ( $request as $param ) {
if ( empty( $param ) ) {
return json_encode( $response );
}
}
//Verifica se o tipo passado é igual a search ou load, caso seja diferente, retorna a função.
if ( $request->type != 'search' && $request->type != 'load' ) {
return json_encode( $response );
}
//Lógica caso o tipo seja 'search'
if ( $request->type == 'search' ) {
wp_reset_query();
$args = array(
'post_type' => $request->post_type,
'posts_per_page' => $request->quantity,
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
$i = 0;
while ( $q->have_posts() ) {
$q->the_post();
if ( stripos( get_the_content(), $request->param ) !== false || stripos( get_the_title(), $request->param ) !== false ) {
$response->objects[$i]['id'] = get_the_ID();
$response->objects[$i]['title'] = get_the_title();
$response->objects[$i]['content'] = get_the_content();
$response->objects[$i]['date'] = get_the_date();
$response->objects[$i]['category'] = get_the_category();
$response->objects[$i]['post_parent'] = $post->post_parent;
$response->objects[$i]['permalink'] = get_permalink();
$image = youtube_video_image( get_field( $request->img_field ) );
$response->objects[$i]['image'] = $image;
$response->status = true;
$response->message = 'Resultados encontrados!';
$i++;
}
}
}
}
//Lógica caso o tipo seja 'load'
if ( $request->type == 'load' ) {
wp_reset_query();
$args = array(
'post_type' => $request->post_type,
'posts_per_page' => $request->quantity,
'post__not_in' => $request->param,
);
$q = new WP_Query( $args );
if ( $q->have_posts() ) {
$i = 0;
while ( $q->have_posts() ) {
$q->the_post();
$response->objects[$i]['id'] = get_the_ID();
$response->objects[$i]['title'] = get_the_title();
$response->objects[$i]['content'] = get_the_content();
$response->objects[$i]['date'] = get_the_date();
$response->objects[$i]['category'] = get_the_category();
$response->objects[$i]['post_parent'] = $post->post_parent;
$response->objects[$i]['permalink'] = get_permalink();
$image = youtube_video_image( get_field( $request->img_field ) );
$response->objects[$i]['image'] = $image;
$response->status = true;
$response->message = 'Resultados encontrados!';
$i++;
}
}
}
exit( json_encode( $response ) );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment