Breadcrumbs su WordPress

Sviluppo Breadcrumbs Wordpress

Come aggiungere i Breadcrumbs su WordPress senza l'uso di plugin

Le breadcrumbs, assumo un’importanza sempre maggiore, poichè aiutano utenti e motori di ricerca a comprendere la struttura di un sito.
Soprattutto all'interno di un piccolo-sito o e-commerce woocommerce,
implementando questo codice all'interno del file function.php del proprio tema:
(fate sempre una copia del file function.php, meglio nel tema child)

function the_breadcrumb () {

// Settings 
$separator  = '>';
$id         = 'breadcrumbs';
$class      = 'breadcrumbs';
$home_title = 'Homepage';

// Get the query & post information
global $post,$wp_query;
$category = get_the_category();

// Build the breadcrums
echo '<ul id="' . $id . '" class="' . $class . '">';
// Do not display on the homepage
if ( !is_front_page() ) {

// Home page
echo '<li class="item-home"><a class="bread-link bread-home" href="' . get_home_url() . '" title="' . $home_title . '">' . $home_title . '</a></li>';
echo '<li class="separator separator-home"> ' . $separator . ' </li>';

if ( is_single() ) {

// Single post (Only display the first category)
echo '<li class="item-cat item-cat-' . $category[0]->term_id . ' item-cat-' . $category[0]->category_nicename . '"><a class="bread-cat bread-cat-' . $category[0]->term_id . ' bread-cat-' . $category[0]->category_nicename . '" href="' . get_category_link($category[0]->term_id ) . '" title="' . $category[0]->cat_name . '">' . $category[0]->cat_name . '</a></li>';
echo '<li class="separator separator-' . $category[0]->term_id . '"> ' . $separator . ' </li>';
echo '<li class="item-current item-' . $post->ID . '"><strong class="bread-current bread-' . $post->ID . '" title="' . get_the_title() . '">' . get_the_title() . '</strong></li>';

} else if ( is_category() ) {

// Category page
echo '<li class="item-current item-cat-' . $category[0]->term_id . ' item-cat-' . $category[0]->category_nicename . '"><strong class="bread-current bread-cat-' . $category[0]->term_id . ' bread-cat-' . $category[0]->category_nicename . '">' . $category[0]->cat_name . '</strong></li>';

} else if ( is_page() ) {

// Standard page
if( $post->post_parent ){

// If child page, get parents
$anc = get_post_ancestors( $post->ID );

// Get parents in the right order
$anc = array_reverse($anc);

// Parent page loop
foreach ( $anc as $ancestor ) {
$parents .= '<li class="item-parent item-parent-' . $ancestor . '"><a class="bread-parent bread-parent-' . $ancestor . '" href="' . get_permalink($ancestor) . '" title="' . get_the_title($ancestor) . '">' . get_the_title($ancestor) . '</a></li>';
$parents .= '<li class="separator separator-' . $ancestor . '"> ' . $separator . ' </li>';
}

// Display parent pages
echo $parents;

// Current page
echo '<li class="item-current item-' . $post->ID . '"><strong title="' . get_the_title() . '"> ' . get_the_title() . '</strong></li>';

} else {

// Just display current page if not parents
echo '<li class="item-current item-' . $post->ID . '"><strong class="bread-current bread-' . $post->ID . '"> ' . get_the_title() . '</strong></li>';

}

} else if ( is_tag() ) {

// Tag page

// Get tag information
$term_id = get_query_var('tag_id');
$taxonomy = 'post_tag';
$args ='include=' . $term_id;
$terms = get_terms( $taxonomy, $args );

// Display the tag name
echo '<li class="item-current item-tag-' . $terms[0]->term_id . ' item-tag-' . $terms[0]->slug . '"><strong class="bread-current bread-tag-' . $terms[0]->term_id . ' bread-tag-' . $terms[0]->slug . '">' . $terms[0]->name . '</strong></li>';

} elseif ( is_day() ) {

// Day archive

// Year link
echo '<li class="item-year item-year-' . get_the_time('Y') . '"><a class="bread-year bread-year-' . get_the_time('Y') . '" href="' . get_year_link( get_the_time('Y') ) . '" title="' . get_the_time('Y') . '">' . get_the_time('Y') . ' Archives</a></li>';
echo '<li class="separator separator-' . get_the_time('Y') . '"> ' . $separator . ' </li>';

// Month link
echo '<li class="item-month item-month-' . get_the_time('m') . '"><a class="bread-month bread-month-' . get_the_time('m') . '" href="' . get_month_link( get_the_time('Y'), get_the_time('m') ) . '" title="' . get_the_time('M') . '">' . get_the_time('M') . ' Archives</a></li>';
echo '<li class="separator separator-' . get_the_time('m') . '"> ' . $separator . ' </li>';

// Day display
echo '<li class="item-current item-' . get_the_time('j') . '"><strong class="bread-current bread-' . get_the_time('j') . '"> ' . get_the_time('jS') . ' ' . get_the_time('M') . ' Archives</strong></li>';

} else if ( is_month() ) {

// Month Archive

// Year link
echo '<li class="item-year item-year-' . get_the_time('Y') . '"><a class="bread-year bread-year-' . get_the_time('Y') . '" href="' . get_year_link( get_the_time('Y') ) . '" title="' . get_the_time('Y') . '">' . get_the_time('Y') . ' Archives</a></li>';
echo '<li class="separator separator-' . get_the_time('Y') . '"> ' . $separator . ' </li>';

// Month display
echo '<li class="item-month item-month-' . get_the_time('m') . '"><strong class="bread-month bread-month-' . get_the_time('m') . '" title="' . get_the_time('M') . '">' . get_the_time('M') . ' Archives</strong></li>';

} else if ( is_year() ) {

// Display year archive
echo '<li class="item-current item-current-' . get_the_time('Y') . '"><strong class="bread-current bread-current-' . get_the_time('Y') . '" title="' . get_the_time('Y') . '">' . get_the_time('Y') . ' Archives</strong></li>';

} else if ( is_author() ) {

// Auhor archive

// Get the author information
global $author;
$userdata = get_userdata( $author );

// Display author name
echo '<li class="item-current item-current-' . $userdata->user_nicename . '"><strong class="bread-current bread-current-' . $userdata->user_nicename . '" title="' . $userdata->display_name . '">' . 'Author: ' . $userdata->display_name . '</strong></li>';

} else if ( get_query_var('paged') ) {

// Paginated archives
echo '<li class="item-current item-current-' . get_query_var('paged') . '"><strong class="bread-current bread-current-' . get_query_var('paged') . '" title="Page ' . get_query_var('paged') . '">'.__('Page') . ' ' . get_query_var('paged') . '</strong></li>';

} else if ( is_search() ) {

// Search results page
echo '<li class="item-current item-current-' . get_search_query() . '"><strong class="bread-current bread-current-' . get_search_query() . '" title="Search results for: ' . get_search_query() . '">Search results for: ' . get_search_query() . '</strong></li>';

} elseif ( is_404() ) {

// 404 page
echo '<li>' . 'Error 404' . '</li>';
}

}

echo '</ul>';

}

