Multisite
WP permette di gestire un ambiente multisite. In pratica si ha un sito padre e dei siti figli. La cosa comoda è che i files sono in comune quindi css, functions ecc funzionano su tutti i siti della "rete".
Vediamo come creare un ambiente multisite
<h1>Creazione ambiente</h1> - Creare un ambiente normale di WP o partire da uno già creato - Aggiornare i permalink - Disabilitare tutti i plugin - Aprire il file config.php - Aggiungere in fondo, prima del commento /* Finito, interrompere le modifiche! Buon blogging. */, la seguente riga define( 'WP_ALLOW_MULTISITE', true ); - Salvare e refreshare il backend di wp - In "impostazioni" >>> "configurazione della rete" compilare i campi richiesti (nome rete e mail admin) e scegliere l'opzione di gestire i siti figli come sottominii. - Copiare il codice proposto ed incollarlo in wp-config.php e nel .htaccess - Nel wp-config.php aggiungere poi di seguito le seguenti righe define('ADMIN_COOKIE_PATH', '/'); define('COOKIE_DOMAIN', ''); define('COOKIEPATH', ''); define('SITECOOKIEPATH', '');<br><br> - Ottenere una cosa del tipo : define('MULTISITE', true); define('SUBDOMAIN_INSTALL', true); define('DOMAIN_CURRENT_SITE', 'qrpinternationalcom.artera.org'); define('PATH_CURRENT_SITE', '/'); define('SITE_ID_CURRENT_SITE', 1); define('BLOG_ID_CURRENT_SITE', 1); define('ADMIN_COOKIE_PATH', '/'); define('COOKIE_DOMAIN', ''); define('COOKIEPATH', ''); define('SITECOOKIEPATH', ''); <h1>Creazione siti figli</h1> Una volta loggati di nuovo nel backend in alto sotto la voce "i miei siti >>> gestione network" si potranno gestire - L'elenco dei siti - L'elenco dei plugin - Gli utenti - I temi - Altre impostazioni secondarie Nell'elenco dei siti, cliccare su "Aggiungi nuovo" e compilare i campi proposti. ATTENZIONE : l'indirizzo del sito potrà poi essere cambiato successivamente. Una volta inserito, sotto "Modifica", si potrà modificarne l'indirizzo, gli utenti, i temi e le impostazioni. Definire ora il vero indirizzo del sito.
I siti, avranno però i dati diversi, uno dall'altro. Quindi post, pagine, categorie ecc
Se si volessero utilizzare le stesse taxonomy (categorie) tra i vari siti utilizzare :
/* UTILIZZO DELLE TAXONOMY E DEI TERMS DEL SITO PADRE SUI SITI FIGLI */ function buddydev_change_tax_terms_table() { global $wpdb; //change terms table to use main site's $wpdb->terms = $wpdb->base_prefix . 'terms'; //change taxonomy table to use main site's taxonomy table $wpdb->term_taxonomy = $wpdb->base_prefix . 'term_taxonomy'; //if you want to use a different sub sites table for sharing, you can replca e$wpdb->vbase_prefix with $wpdb->get_blog_prefix( $blog_id ) } add_action( 'init', 'buddydev_change_tax_terms_table', 0 ); add_action( 'switch_blog', 'buddydev_change_tax_terms_table', 0 );
Se invece vogliamo stampare un menu che faccia da link ai vari siti figli :
function projects_menu_entry($id, $title, $link_self) { global $blog_id; $url = get_home_url($id); echo '<li><a href="' . $url . '">' . __( $title,"qrpinternational") . '</a></li>'; } function projects_menu($link_self = true) { global $wpdb; echo "<div class='external-cont-albero-multisite'><div class='cont-albero-multisite clearfix'>"; echo "<div id='ico-close-country'></div>"; echo "<div class='title'>".__("Choose your Country","qrpinternational")."</div>"; echo '<ul>'; $blogs = $wpdb->get_results(" SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' "); $sites = array(); foreach ($blogs as $blog) { $sites[$blog->blog_id] = get_blog_option($blog->blog_id, 'blogname'); } natsort($sites); foreach ($sites as $blog_id => $blog_title) { projects_menu_entry($blog_id, $blog_title, $link_self); } echo '</ul></div></div>'; } add_shortcode('bloglist', function($atts){ projects_menu(true); });
Se poi tulizziamo ACF, bisogna considerare che essendo sempre dati, saranno diversi per ogni sito figlio. Quindi anche la creazione degli stessi deve essere fatta in modo particolare:
- Creare i custom post type dal sito padre, ricordandosi (perchè il cliente non faccia danni) di nascondere poi la voce del menù
- Fare export del codice (opzione di ACF tramite bottone nel pannello di ACF)
- Copiare ed incollare il codice in un file php richiamato da functions.php (vedi esempio sotto)
<?php // nascondo menu ACF per i siti figli function remove_acf_menu() { remove_menu_page('edit.php?post_type=acf'); } add_action( 'admin_menu', 'remove_acf_menu', 999); /* CUSTOM FIELDS EXPORT */ global $blog_id; if ($blog_id != -1) { if(function_exists("register_field_group")) { register_field_group(array ( 'id' => 'acf_custom-fields-downloads', 'title' => 'Custom fields downloads', 'fields' => array ( array ( 'key' => 'field_5714dce9f9013', 'label' => 'Title', 'name' => 'qrp_download_title', 'type' => 'text', 'default_value' => '', 'placeholder' => '', 'prepend' => '', 'append' => '', 'formatting' => 'html', 'maxlength' => '', ), array ( 'key' => 'field_5714dd18f9015', 'label' => 'Type', 'name' => 'qrp_download_type', 'type' => 'select', 'choices' => array ( 'Catalogue' => __('Catalogue','qrpinternational'), 'Presentations' => __('Presentations','qrpinternational'), 'Resources' => __('Resources','qrpinternational'), 'Templates' => __('Templates','qrpinternational'), ), 'default_value' => '', 'allow_null' => 0, 'multiple' => 0, ), ), 'location' => array ( array ( array ( 'param' => 'post_type', 'operator' => '==', 'value' => 'qrpdownloads', 'order_no' => 0, 'group_no' => 0, ), ), ), 'options' => array ( 'position' => 'normal', 'layout' => 'no_box', 'hide_on_screen' => array ( ), ), 'menu_order' => 0, )); }}