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>';
            }
        }
    }
}