WordPress e jQuery: sfruttare le classi dell'elemento body

Il problema principale di JavaScript è che per operare su un documento necessita di quelli che tradizionalmente vengono chiamati hook. Un hook è semplicemente un riferimento nel documento (ad esempio un ID, una classe o un attributo) che permetta di eseguire il codice solo quando è necessario. WordPress dispone di diversi hook e usarli è reso più semplice da jQuery. Il più importante è rappresentato dalle classi dell'elemento body.

Quando usiamo la funzione body_class() WordPress va ad aggiungere una serie di classi all'elemento body il cui nome varia a seconda della sezione del sito in cui ci troviamo. Per esempio nella home page potremmo avere:


<body  class="home page page-id-17 page-template-default"></body>

Il nome delle classi ci indica che siamo nella home page, che la home page utilizza un template di pagina predefinito e che il suo ID è 17. Con jQuery possiamo cominciare ad implementare delle funzioni di utility per sfruttare queste informazioni:


(function($) {
	$.WP = {
      isHome: function() {
          if(!$('body').hasClass('home')) {
             return false;
          }
          return true;
      }
	};

})(jQuery);

Nel nostro caso il metodo WP.isHome() restituisce true perché l'elemento body ha la classe home. Quindi possiamo sfruttare questo hook per eseguire il codice solo nella home page:


if($.WP.isHome()) {
	// codice qui
}

Su questa falsariga possiamo implementare un metodo per gestire le pagine di WordPress:


isPage: function(id) {
	id = id || null;
	if(id == null) {
        if($('body').hasClass('page')) {
			return true;
    	} else {
			return false;
    	}
    } else {
       if($('body').hasClass('page')) {
		  var clsName = $('body').attr('class');
		  var pageIDReg =  new RegExp('page-id-' + id, 'g');
		  if(pageIDReg.test(clsName)) {
		   return true;
		  } else {
            return false;
		  }
   	   } else {
          return false;
   	   }
	}
}

Il metodo creato verifica sia che l'elemento body abbia la classe page sia che possieda un ID specifico sotto forma della classe page-id-numero. In questo caso occorre passare al metodo l'ID da verificare:


if($.WP.isPage()) {
	// true
}

if($.WP.isPage(20)) {
	// false
}

Ovviamente possiamo ripetere la stessa procedura anche per altre classi di WordPress, comprese quelle della sezione amministrativa.

Torna su