Rimuovere voci menu dal pannello di controllo di WordPress

Con questa funzione è possibile rimuovere voci menu dal pannello di controllo di wordpress per tutti gli utenti con ruolo “Author”.

function guga_remove_menu_items() {
    if( current_user_can( 'author' )  ): //definisce il ruolo per applicare le voci da rimuovere
        remove_menu_page( 'edit.php?post_type=post-type-slug-1' );
        remove_menu_page( 'edit.php?post_type=post-type-slug-2' );
        remove_menu_page( 'wpcf7' ); //rimuove voce menu contact form 7
        remove_menu_page( 'jetpack' ); //rimuove voce menu jetpack
        remove_menu_page( 'tools.php' ); //rimuove voce menu strumenti
    endif;
}
add_action( 'admin_menu', 'guga_remove_menu_items' );

per maggiori info e riferimenti visita la pagina remove_menu_page

Come si fa a mostrare i prezzi dopo aver fatto Login su Woocommerce?

Incollando questo codice sul file functions.php, il vostro tema non mostrerà più i prezzi dei prodotti invitando i visitatori a loggarsi o registrarsi per poterli vedere. Questa soluzione elimina anche il pulsante aggiungi al carrello.

function woocommerce_show_price_logged($price){
    if(is_user_logged_in() ){
        return $price;
    } else {
        add_action( 'woocommerce_single_product_summary', 'woocommerce_login_to_see_price', 31 );
        add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_login_to_see_price', 11 );
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
        remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
    }
}

add_filter('woocommerce_get_price_html', 'woocommerce_show_price_logged');
 
function woocommerce_login_to_see_price() {
        echo 'Registrati per vedere i prezzi';
}

Rimuovere il pulsante acquista dalle liste di prodotti su woocommerce

Condivido una funzione php da usare su wordpress che può essere molto utile per chi vuole rimuovere il pulsante “Acquista” da tutte liste di prodotti di woocommerce. La funzione viene usata in combinazione con la action hook “woocommerce_template_loop_add_to_cart” qui descritta e va incollata nel file functions.php perchè funzioni.


function woocommerce_remove_loop_button() {
    remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10);

}
add_action('init', 'woocommerce_remove_loop_button');

Controllare se Woocommerce è attivo o no

Qui una piccola funzione molto utile presa dal tema Storefront per controllare se il plugin di Woocommerce è attivo o no.

if ( ! function_exists( 'is_woocommerce_activated' ) ) {
	function is_woocommerce_activated() {
		return class_exists( 'woocommerce' ) ? true : false;
	}
}

come usarla

if ( is_woocommerce_activated() ) {
    echo 'woocomemrce plugin is active :)';	
} else {
    echo 'woocommerce plugin is not active :(';
}

Forzare l’utilizzo https per tutto il sito con PHP Seo friendly 301

Può capitare di non poter modificare il file .htaccess oppure che le regole mod_rewrite per qualche strano motivo non funzionino, allora non rimane che usare PHP per forzare l’uso del HTTPS su tutto il sito.

Con questo piccolo controllo siamo in grado di forzare l’uso del protocollo HTTPS su tutto il sito. Questo codice funziona su tutte le piattaforme che usano PHP come linguaggio di sviluppo.

Per farlo funzionare su WordPress inserite il codice in cima al file header.php del vostro tema. Se usate un tema base come TwentyFifteen allora vi consiglio di crearvi un Tema Figlio per evitare di perdere le modifiche dopo un aggiornamento automatico.

 

<?php   
if (! isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] == 'off' ) {
    $redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header("Location: $redirect_url", TRUE, 301);
    exit();
}
?>

oppure più semplicemente

<?php 

if(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on")
{
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], TRUE, 301);
    exit();
}
?>

Disattivare la cache di varnish con .htaccess o via php

Varnish è uno dei cache proxy più utilizzati per accelerare la navigazione di un sito web dinamico. Quasi tutti i provider di hosting stranieri lo stanno adottando e ne traggono un enorme vantaggi,o visto che abbassa notevolmente il carico di lavoro dei loro server è velocizza la fruizione delle pagine rendendo i siti dei loro clienti sempre più veloci nella navigazione…

Cmq spesso può essere utile disattivare Varnish perché magari si stanno facendo delle modifiche sul proprio sito web e diventa noioso fare purge cache per ogni singola modifica che si, anceh solo sul CSS. Come fare? Semplice basta aggiungere questa riga sul file .htaccess ed è fatta. A modifiche finite basta comentare quella riga e Varnish ritorna a fare il suo sporco lavoro.

#disattiva varnish
Header add "disablevcache" "true"

Via PHP invece dovresti usare questo codice:

header("Cache-Control: max-age=1");

 

WP funzione per elencare i termini di una tassonomia con la gerarchia

Questa funzione prende il termine di una tassonomia stampa una lista annidata con tutti i termini figli e viceversa.

function get_taxonomies_terms_list($taxonomy){
    $termine = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
    
    $ancestor = get_ancestors( $termine->term_id, $taxonomy );
    $childs = get_term_children( $termine->term_id, $taxonomy );
    
    array_push($childs, $termine->term_id);
    $ancestor_ids = implode(',', $ancestor);
    $child_ids = implode( ',' , $childs );
    
    if(isset($taxonomy)){
        
    $args = array (
        'taxonomy' => $taxonomy,
        'hide_empty' => 1,
        'include' => $child_ids.','.$ancestor_ids,
        'orderby' => 'name'
    );
    
    $terms = wp_list_categories( $args );
        if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
            foreach ( $terms as $term ) {
                if (0 == $term->parent) { $parentsItems[] = $term; }
                if ($term->parent) { $childItems[] = $term; }
            } 
            if(is_taxonomy_hierarchical( $taxonomy )){
                foreach ($parentsItems as $parentsItem){
                    echo '<h4>'.$parentsItem->name.'</h4>';
                    echo '<ul>';
                    foreach($childItems as $childItem){
                        if ($childItem->parent == $parentsItem->term_id){
                            echo '<li>'.$childItem->name.'</li>';
                        }
                    }
                    echo '</ul>';
                }
            }else{
                echo '<ul>';
                foreach($parentsItems as $parentsItem){
                    echo '<li>'.$parentsItem->name.'</li>';
                }
                echo '</ul>';
            }
        }
    }
}

Come disabilitare l’analizzatore di elemento su Firefox evviva Firebug

Oggi mi sono proprio stufato perché continuavo a cliccare su analizza elemento di firefox invece di cliccare sul mio preferito tool che è  firebug. Ad un certo punto ho detto basta, devo assolutamente trovare un modo per sbarazzarmi di questo fastidioso problema che continuava a frustrarmi e così mi sono deciso di spendere 15 min della mia giornata lavorativa a provare per cercare di disabilitare l’analizzatore di firefox. Premetto che non ho nulla in contrario a questo tool che tra l’altro funziona molto bene, semplicemente mi sono affezionato firebug e non mi va di cambiare per adesso. Cmq  per farla breve sono andato sul configuratore di firefox usando il comando about:config sulla barra degli indirizzi di firefox ed ho cercato “inspector” ed ho trovato questa voce extensions.firebug.hideDefaultInspector impostata sul false. Ho provato a impostarla su true et voila l’analizza elemento è sparito. Che sollievo…

Disabilitare l'analizzatore di elemento su Firefox