?>

Inserire un’altro codice nel template per richiamare la funzione, nella posizione nella quale vogliamo che i breadcrumbs siano mostrati:

<?php the_breadcrumb(); ?> 

In seguito agiremo via CSS...

Woocommerce select attributi dettaglio prodotto

Grazie a jQuery possiamo interagire e trasfomare il <select>

WordPress con il plugin Woocommerce è una buona soluzione per un piccolo e-shop/e-commerce, spesso però nel dettaglio prodotto abbiamo diverse necessità.
Woocommerce gestisce gli attributi delle variabili in <select> questo script permette di convertire quest ultimo in una lista <ul> <li>, per rendere più friendly la vendita, ad esempio nella visualizzazione di tutte le taglie:

$('select').each(function(){
    var $this = $(this), numberOfOptions = $(this).children('option').length;
    $this.addClass('select-hidden'); 
    $this.wrap('<div class="select"> </div>');
    $this.after('<div class="select-styled"> </div>');
    var $styledSelect = $this.next('div.select-styled');
    $styledSelect.text($this.children('option').eq(0).text());
    var $list = $('', {
        'class': 'select-options'
    }).insertAfter($styledSelect);
    for (var i = 0; i < numberOfOptions; i++) {
        $('', {
            text: $this.children('option').eq(i).text(),
            rel: $this.children('option').eq(i).val()
        }).appendTo($list);
    }
    var $listItems = $list.children('li');
    $styledSelect.click(function(e) {
        e.stopPropagation();
        $('div.select-styled.active').not(this).each(function(){
            $(this).removeClass('active').next('ul.select-options').hide();
        });
        $(this).toggleClass('active').next('ul.select-options').toggle();
    });
    $listItems.click(function(e) {
        e.stopPropagation();
        $styledSelect.text($(this).text()).removeClass('active');
        $this.val($(this).attr('rel'));
        $list.hide();
        //console.log($this.val());
    });
    $(document).click(function() {
        $styledSelect.removeClass('active');
        $list.hide();
    });
});
 

