====== WordPress ======
===== Creazione database =====
Purtroppo WordPress supporta solo MySQL.
CREATE DATABASE wp_m5scp;
GRANT ALL PRIVILEGES ON wp_m5scp.* TO "wp_m5scp"@"%" IDENTIFIED BY "MySecret";
FLUSH PRIVILEGES;
===== Versione nazionalizzata =====
Sul sito **[[https://it.wordpress.org/download/releases/]]** sono disponibili gli archivi delle versioni già nazionalizzate in italiano. Rispetto alla versione in inglese (disponibili sul [[https://wordpress.org/download/releases/|repository principale]]), l'archivio italiano contiene la directory **wordpress/wp-content/languages/** e alcuni file accessori hanno piccole diferenze, ma la base del codice è identica.
===== Installazione =====
cd /var/www/
tar zxvf /usr/local/download/wordpress/wordpress-3.4.2-it_IT.tar.gz
mv wordpress/ wp
chown -R niccolo.niccolo wp/
cd wp/
chown www-data wp-content/uploads/
cp -p wp-config-sample.php wp-config.php
vi wp-config.php
Proseguire la procedura di installazione via web puntando il browser su **%%http://myhost/wp/wp-admin/install.php%%**.
===== URL per login =====
Se si nascondo il link per la pagina di login, sarà comunque possibile accedervi digitando direttamente il suffisso **wp-login.php** dopo l'URL base del sito.
===== Plugin bbPress =====
Installazione del plugin [[http://wordpress.org/extend/plugins/bbpress/|bbPress]]
cd wp/wp-content/plugins/
unzip /usr/local/download/wordpress/bbpress.2.1.3.zip
find bbpress -type d | xargs chmod 755
find bbpress -type f | xargs chmod 644
Collegarsi come Admin, //Plugin// -> //bbPress// -> //Attiva//.
Nel menu amministrazione compare un nuovo menu Forum in cui è possibile creare nuovi Forum (dibattiti) e nuovi Topic (punti del dibattito).
==== bbPress in italiano ====
Per avere la traduzione in italiano del plugin conviene andare sul sito [[http://translate.wordpress.org/projects/bbpress/]] ed utilizzare la funzione //Export// per scaricare il file aggiornato.
**ATTENZIONE!** bbPress è anche un programma stand-alone, ma si tratta sostanzialmente di due prodotti differenti! Vari link, repository e istruzioni che si trovano sulla rete si riferiscono al programma stand-alone e non al plugin per WordPress.
Il file deve essere copiato in **''wp-content/languages/bbpress/bbpress-it_IT.mo''**, e compilato (installare il pacchetto **gettext**) con:
msgfmt -o bbpress-it_IT.mo bbpress-it_IT.po
===== Configurazione =====
==== Nuovi utenti ====
Per consentire a nuovi utenti di registrarsi: collegarsi come Admin //Impostazioni// -> //Generale// -> //Chiunque può registrarsi//. Impostare come ruolo predefinito //Sottoscrittore//, in modo che il nuovo iscritto possa solo leggere e non aggiungere o modificare contenuti.
* Il nome di login e **case-insensitive**.
* L'**email di registrazione** deve essere univoca.
* L'immagine da usare come **avatar** viene presa da [[https://it.gravatar.com/]]. Da //Impostazioni// -> //Discussione// conviene abilitare il **//Wavatar (Generato)//** per gli utenti che non hanno il Gravatar, altrimenti compare l'icona standard uguale per tutti. Se si vuole un avater personalizzato salvato in locale si può installare il plugin [[http://wordpress.org/extend/plugins/simple-local-avatars/|Simple Local Avatar]].
==== Forum ====
Sembra impossibile modificare l'autore che ha iniziato un topic. Direttamente sul database si recupera l'ID dell'utente e l'ID del topic e si effettual ''UPDATE'' manuale:
SELECT ID, user_login FROM wp_users WHERE user_login = 'Niccolo';
SELECT ID, post_author, post_status, post_type, post_title
FROM wp_posts
WHERE post_type = 'topic'
AND post_title LIKE '%illuminazione pubblica a LED%';
UPDATE wp_posts SET post_author = "2" WHERE ID = 57;
La ricerca standard di WordPress non agisce sul contenuto del forum, vedere se questo plugin è la soluzione migliore: [[http://wordpress.org/extend/plugins/bbpress-search-widget/|bbpress-search-widget]].
==== Menu ====
Le voci della barra menu vengono aggiunte automaticamente quando si aggiunge una **Pagina**. L'ordine viene impostato dal campo **Ordinamento** della pagina stessa: un valore maggiore sposta il menu più a destra.
**Come far comparire un link all'indice dei forum nel menu?**
L'indice dei forum viene generato automaticamente all'URL **''.../forums/''**, si potrebbe creare una pagina che ha quell'URL come permalink: un link alla pagina compare nella barra dei menu, ma purtroppo la pagina nasconde l'indice.
Se si usa il **tema Ttwenty Ten** (del 2010) allora si possono attivare i template di bbPress Twenty Ten nella configurazione del plugin. Infine si crea una pagina usando il template **bbPress - Forums (Index)**. Quella pagina mostrerà l'indice.
Se si usa il **tema Twenty Eleven** invece si deve ricorrere agli **shortcode**: si crea una normale pagina e al suo interno si inserisce una stringa del tipo:
[bbp-forum-index]
[bbp-single-forum id=2]
Scegliere uno degli [[http://codex.bbpress.org/shortcodes/|shortcode di bbPress]] disponibili. Il core di WordPress e i vari plugin espongono tali shortcode (sostanzialmente sono delle macro). Esiste un plugin che automaticamente li mostra durante l'editing di una pagina, il plugin si chiama [[http://wordpress.org/extend/plugins/shortcode-reference/|Shortcode Reference]].
==== Permessi ====
Vedere [[http://codex.wordpress.org/Roles_and_Capabilities|Roles and Capabilities]] in WordPress.
* **Impostazioni WordPress**
* **Generale**
* Iscrizione: Chiunque può registrarsi
* Ruolo predefinito nuovi utenti: Sottoscrittore
* **Discussione**
* Consenti la scrittura di commenti per i nuovi articoli
* Gli utenti devono essere registrati e fare il login per poter inviare commenti
* Gli autori di un commento devono avere un commento già approvato in precedenza
* **Plugin bbPress settings**
* Allow Anonymous Posting: No
^ Attività ^ Sottoscrittore ^ Collaboratore ^ Autore ^
^ Aggiungere articolo | No | Moderato | Sì |
^ Postare commento | Moderato il 1° | Moderato il 1° | Sì |
^ Aggiungere Forum | No | No | Sì |
^ Aggiungere Topic | Sì | Sì | Sì |
^ Commentare Topic | Sì | Sì | Sì |
^ Upload file | No | No | Sì |
==== Mittente email di servizio ====
Come mittente viene usato **%%wordpress@dominio%%** dove il dominio è il nome del dominio di installzione di WordPress avendo tolto il **www** iniziale.
Vedere l'articolo [[http://butlerblog.com/2011/07/08/changing-the-wp_mail-from-address-in-wordpress-without-a-plugin/|Changing the wp_mail from address in wordpress without a plugin]] che spiega come modificarlo a livello di tema. In pratica basta aggiungere questo codice al file **''wp-content/themes/twentyeleven/functions.php''** (cioè del tema in uso):
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return 'myemail@mydomain.com';
}
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return 'My Name';
}
==== Intestazione e piè di pagina ====
Si agisce sul tema, in particolare sui file**''wp-content/themes/twentyeleven/header.php''** e **''footer.php''**.
===== Facebook plugin =====
Provati i seguenti plugin:
* [[http://wordpress.org/plugins/really-simple-facebook-twitter-share-buttons/|Really simple Facebook Twitter share buttons]]
* [[http://wordpress.org/plugins/facebook/|Facebook]] FIXME Sembra abbandonato, ultimo aggiornamento del 2014!
* [[http://wordpress.org/plugins/sociable/|Sociable]] FIXME Errori con PHP7!
Con il primo compaoiono i classici pulsanti "Mi piace" in fondo ad ogni pagina, per Facebook, Twitter, Google+, e molti altri. Pare che non ci sia la possibilità di fare "condividi" con Facebook, ma solo "mi piace"?
Pare che il plugin Facebook (ufficiale) non è compatibile con //Really simple Facebook Twitter share buttons//: si viene avvisati da un warning. FIXME Verificare se possono convivere per avere i pulsanti Twitter, Google+, ecc. Dopo aver attivato il plugin Facebook compare un nuovo menu nella barra di amministrazione a sinistra. Bisogna impostare un **App ID** e un **App secret** che verranno usate per pubblicare sulla timeline di Facebook.
Il terzo plugin pare che sia quello più quotato per la condivisione sui social network. Conviene demandare a lui la visualizzazione dei pulsanti di condivisione (permette il "condividi" su Facebook) e lasciare al plugin Facebook solo la funzione di aggiornamento automatico della timeline. Purtroppo non viene più aggiornato da diverso tempo e **non è compatibile con PHP7**.
===== Disabilitare i commenti agli articoli =====
Per togliere i commenti a tutti gli articoli già pubblicati: //Articoli//, selezionarli tutti, //Azioni di gruppo//, //Modifica//, //Commenti// => **Non permettere**.
Per gli articoli nuovi: //Impostazioni//, //Discussione//, **Consenti la scrittura di commenti per i nuovi articoli**.
===== Permalink e Rewrite =====
Per far funzionare i permalink del tipo **%%http://www.sito.org/wp/2017/02/24/titolo/%%** è necessario attivare le opportune regole Rewrite del server web. Wordpress fornisce il seguente esempio nel file **.htaccess**:
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
È preferibile mettere tali direttive nel file di configurazione di Apache (per motivi di performance), ad esempio in una sezione **%%%%**.
Nel caso in cui invece si preferisca usare il file .htaccess, è necessaria comunque una direttiva (almeno per Apache 2.4):
AllowOverride FileInfo
===== Permessi su filesystem e aggiornamenti =====
In genere l'installazione iniziale dei file PHP si effettua via FTP/SFTP o similari, anche l'installazione e aggiornamento di plugin e temi può essere fatto con lo stesso metodo.
WordPress offre nella sua interfaccia di amministrazione web l'opzione per l'aggiornamento dei plugin e temi, in tal caso il codice PHP deve essere in grado di modificare i file sul filesystem. Per questo WordPress può utilizzare due metodi diveris:
* **direct** Con questo metodo il codice WordPress presuppone di poter modificare direttamente i file, che pertanto dovranno essere scrivibili dal processo che esegue il server web (tipicamente l'utente www-data in un sistema Debian GNU/Linux).
* **FTP/SFTP** Con questo metodo il codice WordPress accederà al filesystem effettuando una sessione FTP o SFTP con le credenziali che verranno fornite in modo interattivo.
WordPress tenta entrambi i metodi per vedere se uno dei due funziona. È possibile forzare l'uno o l'altro impostando in **wp-config.php** la seguente direttiva:
define('FS_METHOD','direct');
Vedere **[[https://www.danielealessandra.com/come-risolvere-il-problema-della-richiesta-delle-credenziali-ftp-da-parte-di-wordpress/2/|Come risolvere il problema della richiesta delle credenziali FTP da parte di WordPress]]**.
===== Aggiornamento plugin =====
Esiste la possibilità di aggiornare i plugin installati direttamente dal menu amministrazione, Plugin. Tuttavia bisogna che i file siano scrivibili dal server web.
L'alternativa manuale prevede:
* Dalla dashboard disattivare il plugin in questione,
* Scaricare l'archivio e scompattarlo sostituendo al vecchia directory in **''wp-content/plugins/''** (impostare opportunamente il proprietario e i permessi).
* Riattivare il plugin dalla dashboard.
A giudicare da questo [[https://wordpress.org/support/topic/how-to-update-a-database-table-during-plugin-update|post]] e [[http://wordpress.stackexchange.com/questions/67345/how-to-implement-wordpress-plugin-update-that-modifies-the-database|quest'altro]] non esiste una procedura standard da eseguire dopo l'upgrade (es. per aggiornare il database), ma dovrebbe provvedere il plugin in automatico, ovviamente se è scritto bene.
===== Aggiornamento temi =====
Come per i plugin, esiste la possibilità di aggiornare i temi installati direttamente dal menu amministrazione, Aggiornamenti. Tuttavia bisogna che i file siano scrivibili dal server web.
In alternativa si scarica l'archivio e lo si scompatta sostituendo al vecchia directory in **''wp-content/themes/''**, settando opportunamente il proprietario e i permessi.
Esiste un repository di temi scaricabili: [[https://wordpress.org/themes/]]
===== Aggiornamento Wordpress =====
Queste le istruzioni per l'aggiornamento manuale. Vedere l'articolo **[[https://wordpress.org/documentation/article/updating-wordpress/|Updating WordPress]]**.
- Scaricare l'archivio della nuova versione, eventualmente quello già nazionalizzato in italiano da [[http://it.wordpress.org/|it.wordpress.org]].
- Non esiste purtroppo un modo per mettere il sito off-line, esistono eventualmente dei plugin appositi.
- Fare un backup della DocumentRoot: tar zcvf wp.tgz /var/www/wp/
- Fare un dump del database: mysqldump --host=localhost --user=wp_db --password --add-drop-table wp_db > wp_db.dump
- Dalla //Bacheca//, //Aggiornamenti// prendere nota delle versioni correnti e aggiornamenti disponibili per plugin e temi.
- Da //Aspetto//, //Temi// controllare il tema in uso, eventualmente reimpostare uno di quelli predefiniti.
- Da //Plugin//, //Plugin installati// prendere nota di quelli attivi e disattivarli tutti.
- **Sostituire** le directory **''wp-admin/''** e **''wp-includes/''** con quelle nuove.
- **Copiare** il contenuto della directory **''wp-content/''**, sostituendo i file vecchi (ma lasciando eventuali file in più).
- **Copiare** il contenuto della **directory radice**, sostitutendo i file vecchi (ma lasciando eventuali file in più) e avendo cura di non includere le sottodirectory.
- Puntare il browser sul'URL del sito, sottodirectory **''/wp-admin''**. Se richiesto procedere all'aggiornamento del database.
- Riabilitare i plugin.
- Aggiornare (sempre manualmente) i plugin.
===== Cambio URL base =====
Se si migra un sito Wordpress su altro server, generalmente cambia l'**URL base**. Anche l'attivazione del protocollo HTTPS cambia la parte iniziale dell'URL da **%%http://%%** a **%%https://%%**. Wordpress non gestisce molto bene questa situazione perché spesso il contenuto di una pagina o di un articolo include il link ad una pagina interna sotto forma di **link assoluto**, non relativo.
La prima cosa da fare è accedere in modalità amministratore e modificare le **Impostazioni generali**, in particolare si deve aggiornare **Indirizzo WordPress (URL)** e **Indirizzo sito (URL)**. Dopo aver fatto la modifica si può controllare se il database è stato aggiornato correttamente:
SELECT * FROM wp_options WHERE option_name = 'siteurl';
SELECT * FROM wp_options WHERE option_name = 'home';
Questo modifica il modo in cui vengono generati dinamicamente i link, ma non aggiorna il contenuto di pagine e articoli.
Per **aggiornare** il contenuto di **pagine** e **articoli** è necessario **modificare il contenuto del database**. Supponiamo che il vecchio URL base fosse **%%http://www.old-domain.tld/%%** e quello nuovo deve essere **%%https://www.new-domain.tld/%%**, anzitutto si può controllare il contenuto del database:
SELECT post_content FROM wp_posts WHERE post_content LIKE '%www.old-domain.tld%';
SELECT guid FROM wp_posts WHERE guid LIKE '%www.old-domain.tld%';
Quindi si procede all'aggiornamento:
UPDATE wp_posts SET post_content =
REPLACE(post_content, 'http://www.old-domain.tld/', 'https://www.new-domain.tld/');
UPDATE wp_posts SET guid =
REPLACE(guid, 'http://www.old-domain.tld/', 'https://www.new-domain.tld/');
===== Permessi per installazione plugin da pannello web =====
Se si desidera installare componenti aggiuntivi da pannello di controllo web è necessario che il server http abbia i permessi sufficienti per scrivere nella directory **wp-content/upgrade/** e **wp-content/plugins/** (in generale è opportuno che il server web abbia i permessi su tutta la **wp-content/**).
Una volta confermato questo, si indica a WordPress di utilizzare il metodo //direct// per accedere al filesystem, in caso contrario WordPress tenterà di fare accesso via FTP chiedendo le credneziali opportune. Per preferire l'accesso //direct// si aggiungono le righe al file **wp-config.php**:
define ('FS_METHOD', 'direct');
define ('FS_CHMOD_DIR', 02775);
define ('FS_CHMOD_FILE', 0664);
In questo modo si possono specificare anche i permessi predefiniti assegnati a file e directory (numero ottale per i permessi Unix).
===== Disabilitare gli aggiornamenti automatici =====
# Disabilitare completamente gli aggiornamenti automatici.
define('AUTOMATIC_UPDATER_DISABLED', true);
# Aggiorna automaticamente le release maggiori o solo le minori (true/false/'minor').
define('WP_AUTO_UPDATE_CORE', false);
# Aggiornamento automatico dei plugin (__return_true/__return_false).
add_filter('auto_update_plugin', '__return_false');
# Aggiornamento automatico dei temi (__return_true/__return_false).
add_filter('auto_update_theme', '__return_false');