<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>wordpress theme development - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/wordpress-theme-development/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Tue, 26 May 2026 12:56:11 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>wordpress theme development - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OpenCode per temi WordPress: ambiente LAMP, ottimizzazione AGENTS.md, server MCP</title>
		<link>https://www.mrtux.it/opencode-per-lo-sviluppo-di-temi-wordpress-ambiente-lamp-locale-ottimizzazione-agents-md-e-server-mcp</link>
					<comments>https://www.mrtux.it/opencode-per-lo-sviluppo-di-temi-wordpress-ambiente-lamp-locale-ottimizzazione-agents-md-e-server-mcp#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Tue, 26 May 2026 11:46:34 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[lamp locale wordpress]]></category>
		<category><![CDATA[mcp server wordpress]]></category>
		<category><![CDATA[openclaw agents]]></category>
		<category><![CDATA[opencode wordpress]]></category>
		<category><![CDATA[opencode wordpress theme development]]></category>
		<category><![CDATA[sviluppo temi wordpress]]></category>
		<category><![CDATA[wordpress dev environment]]></category>
		<category><![CDATA[wordpress theme development]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/?p=3408</guid>

					<description><![CDATA[Scopri come configurare un ambiente LAMP locale, ottimizzare AGENTS.md e usare i server MCP per sviluppare temi WordPress professionali con OpenCode.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Setup LAMP locale per sviluppo WordPress con OpenCode</h2>


<p class="wp-block-paragraph">Quando si tratta di sviluppare temi WordPress con un agente AI come OpenCode, l&#x27;ambiente di lavoro fa la differenza tra un flusso fluido e una sequela di intoppi. Un server LAMP locale — Linux, Apache, MySQL, PHP — ti dà il controllo completo senza dipendere da connessioni remote durante la generazione del codice. È il setup che i developer WordPress professionisti usano da anni, e che si integra naturalmente con strumenti come OpenCode.</p>


<p class="wp-block-paragraph">Se lavori già con AI e WordPress, sai che il grosso del tempo non sta nel scrivere codice, ma nel configurare l&#x27;ambiente, gestire le dipendenze e tenere il ambiente di staging allineato con la produzione. Per questo motivo, prima di entrare nei dettagli su OpenCode e i server MCP, partiamo dalla base: come montare un ambiente LAMP solido su Ubuntu o tramite Docker.</p>


<p class="wp-block-paragraph">Per chi arriva da un approccio più visuale e vuole capire come l&#x27;AI si inserisce nel workflow WordPress, abbiamo analizzato nel dettaglio l&#x27;approccio con <a href="https://www.mrtux.it/web-design-wordpress-novamira-ai" data-wpel-link="internal" target="_self" rel="noopener">Novamira.ai per il web design WordPress</a>, che condivide molti principi di integrazione con agenti AI che applicheremo qui.</p>


<h2 class="wp-block-heading">Perché un ambiente LAMP locale per WordPress theme development</h2>


<p class="wp-block-paragraph">Un ambiente LAMP locale ti dà un&#x27;istanza WordPress completa — database MySQL, PHP engine, web server Apache — tutto sul tuo机器. Non servono upload FTP, non c&#x27;è latenza di rete, non dipendi da un hosting provider. OpenCode può leggere e scrivere file direttamente sul filesystem, interrogare il database, attivare e disattivare plugin via WP-CLI, il tutto senza uscire dal tuo terminale.</p>


<p class="wp-block-paragraph">I vantaggi concreti:</p>


<ul class="wp-block-list"><li><strong>Velocità</strong>: nessuna round-trip verso un server remoto. OpenCode legge <code>style.css</code> o <code>theme.json</code> in millisecondi.</li><li><strong>Sicurezza</strong>: esperimenti e refactoring restano in locale finché non decidi tu cosa promuovere in staging.</li><li><strong>Riproducibilità</strong>: Docker Compose o Lando ti permettono di ricostruire l&#x27;ambiente identico su qualsiasi机器.</li><li><strong>WP-CLI nativo</strong>: puoi lanciare comandi WordPress da terminale senza passare per l&#x27;interfaccia admin.</li></ul>


<h3 class="wp-block-heading">Ubuntu: installazione manuale LAMP</h3>


<p class="wp-block-paragraph">Su Ubuntu 22.04 o 24.04, un setup LAMP completo per WordPress si installa in pochi passaggi. Il vantaggio rispetto a soluzioni pre-confezionate è che hai il pieno controllo delle versioni di PHP e MySQL.</p>


<pre class="wp-block-code"><code># Installazione pacchetti Apache, MySQL e PHP
sudo apt update &amp;&amp; sudo apt install -y apache2 mysql-server php8.2 \
  php8.2-mysql php8.2-cli php8.2-curl php8.2-gd php8.2-mbstring \
  php8.2-xml php8.2-zip php8.2-bcmath php8.2-intl

# Abilitare mod Apache necessari
sudo a2enmod rewrite headers ssl

# Avviare Apache e MySQL
sudo systemctl enable --now apache2 mysql

# Proteggere installazione MySQL (password root)
sudo mysql_secure_installation</code></pre>


<p class="wp-block-paragraph">Dopo l&#x27;installazione, crea il database WordPress. Il comando MySQL seguente imposta tutto in una volta:</p>


<pre class="wp-block-code"><code>-- Creazione database e utente per WordPress locale
CREATE DATABASE wordpress_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'wppassword';
GRANT ALL PRIVILEGES ON wordpress_dev.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;</code></pre>


<p class="wp-block-paragraph">A questo punto scarica WordPress e puntando il browser su <code>http://localhost</code> partirà l&#x27;installazione guidata classica. Per un workflow più rapido con OpenCode, usa WP-CLI:</p>


<pre class="wp-block-code"><code># Download e configurazione WordPress via WP-CLI
wp core download --locale=it_IT
wp config create --dbname=wordpress_dev --dbuser=wpuser --dbpass=wppassword
wp core install --url="http://localhost" --title="Sviluppo WP" --admin_user=admin --admin_password=admin --admin_email=dev@local.it</code></pre>


<p class="wp-block-paragraph">La combinazione Ubuntu LAMP + WP-CLI ti dà un ambiente dove OpenCode può operare con i server MCP descritti più avanti. Per chi preferisce un setup pre-configurato con staging automatico, consulta la nostra guida agli <a href="https://www.mrtux.it/web-design-per-wordpress-tool-essenziali-per-creare-temi-efficaci-nel-2026" data-wpel-link="internal" target="_self" rel="noopener">strumenti essenziali per il web design WordPress</a> che include configurazioni LAMP alternative.</p>


<h3 class="wp-block-heading">Docker: ambiente LAMP containerizzato</h3>


<p class="wp-block-paragraph">Se preferisci la containerizzazione, Docker elimina la necessità di installare pacchetti nativi e garantisce portabilità. Il file <code>docker-compose.yml</code> seguente definisce un ambiente LAMP completo per WordPress theme development:</p>


<pre class="wp-block-code"><code># docker-compose.yml per WordPress theme dev con LAMP
version: '3.9'
services:
  wordpress:
    image: wordpress:6.6-php8.2-apache
    container_name: wp_theme_dev
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wp_theme
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppassword
    volumes:
      - ./wp-content:/var/www/html/wp-content
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    depends_on:
      db:
        condition: service_healthy

  db:
    image: mysql:8.0
    container_name: wp_theme_db
    environment:
      MYSQL_DATABASE: wp_theme
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppassword
      MYSQL_ROOT_PASSWORD: rootpassword
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 10s
      retries: 5

volumes:
  db_data:</code></pre>


<p class="wp-block-paragraph">Il mount di <code>./wp-content</code> sul container è strategico: i file del tema che OpenCode genera o modifica sono accessibili sia dal container che dal host, senza bisogno di rsync o FTP. Lancia l&#x27;ambiente con:</p>


<pre class="wp-block-code"><code># Avvio ambiente Docker LAMP per WordPress
docker compose up -d

# Verifica che WordPress risponda
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080</code></pre>


<p class="wp-block-paragraph">Questa configurazione è identica per tutti i membri del team: chiunque abbia Docker installato può replicare l&#x27;ambiente con un singolo comando.</p>


<h2 class="wp-block-heading">Configurazione e ottimizzazione di AGENTS.md per WordPress</h2>


<p class="wp-block-paragraph">Il file <code>AGENTS.md</code> nel workspace di OpenClaw è il cuore della configurazione dell&#x27;agente AI. Per lo sviluppo WordPress, una configurazione mirata rende OpenCode significativamente più efficace: invece di generare codice generico, rispetta le convenzioni del progetto, conosce la struttura del tema, sa quali plugin sono attivi.</p>


<h3 class="wp-block-heading">Struttura base di AGENTS.md ottimizzato per WordPress</h3>


<p class="wp-block-paragraph">Una configurazione AGENTS.md efficace per WordPress theme development contiene alcune sezioni chiave. La prima è il context del progetto:</p>


<pre class="wp-block-code"><code># AGENTS.md — WordPress Theme Development

## Progetto
- Tipo: Tema WordPress custom (child theme / block theme / classic)
- CMS: WordPress 6.4+ con PHP 8.2
- Theme slug: __THEME_SLUG__
- Text domain: __TEXT_DOMAIN__
- Plugin previsti: Rank Math SEO, Contact Form 7, WooCommerce (se ecommerce)

## Struttura tema attesa

mytheme/
├── style.css              # Header + CSS principale
├── functions.php          # Setup, hook, enqueue
├── theme.json              # Full Site Editing (se block theme)
├── index.php               # Fallback template
├── header.php              # Head + header markup
├── footer.php              # Footer + script closing
├── front-page.php          # Homepage
├── singular.php            # Single post / page
├── archive.php             # Archivio post
├── search.php              # Risultati ricerca
├── 404.php                 # Pagina errore
├── screenshot.png          # 880x660px
├── assets/
│   ├── css/style.css
│   ├── js/main.js
│   └── images/
└── parts/
    ├── navbar.php
    ├── loop.php
    └── footer-content.php</code></pre>


<p class="wp-block-paragraph">Questa struttura rispecchia lo standard WordPress e permette a OpenCode disap dove collocare ogni file generato.</p>


<h3 class="wp-block-heading">Regole e vincoli per il codice WordPress</h3>


<p class="wp-block-paragraph">AGENTS.md deve includere anche i vincoli tecnici che OpenCode deve rispettare. Questo evita che generi codice incompatibile con il resto dell&#x27;installazione:</p>


<pre class="wp-block-code"><code>## Vincoli tecnici WordPress

### PHP
- Sempre <code>&lt;?php</code> opening tag, mai <code>&lt;?</code> short open tag
- Sempre <code>if ( ! defined( &#039;ABSPATH&#039; ) ) exit;</code> all'inizio di ogni file
- Prefix tutte le funzioni con lo slug del tema: <code>mytheme_enqueue_assets()</code>
- Non usare funzioni deprecate (cerca <code>WP_DEPRECATED</code> in documentazione)

### CSS
- BEM naming convention: <code>.mytheme-block__element--modifier</code>
- Mobile-first responsive: <code>@media (min-width: 768px)</code> breakpoint tablet
- Nessun <code>!important</code> se non strettamente necessario e commentato
- Variabili CSS per colori e spacing: <code>--mytheme-color-primary</code>

### Hook WordPress
- Priorità standard <code>10</code>, specificare se diversa
- Usare <code>__return_false</code> / <code>__return_true</code> per filtri booleani
- I hook personalizzati del tema: <code>do_action( &#039;mytheme_before_header&#039; )</code>

### Sicurezza output
- Tutti gli output HTML: <code>esc_html()</code>, <code>esc_attr()</code>, <code>esc_url()</code>
- Tutti gli output JS: <code>wp_json_encode()</code> + <code>esc_html()</code>
- Tutti gli input utente: <code>sanitize_text_field()</code>, <code>intval()</code>, <code>absint()</code>
- Non usare mai <code>eval()</code> né <code>extract()</code> con input non validato

### theme.json (block theme)
- Versione schema: "2" per WordPress 6.1+
- Colori custom: usare sempre <code>slug</code> minuscolo con trattino
- Tipografia: unità <code>px</code> o <code>rem</code>, mai <code>em</code> per scale fix</code></pre>


<h3 class="wp-block-heading">Prompt e comandi personalizzati</h3>


<p class="wp-block-paragraph">Una sezione spesso trascurata è quella dei comandi rapidi che accelerano il workflow con OpenCode. Definirli in AGENTS.md significa non doverli riscrivere ogni volta:</p>


<pre class="wp-block-code"><code>## Comandi rapidi WordPress (usare con OpenCode)

### Scaffolding
/create-theme name=mytheme type=classic|block|child parent=twentytwentyfour
/generate-template-part name=newsletter-bar location=footer
/add-block-pattern category=hero name=hero-home title="Hero Homepage"

### Debug locale
/wp-cli db export  # esporta database locale
/wp-cli theme list # lista temi installati con status
/wp-cli post list --post_type=page --fields=ID,post_title,post_status

### Hook utility
/show-hooks         # mostra tutti i filtri e azioni registrati
/list-sidebars      # elenca sidebars registrati con ID e descrizione
/check-theme-deps   # verifica dipendenze plugin del tema</code></pre>


<p class="wp-block-paragraph">Aggiornare AGENTS.md con la configurazione WordPress specifica del progetto è un investimento iniziale che si ripaga in ogni sessione successiva. OpenCode avrà il contesto necessario per generare codice coerente con la struttura esistente, rispettando le convenzioni definite, senza doverle ripetere nei prompt.</p>


<h2 class="wp-block-heading">Server MCP essenziali per lo sviluppo WordPress con OpenCode</h2>


<p class="wp-block-paragraph">Il protocollo MCP (Model Context Protocol) è il layer che permette a OpenCode di interagire con l&#x27;ecosistema WordPress: leggere file del tema, interrogare il database, cercare nella directory WordPress.org, usare WP-CLI. Ogni server MCP copre un&#x27;area operativa specifica.</p>


<h3 class="wp-block-heading">Server MCP Filesystem</h3>


<p class="wp-block-paragraph">Il server MCP Filesystem è probabilmente il più importante per lo sviluppo WordPress. Ti dà accesso completo al filesystem del progetto, permettendo a OpenCode di leggere template esistenti, modificare <code>functions.php</code>, creare nuovi file del tema, e navigare la struttura delle directory.</p>


<pre class="wp-block-code"><code># Avvio del server MCP filesystem
# Configurazione tipica in openclaw config o .mcp.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem",
               "/home/user/wordpress-dev/wp-content/themes",
               "/home/user/wordpress-dev/wp-content/plugins"]
    }
  }
}</code></pre>


<p class="wp-block-paragraph">Con questo server attivo, OpenCode può navigare la struttura del tema, leggere file esistenti prima di proporne modifiche, e scrivere nuovi file direttamente nella directory del progetto. Il vantaggio rispetto a prompt generici è che il contesto è sempre il codice reale del progetto, non un&#x27;astrazione.</p>


<h3 class="wp-block-heading">Server MCP WordPress.org</h3>


<p class="wp-block-paragraph">Il server MCP WordPress.org permette di cercare nella directory dei plugin e dei temi ufficiali, leggere recensioni, verificare compatibilità e scaricare informazioni su pacchetti specifici. È utile quando si valutano plugin da includere nel tema o quando si vuole verificare che una funzionalità non esista già in un plugin maturo.</p>


<pre class="wp-block-code"><code># Ricerca plugin WordPress.org via MCP
mcp__wordpress__search_plugins query="seo meta description" per_page=10

# Ottenere dettagli plugin specifico
mcp__wordpress__get_plugin plugin_slug="wordpress-seo"</code></pre>


<p class="wp-block-paragraph">La ricerca nella directory ufficiale è particolarmente utile per verificare se un plugin copre già una funzionalità che altrimenti implementeresti da zero. Sviluppare funzionalità native quando esiste un plugin maturo è spesso uno spreco di tempo e manutenzione.</p>


<h3 class="wp-block-heading">Server MCP WordPress Studio / WP-CLI</h3>


<p class="wp-block-paragraph">Il server MCP WordPress Studio espone WP-CLI e l&#x27;istanza WordPress completa all&#x27;agente AI. Con questo server, OpenCode può eseguire comandi WP-CLI, attivare e disattivare plugin, generare contenuto di test, resettare il database, e gestire aspetti runtime dell&#x27;installazione WordPress.</p>


<pre class="wp-block-code"><code># Comandi WP-CLI accessibili via MCP
mcp__wpcli__run command="theme list --format=table"
mcp__wpcli__run command="plugin list --status=active --format=json"
mcp__wpcli__run command="post create --post_type=page --post_title="Test Page" --post_status=draft"

# Reset database locale (utile tra un test e l'altro)
mcp__wpcli__run command="db reset --yes"</code></pre>


<p class="wp-block-paragraph">Questo è il server che collega OpenCode al lato runtime di WordPress: non solo il codice statico, ma il comportamento effettivo del CMS con plugin attivi, post esistenti, opzioni configurate.</p>


<h3 class="wp-block-heading">Server MCP Database</h3>


<p class="wp-block-paragraph">Per operazioni dirette sul database MySQL, il server MCP Database ti dà accesso SQL completo. È meno frequente da usare direttamente, ma diventa essenziale quando servono query di massa, export dati, o verifiche sulla struttura delle tabelle del sito.</p>


<pre class="wp-block-code"><code>-- Verificare struttura tabella postmeta prima di una query personalizzata
DESCRIBE wp_postmeta;

-- Conteggio post per stato (utile dopo un import massiccio)
SELECT post_status, COUNT(*) FROM wp_posts GROUP BY post_status;

-- Verificare opzioni del tema (customizer data)
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '%mytheme%';</code></pre>


<p class="wp-block-paragraph">Il rischio di operare direttamente sul database è alto: una query <code>UPDATE</code> o <code>DELETE</code> senza <code>WHERE</code> può distruggere dati. Usa questo server solo quando sai esattamente cosa stai facendo, e sempre su ambiente locale o di staging, mai su produzione.</p>


<h2 class="wp-block-heading">Workflow pratico: creare un tema WordPress completo da zero con OpenCode</h2>


<p class="wp-block-paragraph">Messe in fila tutte le configurazioni, il workflow reale con OpenCode e WordPress è iterativo. Non si tratta di generare un tema intero in un singolo prompt, ma di costruirlo progressivamente: struttura, template, funzionalità, test, raffinamento.</p>


<h3 class="wp-block-heading">Step 1 — Brief iniziale e scaffolding</h3>


<p class="wp-block-paragraph">Il prompt iniziale imposta il progetto. Invece di descrivere genericamente &quot;voglio un tema per blog&quot;, siamo specifici: funzionalità richieste, plugin da supportare, style guide se esistono, breakpoint responsivi.</p>


<pre class="wp-block-code"><code># Prompt iniziale per OpenCode
/create-wordpress-theme
  name=mythemeblog
  domain=mythemeblog
  description="Tema blog personale con focus leggibilità"
  features=post-grid,related-posts,dark-mode,cookie-banner,amp
  plugins=rank-math-seo,contact-form-7,wp-optimize
  breakpoints=mobile:375,tablet:768,desktop:1200
  style=groove-retro-light</code></pre>


<p class="wp-block-paragraph">OpenCode analizza il brief e produce la struttura base: <code>style.css</code> con header completo, <code>functions.php</code> con setup iniziale, <code>theme.json</code> se richiesto per block theme, e i template PHP essenziali.</p>


<h3 class="wp-block-heading">Step 2 — Configurazione functions.php</h3>


<p class="wp-block-paragraph">Dopo lo scaffolding, il file <code>functions.php</code> va arricchito con le funzionalità specifiche del progetto. OpenCode può generare blocchi mirati per ogni necessità:</p>


<pre class="wp-block-code"><code>&lt;?php
/**
 * MyThemeBlog functions and definitions
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 */

if ( ! defined( 'ABSPATH' ) ) exit;

/** === Enqueue Scripts e Styles === */
function mythemeblog_enqueue_assets() {
    // CSS principale del tema
    wp_enqueue_style( 'mythemeblog-style', get_stylesheet_uri(), [], wp_get_theme()-&gt;get( 'Version' ) );
    // JavaScript con defer per performance
    wp_enqueue_script( 'mythemeblog-main', get_template_directory_uri() . '/assets/js/main.js', [], '1.0.0', true );
    // Google Fonts (async)
    wp_enqueue_style( 'mythemeblog-fonts', 'https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&amp;display=swap [], null );
}
add_action( 'wp_enqueue_scripts', 'mythemeblog_enqueue_assets' );

/** === Theme Support === */
function mythemeblog_setup() {
    add_theme_support( 'title-tag' );
    add_theme_support( 'automatic-feed-links' );
    add_theme_support( 'custom-logo', [
        'height' =&gt; 100,
        'width' =&gt; 300,
        'flex-height' =&gt; true,
        'flex-width'  =&gt; true,
    ] );
    add_theme_support( 'post-thumbnails', ['post', 'page'] );
    add_theme_support( 'html5', ['search-form', 'comment-form', 'comment-list', 'gallery', 'caption'] );
    add_theme_support( 'editor-styles' );
    add_theme_support( 'responsive-embeds' );
}
add_action( 'after_setup_theme', 'mythemeblog_setup' );

/** === Register Nav Menus === */
function mythemeblog_menus() {
    register_nav_menus( [
        'primary' =&gt; 'Primary Menu',
        'footer'  =&gt; 'Footer Menu',
        'mobile'  =&gt; 'Mobile Menu',
    ] );
}
add_action( 'init', 'mythemeblog_menus' );

/** === Content Width === */
function mythemeblog_content_width() {
    $GLOBALS['content_width'] = apply_filters( 'mythemeblog_content_width', 1200 );
}
add_action( 'after_setup_theme', 'mythemeblog_content_width', 0 );</code></pre>


<p class="wp-block-paragraph">Questo snippet è un punto di partenza solido. OpenCode lo genera tenendo conto di <code>theme.json</code> se presente, rispettando le variabili CSS definite nella style guide, e includendo i hook essenziali per WordPress.</p>


<h3 class="wp-block-heading">Step 3 — Template partials e Loop</h3>


<p class="wp-block-paragraph">Il loop WordPress è il cuore di qualsiasi tema. OpenCode può generare template partials modulari che rispettano la Single Responsibility Principle:</p>


<pre class="wp-block-code"><code>&lt;?php
/**
 * Loop dei post — partial da includere in archive.php o index.php
 * @package MyThemeBlog
 */

if ( have_posts() ) : ?&gt;

    &lt;div class="mythemeblog-grid"&gt;
        &lt;?php
        while ( have_posts() ) :
            the_post();
            $category = get_the_category();
            $first_cat = $category ? $category[0]-&gt;name : '';
        ?&gt;
            &lt;article id="post-&lt;?php the_ID(); ?&gt;" &lt;?php post_class( 'mythemeblog-card' ); ?&gt;&gt;
                &lt;?php if ( has_post_thumbnail() ) : ?&gt;
                    &lt;div class="mythemeblog-card__thumbnail"&gt;
                        &lt;a href="&lt;?php the_permalink(); ?&gt;" aria-hidden="true" tabindex="-1"&gt;
                            &lt;?php the_post_thumbnail( 'medium_large', ['loading' =&gt; 'lazy'] ); ?&gt;
                        &lt;/a&gt;
                    &lt;/div&gt;
                &lt;?php endif; ?&gt;

                &lt;div class="mythemeblog-card__content"&gt;
                    &lt;?php if ( $first_cat ) : ?&gt;
                        &lt;span class="mythemeblog-card__category"&gt;
                            &lt;?php echo esc_html( $first_cat ); ?&gt;
                        &lt;/span&gt;
                    &lt;?php endif; ?&gt;

                    &lt;h2 class="mythemeblog-card__title"&gt;
                        &lt;a href="&lt;?php the_permalink(); ?&gt;" rel="bookmark"&gt;
                            &lt;?php the_title( '&lt;span&gt;', '&lt;/span&gt;' ); ?&gt;
                        &lt;/a&gt;
                    &lt;/h2&gt;

                    &lt;div class="mythemeblog-card__excerpt"&gt;
                        &lt;?php echo esc_html( wp_trim_words( get_the_excerpt(), 20, '...' ) ); ?&gt;
                    &lt;/div&gt;

                    &lt;time class="mythemeblog-card__date" datetime="&lt;?php echo esc_attr( get_the_date( 'c' ) ); ?&gt;"&gt;
                        &lt;?php echo esc_html( get_the_date() ); ?&gt;
                    &lt;/time&gt;
                &lt;/div&gt;
            &lt;/article&gt;
        &lt;?php endwhile; ?&gt;
    &lt;/div&gt;

    &lt;?php
    the_posts_pagination( [
        'mid_size'  =&gt; 2,
        'prev_text' =&gt; __( '← Precedente', 'mythemeblog' ),
        'next_text' =&gt; __( 'Successivo →', 'mythemeblog' ),
    ] );

else :
    ?&gt;
    &lt;p class="mythemeblog-empty"&gt;&lt;?php esc_html_e( 'Nessun articolo trovato.', 'mythemeblog' ); ?&gt;&lt;/p&gt;
    &lt;?php
endif;</code></pre>


<p class="wp-block-paragraph">Il markup usa classi BEM (<code>mythemeblog-card__title</code>), escaping sistematico (<code>esc_html</code>, <code>esc_attr</code>, <code>esc_url</code>), e lazy loading per le immagini. Sono dettagli che fanno la differenza in termini di performance e sicurezza.</p>


<h3 class="wp-block-heading">Step 4 — Customizer: opzioni del tema</h3>


<p class="wp-block-paragraph">Per un blog con esigenze specifiche, le opzioni del Customizer danno ai redattori controllo diretto sul branding senza toccare codice:</p>


<pre class="wp-block-code"><code>&lt;?php
/**
 * Opzioni Customizer per MyThemeBlog
 * @link https://developer.wordpress.org/themes/customize-api/
 */

function mythemeblog_customize_register( $wp_customize ) {

    // Sezione: Colori del brand
    $wp_customize-&gt;add_section( 'mythemeblog_colors', [
        'title'    =&gt; __( 'Colori Brand', 'mythemeblog' ),
        'priority' =&gt; 30,
    ] );

    // Colore primario
    $wp_customize-&gt;add_setting( 'mythemeblog_color_primary', [
        'default'           =&gt; '#2563eb',
        'sanitize_callback' =&gt; 'sanitize_hex_color',
        'transport'         =&gt; 'refresh',
    ] );

    $wp_customize-&gt;add_control( new WP_Customize_Color_Control( $wp_customize, 'mythemeblog_color_primary', [
        'label'    =&gt; __( 'Colore Primario', 'mythemeblog' ),
        'section'  =&gt; 'mythemeblog_colors',
        'settings' =&gt; 'mythemeblog_color_primary',
    ] ) );

    // Logo homepage
    $wp_customize-&gt;add_setting( 'mythemeblog_logo_home_url', [
        'sanitize_callback' =&gt; 'esc_url_raw',
    ] );

    $wp_customize-&gt;add_control( 'mythemeblog_logo_home_url', [
        'type'        =&gt; 'url',
        'section'     =&gt; 'mythemeblog_colors',
        'label'       =&gt; __( 'URL logo per homepage', 'mythemeblog' ),
        'description' =&gt; __( 'Se impostato, mostra questo logo invece del titolo del sito sulla homepage.', 'mythemeblog' ),
    ] );
}
add_action( 'customize_register', 'mythemeblog_customize_register' );

/** === CSS dinamico dal Customizer === */
function mythemeblog_customizer_css() {
    $primary = get_theme_mod( 'mythemeblog_color_primary', '#2563eb' );
    ?&gt;
    &lt;style type="text/css"&gt;
        :root {
            --mythemeblog-color-primary: &lt;?php echo esc_attr( $primary ); ?&gt;;
        }
        .mythemeblog-card__category,
        .mythemeblog-btn {
            background-color: &lt;?php echo esc_attr( $primary ); ?&gt;;
        }
    &lt;/style&gt;
    &lt;?php
}
add_action( 'wp_head', 'mythemeblog_customizer_css' );</code></pre>


<p class="wp-block-paragraph">Il customizer espone opzioni concrete — colore primario, URL logo — che i redattori possono modificare senza intervento dello sviluppatore. Il CSS dinamico genera le variabili che i componenti del tema consumano.</p>


<h3 class="wp-block-heading">Step 5 — Dark mode con CSS custom properties</h3>


<p class="wp-block-paragraph">La dark mode è una funzionalità che molti blog richiedono. Il pattern moderno sfrutta le CSS custom properties con un selettore <code>data-theme</code>:</p>


<pre class="wp-block-code"><code>/* assets/css/dark-mode.css */
/* Dark mode: definisce variabili alternative al tema chiaro */

[data-theme="dark"] {
    --mythemeblog-bg-primary: #0f172a;
    --mythemeblog-bg-secondary: #1e293b;
    --mythemeblog-text-primary: #f1f5f9;
    --mythemeblog-text-secondary: #94a3b8;
    --mythemeblog-border: #334155;
}

[data-theme="dark"] .mythemeblog-card {
    background-color: var( --mythemeblog-bg-secondary );
    border-color: var( --mythemeblog-border );
}

[data-theme="dark"] .mythemeblog-card__title a {
    color: var( --mythemeblog-text-primary );
}</code></pre>


<p class="wp-block-paragraph">L&#x27;interruttore JavaScript per la dark mode è altrettanto semplice:</p>


<pre class="wp-block-code"><code>/* assets/js/main.js */
// Interruttore dark mode — legge preferenza sistema e salva scelta utente
(function() {
    const toggle = document.getElementById('theme-toggle');
    if (!toggle) return;

    const saved = localStorage.getItem('mythemeblog-theme');
    const preferred = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    const current = saved || preferred;

    document.documentElement.setAttribute('data-theme', current);

    toggle.addEventListener('click', () =&gt; {
        const next = document.documentElement.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
        document.documentElement.setAttribute('data-theme', next);
        localStorage.setItem('mythemeblog-theme', next);
    });
})();</code></pre>


<p class="wp-block-paragraph">Questo pattern è resiliente: se JavaScript non carica per qualche motivo, il sito cade nella preferenza di sistema o nel tema chiaro, mai in uno stato rotto. Per approfondire le best practice di accessibilità e performance WordPress, vedi il nostro articolo sugli <a href="https://www.mrtux.it/web-design-per-wordpress-tool-essenziali-per-creare-temi-efficaci-nel-2026" data-wpel-link="internal" target="_self" rel="noopener">strumenti essenziali per web design WordPress</a>., il sito cade nella preferenza di sistema o nel tema chiaro, mai in uno stato rotto.</p>


<h2 class="wp-block-heading">Confronto rapido: Docker vs installazione Ubuntu LAMP</h2>


<p class="wp-block-paragraph">Sia Docker che l&#x27;installazione nativa su Ubuntu hanno pro e contro. Per uno sviluppatore WordPress che lavora con OpenCode, la scelta dipende dal contesto.</p>



<figure class="wp-block-table"><table><thead><tr><th>Aspetto</th><th>Docker Compose</th><th>Ubuntu LAMP nativo</th></tr></thead><tbody><tr><td>Setup iniziale</td><td>5-10 minuti con file YAML</td><td>20-40 minuti con apt</td></tr><tr><td>Portabilità</td><td>Trasportabile su qualsiasi OS con Docker</td><td>Limitato a Linux (o WSL su Windows/Mac)</td></tr><tr><td>Versioni PHP/MySQL</td><td>Immagini ufficiali, installazione rapida</td><td>Dipende da distro, più rigido</td></tr><tr><td>Performance</td><td>Overhead container (~5-10%)</td><td>Nessun overhead</td></tr><tr><td>Gestione file</td><td>Mount diretto via volume</td><td>Accesso filesystem nativo</td></tr><tr><td>WP-CLI</td><td>Già nel container ufficiale</td><td>Da installare a parte</td></tr><tr><td>Risorse sistema</td><td>Maggior footprint</td><td>Più leggero</td></tr><tr><td>Multi-progetto</td><td>Compose separati per ogni progetto</td><td>VirtualHost Apache multipli</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Per progetti singoli o team che usano Linux come ambiente primario, l&#x27;installazione Ubuntu LAMP è la scelta più performante. Se invece vuoi un confronto più ampio su tutti gli strumenti a disposizione dello sviluppatore WordPress, consulta la nostra guida su <a href="https://www.mrtux.it/web-design-per-wordpress-tool-essenziali-per-creare-temi-efficaci-nel-2026" data-wpel-link="internal" target="_self" rel="noopener">strumenti essenziali per web design WordPress</a>, che copre anche Lando, Valet e soluzioni containerizzate. Per team con ambienti misti (Windows, Mac, Linux) o chi lavora su più progetti contemporaneamente, Docker Compose offre la portabilità necessaria.</p>


<h2 class="wp-block-heading">Checklist operativa per sviluppo WordPress con OpenCode</h2>


<p class="wp-block-paragraph">Prima di ogni sessione di sviluppo, verifica questi punti (per un approccio strutturato alla sicurezza WordPress consulta anche la nostra guida agli <a href="https://www.mrtux.it/web-design-per-wordpress-tool-essenziali-per-creare-temi-efficaci-nel-2026" data-wpel-link="internal" target="_self" rel="noopener">strumenti essenziali per web design WordPress</a>):</p>


<ul class="wp-block-list"><li><strong>Ambiente locale attivo</strong>: Apache e MySQL in esecuzione, WordPress raggiungibile su <code>localhost</code></li><li><strong>OpenCode configurato con server MCP</strong>: filesystem, WP-CLI, WordPress.org, database attivi</li><li><strong>AGENTS.md aggiornato</strong>: struttura tema, vincoli PHP/CSS, comandi rapidi presenti</li><li><strong>Git init completato</strong>: il tema è versionato, almeno un commit iniziale esiste</li><li><strong>WP_DEBUG disattivato in locale</strong> (o attivato consapevolmente): <code>define(&#x27;WP_DEBUG&#x27;, false);</code> in <code>wp-config.php</code></li><li><strong>Plugin di sviluppo attivi</strong>: Query Monitor, WP-CLI, Developer (o equivalenti)</li><li><strong>Staging allineato</strong>: se esiste staging, le modifiche dal locale ci arrivano via Git o rsync, non via admin</li></ul>


<h2 class="wp-block-heading">FAQ — Domande frequenti su OpenCode e sviluppo temi WordPress</h2>


<p class="wp-block-paragraph"><strong>OpenCode può generare block theme completi per WordPress 6.x?</strong> Sì, OpenCode può generare <code>theme.json</code> completo e template HTML per block theme. Il supporto per block personalizzati (custom blocks con JavaScript/React) richiede ancora scrittura manuala del codice, ma la struttura base del block theme viene prodotta correttamente seguendo lo schema v2.</p>


<p class="wp-block-paragraph"><strong>Come si integra Rank Math SEO con il tema generato da OpenCode?</strong> OpenCode può aggiungere hook per Rank Math nel <code>functions.php</code>, come filtri per meta title e description dinamici. Tuttavia la configurazione SEO rimane un&#x27;operazione manuale via admin: nessun server MCP attuale modifica le opzioni Rank Math nel database in modo sicuro.</p>


<p class="wp-block-paragraph"><strong>È sicuro usare i server MCP in produzione?</strong> Mai. I server MCP danno accesso operativo reale al filesystem e al database. Usa sempre ambiente locale o di staging. Se OpenCode deve operare su produzione, l&#x27;unico server accettabile è quello read-only (filesystem in sola lettura), e solo dopo backup completo verificato.</p>


<p class="wp-block-paragraph"><strong>Posso usare OpenCode con Local by Flywheel o Valet invece di LAMP?</strong> Sì. Local by Flywheel e Valet sono wrapper che semplificano la gestione dell&#x27;ambiente WordPress locale. I server MCP funzionano con qualsiasi ambiente che esponga il filesystem e WP-CLI. Il file <code>wp-config.php</code> deve puntare al database corretto, indipendentemente dallo stack.</p>


<p class="wp-block-paragraph"><strong>Come faccio a far rispettare a OpenCode le linee guida di sicurezza del mio team?</strong> Inseriscile esplicitamente nella sezione vincoli di <code>AGENTS.md</code>. Più sono specifiche, più OpenCode le rispetta. Esempi: &quot;nessun file creato senza escaping <code>esc_html</code>&quot;, &quot;nessun <code>eval()</code>&quot;, &quot;tutti i form devono usare <code>wp_nonce_field()</code>&quot;. OpenCode è un modello linguistico: i vincoli scritti funzionano meglio delle aspettative implicite.</p>


<p class="wp-block-paragraph"><strong>Quali server MCP servono per uno workflow WordPress minimo?</strong> Il minimo sindacale è filesystem + WP-CLI. Per un riferimento completo sui tool WordPress disponibili, consulta la nostra guida agli <a href="https://www.mrtux.it/web-design-per-wordpress-tool-essenziali-per-creare-temi-efficaci-nel-2026" data-wpel-link="internal" target="_self" rel="noopener">strumenti essenziali per creare temi WordPress efficaci</a>. Il primo legge e scrive i file del tema. Il secondo gestisce aspetti runtime come attivazione plugin, reset database e generazione contenuto di test. Se hai bisogno di cercare plugin su WordPress.org, aggiungi il server WordPress.org. Il server database è opzionale e va usato con cautela.</p>


<h2 class="wp-block-heading">Conclusione</h2>


<p class="wp-block-paragraph">OpenCode trasforma lo sviluppo di temi WordPress da processo manuale e ripetitivo a workflow iterativo e controllato. Ma solo se l&#x27;ambiente sottostante è configurato correttamente: un LAMP locale funzionante, un <code>AGENTS.md</code> che codifica le convenzioni del progetto, e i server MCP giusti per ogni area operativa.</p>


<p class="wp-block-paragraph">La somma di questi elementi — ambiente, configurazione agente, protocollo MCP — ti dà un setup dove OpenCode opera con il contesto pieno del progetto WordPress. Per chi vuole approfondire anche il lato SEO e AI nella gestione WordPress, consigliamo la lettura di <a href="https://www.mrtux.it/articoli-wordpress-ottimizzati-seo-con-ai-metodo-pratico-passo-passo" data-wpel-link="internal" target="_self" rel="noopener">articoli WordPress ottimizzati SEO con AI</a>., non in modalità cieca. Il codice che ne risulta è migliore, più coerente, e richiede meno revisione.</p>


<p class="wp-block-paragraph"><strong>Prossimo passo concreto</strong>: configura il tuo <code>AGENTS.md</code> WordPress con la struttura del tema, i vincoli di sicurezza e i comandi rapidi che usi più spesso. Poi lancia OpenCode e chiedi di generare il primo template partial del tuo progetto. Dal primo output allarevisione al commit Git, in meno di mezz&#x27;ora.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/opencode-per-lo-sviluppo-di-temi-wordpress-ambiente-lamp-locale-ottimizzazione-agents-md-e-server-mcp/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