Disabilitare recensioni WooCommerce

woocommerce developer

WooCommerce non permette di disabilitare la tab delle recensioni

Il codice “modifica” la variabile $tabs che ci permette di disabilitare recensioni WooCommerce.

 All'interno del nostro function.php:

// Inizio codice

add_filter( 'woocommerce_product_tabs', 'sb_woo_remove_reviews_tab', 98);
function sb_woo_remove_reviews_tab($tabs) {

unset($tabs['reviews']);

return $tabs;
} 

Salva

Cambiare url wp-admin senza l'uso di plugin

undefined

CAMBIARE LA URL DELLA LOGIN su WP

Per accedere ad un sito wordpress si deve accedere al login che si trova url miostio./wp-admin.
Questo però rende più vulnerabile il sito stesso da attacchi Brute-force attack.

Per conrastare qualche mal intezionato potremmo cambiare utl/wp-admin con una parola a nostro piacere, come "loripsum"
Ci sono diversi plugin che offrono questo servizio, il più famoso è Rename wp-login.php compatibile anche con la versione Wordpress 4.6, ma se non vogliamo per necessità tecniche appesantire troppo il nostro WP con tanti plugin potremmo ottenere lo stesso risultato inserendo queste rige di codice:

wp-config.php inserire:

DEFINE(‘WP_ADMIN_DIR’, ‘loripsum’);
DEFINE (‘ADMIN_COOKIE_PATH’, ‘SITECOOKIEPATH.WP_ADMIN_DIR); 

function.php :

add_filter(‘site_url’, ‘wpadmin_filter’, 10,3);
function wpadmin_filter($url,$path,$orig_scheme) {
$old = array(“/(wp-admin)/”);
$admin_dir = WP_ADMIN_DIR;
$new = array($admin_dir);
return preg_replace($old, $new, $url, 1); 
}

.htaccess :

RewriteRule ^miaparola/(.*) wp-admin/$1?%{QUERY_STRING} [L]

Salva

WordPress 4.6 release

undefined

WordPress 4.6 le ultime novità

Processo di installazione di temi e plugin semplificato

- Ora avviene tutto su un unica pagina

Utilizzo di font disponibili

- WordPress prevede che sia usato il font default installato sul tuo sistema operativo

Controllo automatico dei link non funzionanti Broken Link Checker

- Segnalazione automatica se un link che hai inserito non è valido

Salvataggio automatico delle bozze

- WordPress 4.6 effettua salvataggi automatici dei tuoi post mentre scrivi

 

 

Molto importante prima di aggornare la vostra versione di WordPress è importante fare un backup del db

Oppure una copia dell'intero sito tramite il plugin Duplicator come potrai vedere dal sito ufficiale e dal video sotto, con molta facilità clona tutto il tuo sito Wordpress, lasciando invariate tutte le impostazioni dei widget, ciò rende molto veloce testare e verificare la nuova versione direttamente in locale.

