J'essaie d'afficher les catégories parentes dans une liste déroulante et en fonction des catégories parentes sélectionnées, leurs sous-catégories doivent apparaître dans une liste déroulante distincte via un appel ajax.
J'ai fait beaucoup de recherches et je suis tombé sur l'article suivant qui correspond à 100 % à ce dont j'ai besoin : https://1stwebdesigner.com/implement-ajax-wordpress-themes/
Je l'ai suivi correctement mais pour une raison quelconque, la liste déroulante des sous-catégories est toujours désactivée.
Mon objectif final est d'avoir les 2 listes déroulantes avec un bouton d'envoi et de les faire agir comme un formulaire de recherche, d'afficher les messages de sous-catégorie sélectionnés sur une page séparée, c'était ma première étape pour y arriver mais sans succès.
J'ai essayé de changer le javascript $ en jQuery car cela donnait une erreur la première fois que je l'utilisais mais actuellement aucune erreur sur la page.
<!-- Dropdown select box & javascript -->
<div id="content">
<?php
wp_dropdown_categories('show_count=0&selected=-1&hierarchical=1&depth=1&hide_empty=0&exclude=1&show_option_none=Main Categories&name=main_cat');
?>
<select name="sub_cat" id="sub_cat" disabled="disabled"></select>
<script type="text/javascript">
jQuery(function() {
jQuery('#main_cat').change(function() {
var $mainCat = jQuery('#main_cat').val();
// call ajax
jQuery("#sub_cat").empty();
jQuery.ajax({
url: "/wp-admin/admin-ajax.php",
type: 'POST',
data: 'action=my_special_action&main_catid=' + $mainCat,
success: function(results) {
// alert(results);
jQuery("#sub_cat").removeAttr("disabled");
jQuery("#sub_cat").append(results);
}
});
});
});
</script>
</div>
<!-- Ajax call in function.php -->
add_action('wp_ajax_my_special_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback');
function implement_ajax() {
if(isset($_POST['main_catid']))
{
$categories= get_categories('child_of='.$_POST['main_catid'].'&hide_empty=0');
foreach ($categories as $cat) {
$option .= '<option value="'.$cat->term_id.'">';
$option .= $cat->cat_name;
$option .= ' ('.$cat->category_count.')';
$option .= '</option>';
}
echo '<option value="-1" selected="selected">Scegli...</option>'.$option;
die();
} // end if
}
add_action('wp_ajax_my_special_ajax_call', 'implement_ajax');
add_action('wp_ajax_nopriv_my_special_ajax_call', 'implement_ajax');//for users that are not logged in.
Votre problème est dans "Ajax call in function.php", vous n'avez pas accroché la bonne fonction avec votre action. Essayez le code ci-dessous
<!-- Ajax call in function.php -->
add_action('wp_ajax_my_special_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback');
function my_action_callback() {
if(isset($_POST['main_catid'])) {
$categories = get_categories('child_of='.$_POST['main_catid'].'&hide_empty=0');
foreach ($categories as $cat) {
$option .= '<option value="'.$cat->term_id.'">';
$option .= $cat->cat_name;
$option .= ' ('.$cat->category_count.')';
$option .= '</option>';
}
echo '<option value="-1" selected="selected">Scegli...</option>'.$option;
die();
} // end if
}
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots