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,
));
}}
