First things first
You have a few errors in your code.
- The table for terms is called
wp_termsinstead ofwp-terms - The query
$qryis not correct, the inner query has an invalidWHERE-clause:SELECT term_id as term_id FROM wp_term_taxanomy = 'category'should beSELECT term_id as term_id FROM wp_term_taxanomy WHERE taxonomy = 'category' - Improvement: Use the
$wpdb->prefixinstead of the staticwp_(not all WordPress installations usewp_ - You register your
AJAXfunction in a template, instead of yourfunctions.php
Cleaned up
You could use a Code like this:
Your Template File
<?php
get_header();
global $wpdb;
$qry = "select * from {$wpdb->prefix}terms where term_id IN ( SELECT term_id as term_id FROM {$wpdb->prefix}term_taxanomy WHERE taxonomy = 'category' )";
$data = $wpdb->get_results( $qry );
foreach( $data as $term ) {
?>
<div class="checkbox" id="checkpadding">
<label>
<input type="checkbox" class="catclass" value="<?php echo $term->term_id; ?>">
<span id="checktext"><?php echo $term->name; ?></span>
</label>
</div>
<?php
}
<script>
jQuery(document).ready(function() {
jQuery('.catclass').change(function () {
if (this.checked) {
var catid = ((this.value));
var ajaxurl="<?php echo admin_url("admin-ajax.php'); ?>';
jQuery.ajax({
url: ajaxurl,
data: {
'action': 'getpost',
'catid': catid
},
success: function (data) {
alert(data);
if(data.type == "success") {
alert("success");
}
else {
alert("AJAX error")
}
},
error: function (errorThrown) {
console.log(errorThrown);
}
});
}
});
});
</script>
<?php
get_footer();
?>
Your functions.php
You add the rest to your functions.php:
<?php
add_action('wp_ajax_getpost','getpost');
add_action('wp_ajax_nopriv_getpost', 'getpost');
function getpost() {
echo "hi";
die();
}
?>
You should be fine in this case.
Debugging
Consider firing your AJAX call without the variable from the select, to ensure it is registered properly.
Afterwards, create an $array for your response, which you send back to the browser using wp_send_json(), so you can handle your values like data.type etc. in your script.