J'ai deux listes déroulantes pour filtrer les publications sur un site Web. La deuxième liste déroulante est basée sur la sélection de la première, à savoir:
[CATEGORY] + [SUB-CATEGORY] = SEARCH
Le problème est que parfois la deuxième liste déroulante ne sera pas peuplée, et la console affiche:
POST: http://localhost/site/wp-admin/admin-ajax.php
{"html":"","error":"Permission error"}
Qu'est-ce que cela signifie réellement? Et comment pourrais-je m'y prendre pour le réparer? C'est le code qui renvoie l'erreur:
add_action( 'wp_ajax_wpse158929_get_terms_for_cpt', 'wpse158929_get_terms_for_cpt' );
add_action( 'wp_ajax_nopriv_wpse158929_get_terms_for_cpt', 'wpse158929_get_terms_for_cpt' );
function wpse158929_get_terms_for_cpt() {
$ret = array( 'html' => '', 'error' => false );
if ( ! check_ajax_referer( 'wpse158929_get_terms_for_cpt_submit_', 'nonce', false /*die*/ ) ) {
$ret['error'] = __( 'Permission error', 'wpfm' );
} else {
$post_type = isset( $_REQUEST['post_type'] ) ? $_REQUEST['post_type'] : '';
$taxonomy = isset( $_REQUEST['taxonomy'] ) ? $_REQUEST['taxonomy'] : '';
$current_selected = isset( $_REQUEST['current_selected'] ) ? $_REQUEST['current_selected'] : '';
if ( ! $post_type || ! $taxonomy ) {
$ret['error'] = __( 'Params error', 'wpfm' );
} else {
global $wpdb;
$sql = $wpdb->prepare( 'SELECT t.slug FROM ' . $wpdb->terms . ' t'
. ' JOIN ' . $wpdb->term_taxonomy . ' AS tt ON tt.term_id = t.term_id'
. ' JOIN ' . $wpdb->term_relationships . ' AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id'
. ' JOIN ' . $wpdb->posts . ' AS p ON p.ID = tr.object_id'
. ' WHERE tt.taxonomy = %s AND p.post_type = %s AND p.post_status = %s'
. ' GROUP BY t.slug'
, $taxonomy, $post_type, 'publish' );
$include = $wpdb->get_col($sql);
$ret['html'] = preg_replace( '/<\/?select[^>]*>/', '', my_dropdown_categories( $taxonomy, $current_selected, $include ) );
}
}
wp_send_json( $ret );
}
Merci beaucoup :)
Votre problème est que vous recherchez le nonce et que le nonce est périmé. Il est difficile de faire un commentaire spécifique sur la nécessité d'utiliser nonce dans votre cas, mais en général, les nonces ne devraient être utilisés que pour la soumission de données et non pour la requête.