Considerando che Wordpress e si un CMS fantastico per le sue molteplicì funzionalità e anche molto semplice che qualche plugin vada in conflitto ho peggio nostri script.

Qindi sempre meglio Test su Test in locale ;-)

Rimuovere formattazione automatica di wordpress

undefined

Togliere codice html generato dagli shortcode di Wordpress

Quando andiamo a generare delle pagine custom come la home page spesso a causa della formattazione automatica di wordpress, il codice html generato dagli shortcode nel frontend viene fastidiosamente annidato nei paragrafi e negli accapi, <p>, <br/> questo, oltre ad invalidare il codice html della pagina spesso causa degli errori di visualizzazione gravi!

Un ottimo rimedio è rimuovere il filtro wpautop dalla funzione the_content() che si occupa di stampare il contenuto principale delle pagine e dei post di WordPress.

Inserire dentro il file functions.php

remove_filter('the_content', 'wpautop');//elimina la formattazione automatica

Senza il filtro wpauto, viene disabilitata del tutto la formattazione automatica del testo, impedendo a WordPress l’aggiunta <p>, <br/>
in corrispondenza delle interruzioni di riga così come erano stati disposti nell’editor visuale.

 

Ottimizzazione e riparazione del db di WordPress

undefined

Riparazione e Ottimizazione del db azione nativa di WordPress

Nel corso del nostro lavoro di sviluppo in piattafirma WP, magari nella costruzione di un template implementando nuove funzionalità potrebbe succedere di sporcare il nostro db.

Per ottimizzare o riparare in casi estremi il nostro db WordPress ci mette a disposizione una funzione nativa.
Prima di tutto, eseguire un backup del db di WordPress

Digitando l’indirizzo www.miosito.it/wp-admin/maint/repair.php,  ti si aprirà la pagina che segue:

undefined

modificando il file della configurazione di WordPress, wp-config.php, inserendo questa istruzione:

define('WP_ALLOW_REPAIR', true);

Questa istruzione abilita gli strumenti di riparazione e ottimizzazione del database,
IMPORTANTE Devi ricordati di toglierla (o commentarla per disattivarla) una volta terminato.

 

Salva

WP Mobile Detector - Black Hat SEO nuovo attacco!

undefined

Black Hat SEO  attacco che sfrutta la vulnerabilità del plugin WP Mobile Black

NB: L'articolo è stato scritto molto bene mi sono permesso di riportarlo, fonte originale: www.shellrent.com

Secondo la definizione data da Google nelle sue guide sull’ottimizzazione per i motori di ricerca, si intendono “le tecniche illecite o bad practice che violano le istruzioni per i webmaster e manipolano i motori di ricerca per cercare di far avere una posizione migliore a un sito”.

Il Black Hat SEO permette di portare gli utenti su pagine completamente esterne al sito, che non riguardano neanche lo stesso argomento di ricerca.

Come ad esempio siti per adulti o finti siti di vendita online tutto all’insaputa dei proprietari che possono accorgersene settimane o mesi dopo recando danni ingenti all'immagine e non solo...

L’attacco è stato reso possibile a causa della vulnerabilità del plugin <strong>WP Mobile Detector</strong>, utilizzata appunto per far si che Google, Bing e altri motori di ricerca portino i visitatori, tramite redirect, verso siti porno ospitati su server esterni.

Il bug presente nel plugin di WordPress permette di “passare come parametro POST un file ospitato su siti esterni e caricarlo nel folder “cache”. In particolare, viene scaricato tramite una chiamata alla risorsa “/wp-content/plugins/wp-mobile-detector/resize.php” o “/wp-content/plugins/wp-mobile-detector/resize.php” (che include resize.php) il file offuscato hxxp://copia[.]ru/mig/tmp/css.php [WBM], che attiva poi il download del payload che si occupa di attivare l’indicizzazione su Google e i motori di ricerca.”

