Je ne souhaite pas qu'un utilisateur puisse publier un message si aucune catégorie n'est sélectionnée. Cela ne me dérange pas de lancer une alerte JS ou de la gérer côté serveur également.
Quoi qu'il en soit, comment puis-je m'en assurer?
Remarque: "non classé" ne doit pas être choisi également.
Vous pouvez le faire facilement avec jQuery:
/* Checks if cat is selected when publish button is clicked */
jQuery( '#submitdiv' ).on( 'click', '#publish', function( e ) {
var $checked = jQuery( '#category-all li input:checked' );
//Checks if cat is selected
if( $checked.length <= 0 ) {
alert( "Please Select atleast one category" );
return false;
} else {
return true;
}
} );
Le code ci-dessus affichera un message d'alerte si aucune catégorie n'est sélectionnée. Vous pouvez utiliser la boîte de dialogue à la place si vous le souhaitez.
Voici ma solution. J'inclus ce fichier .js sur toutes les pages d'administration, mais comme certains de mes types de publication personnalisés n'incluent pas de catégories, je résous cette situation en vérifiant et en retournant la valeur true au début de la fonction. Je ne suis pas un expert chez JQuery, j'ai donc écrit l'essentiel de ceci en JavaScript. Notez qu'il vérifie spécifiquement la catégorie non publiée, ainsi que le nombre de catégories sélectionnées.
jQuery(document).ready(function ($) {
// Check for exactly one category before publishing or updating
$('#publish').click(checkForCategory);
});
function checkForCategory()
{
var categoryBlock = document.getElementById('categorychecklist');
if categoryBlock == null {
return true;
}
var catList = categoryBlock.getElementsByClassName('selectit');
var error = false;
var idx;
var selectedCnt = 0;
var uncategorized = false;
// Iterate through all of the categories to count the checked ones
for (idx = 0; idx < catList.length; idx++) {
inputElements = catList[idx].getElementsByTagName('input');
if ((inputElements.length > 0) && (inputElements[0].checked)) {
selectedCnt++;
if (catList[idx].innerHTML.indexOf('Uncategorized') > 0) {
uncategorized = true;
}
}
}
if (uncategorized) {
alert("You must unselect the Uncategorized category before publishing.");
error = true;
}
else if (selectedCnt == 0) {
alert("You must select a category before publishing.");
error = true;
}
else if (selectedCnt > 1) {
alert("You may only select one category when publishing.");
error = true;
}
return !error;
}