|
|
| (21 versioni intermedie di uno stesso utente non sono mostrate) |
| Riga 1: |
Riga 1: |
| | Progetto '''concluso''' il giorno '''17 ottobre 2022'''.<br/><br/> |
| | |
| Il progetto ha l'obiettivo di spostare tutti gli articoli di '''Magazine''' (Episerver) su una nuova istanza aggiornata di '''Wordpress'''. | | Il progetto ha l'obiettivo di spostare tutti gli articoli di '''Magazine''' (Episerver) su una nuova istanza aggiornata di '''Wordpress'''. |
|
| |
|
| Riga 22: |
Riga 24: |
| WORDPRESS_DB_PASSWORD: w3bm0b1l1 | | WORDPRESS_DB_PASSWORD: w3bm0b1l1 |
| WORDPRESS_DB_NAME: webmobili | | WORDPRESS_DB_NAME: webmobili |
| | WORDPRESS_DEBUG: 1 |
| | TZ: "Europe/Rome" |
| volumes: | | volumes: |
| - wordpress:/var/www/html | | - wordpress:/var/www/html |
| Riga 47: |
Riga 51: |
| Creare ad esempio un file uploads.ini con la direttiva -> <code>upload_max_filesize=10M;</code> | | Creare ad esempio un file uploads.ini con la direttiva -> <code>upload_max_filesize=10M;</code> |
|
| |
|
| == Abilitare le API == | | == Release in produzione == |
| Le API di Wordpress sono attive di default.<br/>
| | Il giorno in cui saliremo in produzione dovremo: |
| Le chiamate pubbliche non richiedono nessuna autenticazione, le chiamate che modificano dati vogliono la '''basic athentication'''.<br/>
| |
| | |
| Dal menu <code>Impostazioni -> Permalink</code> abilitare gli URL BELLI per avere le API sotto l'endpoint <code>/wp-json/wp/v2/</code>
| |
| | |
| Scaricare il plugin Basic Authentication da qui: <code>https://github.com/WP-API/Basic-Auth</code>
| |
| | |
| == Wordpress ==
| |
| === Dipendenze e configurazione dell'host ===
| |
| Inserire il dominio del dns pubblico nel file host<br/>
| |
| <code>sudo nano /etc/hosts</code><br/>
| |
| Metterci il loopback
| |
| <syntaxhighlight lang="bash">
| |
| 127.0.0.1 designbestmagazine.dbdemo47.com
| |
| </syntaxhighlight>
| |
| E installare i pacchett <code>intl</code> e <code>imagick</code>
| |
| <syntaxhighlight lang="bash">
| |
| sudo apt install php8.0-intl php8.0-imagick
| |
| </syntaxhighlight>
| |
| | |
| === Ambiente di Test ===
| |
| <code>http://designbestmagazine.dbdemo47.com/</code>
| |
| <pre>
| |
| Admin -> admin
| |
| Password -> W3bm0b1l!
| |
| </pre>
| |
| | |
| === Creazione del tema child ===
| |
| | |
| | |
| ==== Tema Default (Twenty Twenty-Two) ====
| |
| Creare il tema figlio.<br/>
| |
| | |
| Scaricare il plugin '''Child Theme Configurator'''<br/>
| |
| <code>Strumenti => Child themes</code>
| |
| e crearlo spuntando ''Separate Stylesheet'' e flaggare la casella per ''la copia dei menu''.<br/>
| |
| | |
| Dal gestore dei temi selezionare e attivare il tema figlio appena creato.
| |
| | |
| | |
| ==== Tema bootScore ====
| |
| https://bootscore.me/documentation/<br/>
| |
| Tema basato totalmente su '''bootstrap 5''' e '''jQuery''' che permette di modificare i CSS utilizzando sintassi SCSS.<br/>
| |
| | |
| https://bootscore.me/#download<br/>
| |
| * Scaricare '''bootScore''' e '''bootScore Child'''. Aggiungerli entrambi e attivare il tema figlio.
| |
| * Aggiunti i font nella cartella <code>/fonts</code> seguendo la guida https://bootscore.me/documentation/google-fonts/
| |
| * Creato <code>/css/scss/_bscore_custom_fonts.scss</code> con le chiamate prese dalla guida sopra
| |
| * Aggiornato <code>/css/scss/bootstrap.min.scss</code> aggiungendo la chiamata
| |
| <syntaxhighlight lang="css">@import "bscore_custom_fonts";</syntaxhighlight>
| |
| * Copiato il file <code>header.php</code> dal tema padre per modificare il nome dell'immagine logo in <code>logo.png</code>
| |
| <syntaxhighlight lang="php">
| |
| <!-- Navbar Brand -->
| |
| <a class="navbar-brand xs d-md-none" href="<?php echo esc_url(home_url()); ?>"><img src="<?php echo esc_url(get_stylesheet_directory_uri()); ?>/img/logo/logo-sm.png" alt="logo" class="logo xs"></a>
| |
| <a class="navbar-brand md d-none d-md-block" href="<?php echo esc_url(home_url()); ?>"><img src="<?php echo esc_url(get_stylesheet_directory_uri()); ?>/img/logo/logo.png" alt="logo" class="logo md"></a>
| |
| </syntaxhighlight>
| |
| * Copiato il logo in <code>img/logo/logo.png</code> e <code>img/logo/logo-sm.png</code>
| |
| <br/>
| |
| | |
| === Altri plugin base ===
| |
| * Installare '''Polylang PRO''' versione a pagamento per le funzionalità ''multi-lingua''.<br/>
| |
| Andare su <code>Lingua => impostazioni => Media => Impostazioni</code> e spuntare ''Duplica automaticamente i media in tutte le lingue'' per fare in modo che i media vengano uploadati già con un record di lingua.
| |
| * Installare '''Yoast SEO''' per la gestione del ''SEO''
| |
| | |
| Creare le '''categories''' prima.
| |
| | |
| === 4DEM nel footer ===
| |
| All'interno di un Widget con contenuto html è stato messo il seguente codice che iscrive l'utente al form di 4DEM:
| |
| <syntaxhighlight lang="html">
| |
| <p style="margin-bottom:2rem">
| |
| Rimani aggiornato su tutte le novità, le offerte e le curiosità sul mondo dell'arredo, del design e della casa!</p>
| |
| <form action="https://mailchef.4dem.it/subscribe.php" method="post" target="_blank" class="search-form" style="cursor:auto!important">
| |
| <div style="display:flex;padding-right:50px">
| |
| <input name="FormValue_Fields[EmailAddress]" type="text" placeholder="Inserisci la tua mail" required="required" class="search-field" style="cursor:auto!important">
| |
| <input name="FormValue_ListID" type="hidden" value="70904">
| |
| <input name="FormValue_Command" type="hidden" value="Subscriber.Add">
| |
| <input type="hidden" name="FormValue_Fields[CustomField52041]" value="magazine" id="FormValue_CustomField52041">
| |
| <input type="hidden" name="FormValue_Fields[CustomField52093]" value="IT" id="FormValue_CustomField52093">
| |
| <button type="submit" class="dashicons dashicons-arrow-right-alt2" style="background-color:gray;height:55px;border:none;color:white;cursor:pointer!important;width:30px">
| |
| </button>
| |
| </div>
| |
| </form>
| |
| </syntaxhighlight>
| |
| | |
| === Estensioni Designbest del tema ===
| |
| Oltre a <code>style.css</code>, i file che estendono il tema sono stati messi nella cartella del tema figlio e sono
| |
| * <code>/wp-content/themes/sway-child/DesignbestRest.php</code>
| |
| * <code>/wp-content/themes/sway-child/DesignbestMagazineExtensions.php</code>
| |
| * <code>/wp-content/themes/sway-child/assets/js/DesignbestLeadManagerForm.js</code> (chiamato internamente da DesignbestMagazineExtensions.php)
| |
| Vengono chiamati in causa tramite il file <code>functions.php</code>
| |
| <syntaxhighlight lang="php">
| |
| // DESIGNBEST EXTENSIONS
| |
| require_once('DesignbestRest.php');
| |
| require_once('DesignbestMagazineExtensions.php');
| |
| Designbest\DesignbestMagazineExtensions::init();
| |
| // END DESIGNBEST EXTENSIONS
| |
| </syntaxhighlight>
| |
| | |
| ==== Lead Manager ====
| |
| Per poter aggiungere il '''form di Lead Manager''' è stata fatta un'estensione del tema che aggiunge un '''shortcode''' al sistema Wordpress.<br/><br/>
| |
| | |
| Per utilizzarlo basta scrivere
| |
| <syntaxhighlight>[leadmanagerform]</syntaxhighlight>
| |
| all'interno di un post con l'editor di testo.<br/>
| |
| I suoi argomenti, da specificare come ''attributo="valore"'', sono i seguenti:
| |
| | |
| * ''shop_id'' - Se specificato sarà un lead privato
| |
| * ''product_id'' - ID di un prodotto, ambient e manufacturer verranno ignorati
| |
| * ''manufacturer_id'' - ID di un manu
| |
| * ''ambient_id'' - ID ambiente
| |
| * ''image_url'' - URL completa di immagine
| |
| * ''page_title'' - Titolo della pagina (opzionale, per ora non viene utilizzato).<br/><br/>
| |
| | |
| ==== API Wordpress ====
| |
| Attivare i campi meta.<br/>
| |
| Di base i '''custom fields''' sono bloccati dalle API Wordpress.<br/>
| |
| Per abilitarli è necessario aggiungere al file<br/>
| |
| <code>/wp-content/themes/<nome-del-tema-child>/functions.php</code><br/>
| |
| del tema corrente la chiamata a '''register_meta()''' specificando nome e tipologia dei campi in questione.
| |
| <syntaxhighlight lang="php">
| |
| // REST API - Registered Meta Fields
| |
| // https://developer.wordpress.org/rest-api/extending-the-rest-api/modifying-responses/#working-with-registered-meta-in-the-rest-api
| |
| register_meta( 'post', 'meta_title', array( 'type'=>'string', 'description' => 'SEO meta title per il post.', 'single' => true, 'show_in_rest' => true) );
| |
| register_meta( 'post', 'meta_description', array( 'type'=>'string', 'description' => 'SEO meta description per il post.', 'single' => true, 'show_in_rest' => true) );
| |
| register_meta( 'post', 'manufacturer_id', array( 'type'=>'integer', 'description' => 'Se presente in articolo, contiene ID del manufacturer.', 'single' => true, 'show_in_rest' => true) );
| |
| // END REST API - Registered Meta Fields
| |
| </syntaxhighlight>
| |
| Forse prima di effettuare un inserimento di post è necessario '''abilitare i campi personalizzati''' dall'interfaccia admin di editing di un post (tre puntini, preferenze, pannelli, campi personalizzati) ma non ne siamo certi.<br/><br/>
| |
| | |
| Nella nostra estensione abbiamo specificato i <code>register_meta()</code> all'interno del costruttore di <code>DesignbestMagazineExtensions</code> (tutto centralizzato)
| |
| | |
| ==== Categorie e sottocategorie ====
| |
| | |
| Chiamata Json
| |
| <code>POST http://designbestmagazine.dbdemo47.com/wp-json/wp/v2/categories</code>
| |
| <syntaxhighlight lang='json'>
| |
| {
| |
| "name": "Bagni",
| |
| "slug": "bagni",
| |
| "parent": 2,
| |
| "description": "Descrizione bagni"
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| ==== Articoli ====
| |
| Chiamata Json
| |
| <code>POST http://designbestmagazine.dbdemo47.com/wp-json/wp/v2/posts</code>
| |
| <syntaxhighlight lang='json'>
| |
| {
| |
| "title": "Titolo articolo",
| |
| "content": "Descrizione articolo.",
| |
| "categories": 1,
| |
| "status": "publish",
| |
| "slug": "titolo-articolo",
| |
| "featured_media": IDmedia,
| |
| "comment_status": "closed",
| |
| "meta": {
| |
| "meta_title": "SEO meta title del post",
| |
| "meta_description": "SEO meta description del post",
| |
| "manufacturer_id": 313
| |
| }
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| ==== Immagini e media ====
| |
| Chiamata Json
| |
| <code>POST http://designbestmagazine.dbdemo47.com/wp-json/wp/v2/media?lang=it</code><br/>
| |
| Inserire obbligatoriamente il parametro <code>lang</code> per attivare ''la duplicazione media per lingua'' di Polylang PRO.
| |
| | |
| * '''Sezione Authorization'''<br/>
| |
| Settare Basic Auth -> nome utente e password admin di wordpress<br/><br/>
| |
| | |
| * '''Sezione Header'''<br/>
| |
| Importanti gli header
| |
| <syntaxhighlight lang="bash">
| |
| Content-Type image/jpeg
| |
| Content-Disposition form-data; filename="rotto.jpg"
| |
| </syntaxhighlight>
| |
| [[File:POSTMAN WP-uploads-image.png]]<br/><br/>
| |
| | |
| * '''Sezione Body'''<br/>
| |
| Indicare il file fisico in modo che venga fatta la copia byte per byte<br/>
| |
| [[File:POSTMAN WP-uploads-image-01.png]]
| |
| | |
| ==== Tema Sway - Theme Forest ====
| |
| Il nostro tema a pagamento è '''Sway''' preso da [https://themeforest.net/ ThemeForest] che collaborano con questi che si chiamano '''Envato'''.<br/>
| |
| Le credenziali di accesso sono:<br/>
| |
| <pre>
| |
| mail: s.bracco@webmobili.it
| |
| user: cidrolino
| |
| psw: C1drolino_2022
| |
| </pre>
| |
| | |
| Con lo stesso login si può entrare su [https://build.envato.com/ Envato API] per creare un '''token''' in modo da fornire al plugin la possibilità di aggiornare i temi ThemeForest.<br/>
| |
| Il token attuale è
| |
| <pre>yaMStxmOvyqmpqCrtePopEmNNSUbo4R6</pre>
| |
|
| |
|
| Una volta creato il token utilizzare la voce '''Envato market''' nell'admin di Wordpress per avere l'aggiornamento dei temi ThemeForest.<br/>
| | * Togliere la password da <code>designbestmagazine.com</code> |
| Per aggiungere un tema bisogna procurarsi l'ID del tema ti ThemeForest.<br/>
| | * Attivare sito ''OldMagazineRedirect'' |
| Nel caso di Sway il suo ID si recupera dall'url<br/><br/>
| | * Inserire binding <code>old.magazine.dbdemo47.com</code> in sito ''DesignbestMagazine'' e togliere <code><del>magazine.designbest.com</del></code> (sia certificato che senza) e attivare la Basic Auth |
| https://themeforest.net/item/sway-multipurpose-wordpress-theme-with-page-builder/30082633<br/><br/>
| | * Inserire binding <code>magazine.designbest.com</code> a ''OldMagazineRedirect'' (con certificato SSL e senza) |
| è <code>30082633</code>
| | * Rel di Designbest senza Magazine |
| | * Testare i redirect |
| | * Sul "vecchio" Magazine ricordarsi di cambiare il dominio dall'admin Episerver: <code>old.magazine.dbdemo47.com/episerver</code> |
| | * Vecchio magazine sotto password |
Progetto concluso il giorno 17 ottobre 2022.
Il progetto ha l'obiettivo di spostare tutti gli articoli di Magazine (Episerver) su una nuova istanza aggiornata di Wordpress.
Partendo dall'estrazione per i post del magazine
https://magazine.designbest.com/api/GetAllArticlesForWordpress
e utilizzando le API di Wordpress è possibile trasferire tutti gli articoli sul database di Wordpress.
Utilizzando questo docker-compose.yml
impostiamo l'ambiente di sviluppo.
version: '3.1'
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: webmobili
WORDPRESS_DB_PASSWORD: w3bm0b1l1
WORDPRESS_DB_NAME: webmobili
WORDPRESS_DEBUG: 1
TZ: "Europe/Rome"
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
ports:
- 3306:3306
environment:
MYSQL_DATABASE: webmobili
MYSQL_USER: webmobili
MYSQL_PASSWORD: w3bm0b1l1
MYSQL_ROOT_PASSWORD: w3bm0b1l1
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
php.ini
Per conoscere il folder del file di configurazione di PHP -> cd $PHP_INI_DIR/
Andare in /usr/local/etc/php/conf.d
Creare ad esempio un file uploads.ini con la direttiva -> upload_max_filesize=10M;
Il giorno in cui saliremo in produzione dovremo:
- Togliere la password da
designbestmagazine.com
- Attivare sito OldMagazineRedirect
- Inserire binding
old.magazine.dbdemo47.com in sito DesignbestMagazine e togliere magazine.designbest.com (sia certificato che senza) e attivare la Basic Auth
- Inserire binding
magazine.designbest.com a OldMagazineRedirect (con certificato SSL e senza)
- Rel di Designbest senza Magazine
- Testare i redirect
- Sul "vecchio" Magazine ricordarsi di cambiare il dominio dall'admin Episerver:
old.magazine.dbdemo47.com/episerver
- Vecchio magazine sotto password