E’ possibile trovare siti infetti che non abbiano attivo il plugin WP Mobile Detector o che non siano in WordPress. Per questo sono in corso analisi atte a verificare se l’infezione si è propagata anche a livello di webserver.

Come verificare se il proprio sito è stato compromesso

Come detto è proprio a causa della particolarità di questo attacco che è difficile accorgersi se il proprio sito è stato infettato e quindi correre ai ripari.
Bisogna tener conto che sono stati colpiti portali di qualsiasi tipo: siti di agenzie, aziende, comuni, blog, ecc.. e molti di questi sono tutt’ora compromessi.

Per verificare se il vostro sito è stato infettato ci sono diversi modi, ve ne riportiamo 3:

1. Verificare la presenza di una cartella dal nome “gopni3g” nella root del webserver.

In genere l’infezione si manifesta con la presenza della cartella “gopni3g” nella root del webserver, accompagnata dal file “gopni3g.zip” che contiene il folder che attiva il blackhat seo spam.
E’ facile che riscontriate anche la presenza delle cartelle “dyonp7g”, “norxi4s” o “lrob5l”.

Se potete accedere ai file del webserver via FTP o filemanager web, verificate la presenza di cartelle anomale o archivi ZIP che non fanno parte del vostro sito o template. Se potete visualizzare le date di ultima modifica, ordinate i file in modo da portare in alto quelli modificati di recente che saranno con buona probabilità quelli eventualmente colpiti dall’hack del plugin WP Mobile Detector.

Google fornisce un servizio gratuito di monitoraggio della sicurezza del proprio sito, chiamato “Google Search Console”.

2. Ricercare su Google le pagine indicizzate tramite la query “site:www.miosito.est”

Una ricerca avanzata vi permette di verificare se sono presenti pagine che non fanno parte del vostro sito, eventualmente raffinando la ricerca con “site:www.miosito.est gopni3g” aggiungendo altri nomi identificati.

3. Registrare il proprio sito su Google Search Console e attivare le notifiche

Google.com/webmasters/tools/home?hl=IT&pli=1), che potete utilizzare anche in altre occasioni.
Per iscrivere il proprio sito è sufficiente registrarsi all’indirizzo fornito da Google e dimostrare il possesso del sito web caricando un file o modificando i parametri DNS, oppure dimostrando di aver configurato correttamente Google Analytics.

Google vi avviserà se sarete colpiti dall’hack Black Hat SEO grazie alla segnalazione di “Aumento delle pagine di errore “404” sul sito”, ovviamente presenti in quanto non vengono trovate sul server perché redirezionate su server esterni.

Come correre ai ripari

Per liberarsi dall’infezione basta compiere 3 semplici azioni:

– Eliminare il folder “gopni3g” o quelli eventualmente creati dall’attacco, inclusi eventuali archivi ZIP.
Se possibile ripristinate un backup a vostra disposizione, precedente a quando il sito è stato infettato.
Infatti anche se la pulizia è stata accurata, potrebbero essere subentrate altre infezioni facilitate da quella principale.
Vi ricordiamo quanto sia importante premunirsi sempre di un servizio di backup o di uno spazio esterno di storage su cui salvare più backup in modo da conservare una certa storicità.

– Aggiornare WordPress e tutti i plugin. Vi consigliamo di aspettare prima di reinstallare WP Mobile Detector.

– Informate Google, ed eventualmente Bing, che l’infezione è stata rimossa. In questo modo ripristinerete la corretta indicizzazione del sito.

Per farlo, è necessario accedere al proprio account Google Search Console e indicare a Google che le anomalie sono state rimosse (nel caso in cui Google avesse segnalato l’infezione) e che le pagine contenenti errori sono state verificate.

Accedete alla pagina “Scansione”, andate su “Errori di scansione” e verificate se Google ha rilevato errori di scansione. In caso affermativo, selezionate tutte le pagine d’errore legate all’infezione da gopni3g e cliccate su “segna come corretti”.
Verificate che le pagine d’errore restituiscano davvero errore e non facciano redirect verso siti esterni.

