I'm getting an empty AJAX response from my function in my functions.php
. Here's my function that processes the AJAX request.
function dynamic_date() {
check_ajax_referer('dynamic_date_nonce');
$fdate = $_GET['my_date'];
$date[] = explode("-",$fdate);
$year = $date[0];
$month = $date[1];
$args = array('year' => $year,'monthnum' => $month);
$loop = new WP_Query($args);
if($loop->have_posts()) {
while($loop->have_posts()) {
the_post();
echo get_template_part( 'content', get_post_format() );
}
} wp_reset_query();
die('');
}
And this is the AJAX call:
function _do_ajax(obj) {
var element = $(obj); //our link object
var url = wpAjax.unserialize(element.attr('href'));
var s = {};
s.response = 'ajax-response';
s.type = "GET";
s.url = sortbydate.ajax_url;
s.dataType = "HTML";
s.data = $.extend(s.data, { action: url.action, _ajax_nonce: url._wpnonce, my_date: url.my_date });
s.global = false;
s.timeout = 30000;
s.success = function(data) {
$("body.blog #content").fadeIn(500).append(data);
alert(data);
} //End success
s.error = function(r) {
alert("Epic Fail!");
}
$.ajax(s);
} //end _do_ajax
$.get_my_comments.init();
});
Now if I remove the wordpress loop and just echo $year and $month it appends to the container and works fine. When I add the loop though I get an empty response and nothing is displayed.
Am I handling the response properly?
In your code you have
get_template_part( 'content', get_post_format() );
So, this will look for content-format.php
file and in this case formats
are
aside, chat, gallery, link, image, quote, status, video, audio
So, depending on the format
of the post, WordPress
will look for a file in template's root folder. So, make sure, you have corresponding files, such as, content-aside.php
, content-chat.php
and so on (if you have these types of posts). For, default/normal post, get_post_format()
returns false
, so try this instead
$format = get_post_format();
if ( false === $format ) {
$format = 'standard';
}
get_template_part( 'content', $format );
Finally, make sure that, you have posts according to your query, just var_dump($loop)
and see if you really get any result or is it empty at all.
If you don't have any post-format
specific posts then, you may use,
get_template_part( 'content', 'loop' );
and change your file name to content-loop.php
, so WordPress
will look for/include content-loop.php
or content.php
file when you call get_template_part( 'content', 'loop' );
.