Controllate anche che l’infezione non abbia modificato anche la sitemap fornendone a Google una falsata. La verifica può essere fatta sia accedendo al percorso delle sitemap aggiungendo all’indirizzo la URI “sitemap.xml”, “sitemap.xml.gz” o “sitemap_index.xml” e verificando se il file robots.txt è stato alterato, includendo ad esempio una fake sitemap.

NB: L'articolo è stato scritto molto bene mi sono permesso di riportarlo, fonte originale: www.shellrent.com

 

Impostare AutoComplete off in Contact Form 7

AutoComplete off

Impostare AutoComplete off in Contact Form 7 di WordPress

L'attributo autocomplete ha due stati logici: on ed off rispettivamente per essere attivato o disattivato, per default è già attivo. Serve per riutilizzare i dati già inseriti su form precedenti, se infatti provate ad inserire il dato, vi viene proposto quanto già inserito precedentemente. Con autocomplete off è possibile disattivarlo e diventa utile in quei campi che per ragioni di privacy e/o di sicurezza non devono essere mostrati dati soltanto perchè già utilizzati in precedenza.

Si applica ai vari tipi di input type ma è possibile applicarlo anche all'intero modulo se dichiarato nell'elemento principale del form

Se abbiamo l'esigenza di inserirlo all'interno del nostro Contact Form 7 di Wordpress, possiamo inserire questo script subito dopo il form

Script:

jQuery(document).ready(function($){
 $('.wpcf7-form').attr('autocomplete', 'off').attr('autosuggest', 'off');
   });

Salva

Plugin multilingua qTranslate X per Wordpress

qTranslate X

qTranslate X // togliere script inutili all'interno dell'head di Wordpress

qTranslate X è un plugin che ci permette diabilitare il multilingua a scelta su Wordpress con molta facilità.
Di recente è stato riesumato e reso compatibile con Yoast SEO con implementazioni per renderelo sempre più compatibile con le nuove versioni di Wordpress.

Di contro è un plugin che consuma molte risorse quindi Wordpress si deve ottimizzare al massimo, questo una conoscenza approffondita degli strumenti da usare (che vedremo più avanti).

E molto facile la castumizzazione via CSS, sia l'implementazione come widget, spesso però il plugin carica all'interno del nostro <head> righe di codice che non servono, almeno per alcune esigenze tecniche.

Vediamo ora come togliere appunto il CSS superfluo che carica all'interno dell' <head>.

Seguendo il percorso:
wp-content/plugins/qtranslate-x

Andiamo a modificare la pagina qtranslate_widget.php

Commentare:

if ( !defined( 'ABSPATH' ) ) exit;

define('QTX_WIDGET_CSS',
'.qtranxs_widget ul { margin: 0; }
.qtranxs_widget ul li
{
display: inline; /* horizontal list, use "list-item" or other appropriate value for vertical list */
list-style-type: none; /* use "initial" or other to enable bullets */
margin: 0 5px 0 0; /* adjust spacing between items */
opacity: 0.5;
-o-transition: 1s ease opacity;
-moz-transition: 1s ease opacity;
-webkit-transition: 1s ease opacity;
transition: 1s ease opacity;
}
/* .qtranxs_widget ul li span { margin: 0 5px 0 0; } */ /* other way to control spacing */
.qtranxs_widget ul li.active { opacity: 0.8; }
.qtranxs_widget ul li:hover { opacity: 1; }
.qtranxs_widget img { box-shadow: none; vertical-align: middle; display: initial; }
.qtranxs_flag { height:12px; width:18px; display:block; }
.qtranxs_flag_and_text { padding-left:20px; }
.qtranxs_flag span { display:none; }
');

dalla riga 42 alla 44 commentare queste righe:

undefined

Togliere il meta generator di qTranslate X

Inserire all'interno del propio functions.php (relativo al tema) questo script che toglierà all'interno dell'head il nostro meta tag

remove_action('wp_head','qtranxf_wp_head_meta_generator');

link qTranslate X

Salva

Salva

CSS winner Andres Hunger
CSSRELL Andres Hunger
BESTcss Andres Hunger