<

Informazioni per sviluppatori

Ultima modifica: 5 Agosto 2026

Il wordpress Gpci framework è fortemente orientato verso gli sviluppatori, potrebbero quindi fare comodo informazioni su come le pagine vengono generate. Questa pagina mira a dare una panoramica sugli hooks e le funzioni utilizzate nel tema ma anche a ottenere informazioni semplicemente, quindi a essere una pagina di riferimento per non rimanere bloccati con il codice.

Esempi utili

Potrebbe farci comodo avere a portata di mano subito alcuni esempi semplici per ottenere campi personalizzati e informazioni da php o javascript. Ricordarsi che sono esempi da modificare prima di usare e utilizzare solo se si sa sta cosa si sta facendo!

Php - Setting pages

I valori delle setting pages sono ottenibili con le funzioni metabox corrispondenti, comunque utilizzando le funzioni integrate in wordpress si hanno dei risultati più affidabili in vari casi (in quanto le funzioni metabox partono piuttosto tardi e quindi in alcuni hooks non funzionano):

Ottenere valori

//Ottiene tutti i campi nella setting page id gpci-additional-components, è possibile anche vedere se ci sono voci orfane nel database
get_option( 'gpci-additional-components' );

//Ottiene il valore del campo con id media nella setting page; id della metabox non serve, ma solo id della setting page e di un campo assegnato alla pagina
get_option( 'gpci-additional-components' )['media'];

Eliminare valori

//Elimina il valore di un'opzione orfana dalla setting page gpci-options-redirect
$options = get_option('gpci-options-redirect');
if( isset( $options['orphan-option'] ) ){
  unset( $options['orphan-option'] );
  update_option('gpci-options-redirect', $options);
}

//Elimina tutte le redirezioni (quindi tutti i campi nella setting page id gpci-options-redirect)
delete_option( 'gpci-options-redirect' );

//Elimina tutte le redirezioni del gruppo Redirect via htaccess semplice
$options = get_option('gpci-options-redirect');
if( isset( $options['redirect-htaccess-simple-group'] ) ){
  unset( $options['redirect-htaccess-simple-group'] );
  update_option('gpci-options-redirect', $options);
}

Notare come per cancellare tutta la setting page è sufficiente una riga di codice, mentre per eliminarne una parte bisogna:

  • ottenere l'opzione
  • controllare l'esistenza del campo nel database
  • eliminare la voce dall'array
  • riaggiornare l'opzione

Php - Campi personalizzati

I valori dei campi personalizzati sono ottenibili con le funzioni metabox corrispondenti, ma quando non è possibile farlo (ossia quando la funzione non è ancora disponibile) si può usare la funzione wordpress get_post_meta:

Ottenere valori

//Ottiene un campo personalizzato ritornando un valore singolo
get_post_meta( $post_id=get_the_ID(), $key='single_additions_css', $single=true );

//Ottiene un campo personalizzato con metabox senza bisogno di dover specificare il tipo
rwmb_meta( 'single_additions_css' );

Hooks wordpress

Aggiungere un filtro o un'azione con una funzione anonima:

//aggiunta di un filtro
add_filter( $hook_name='', $callback=function( $parametro1, $parametro2 ){
  //modifica del filtro
return  $parametro1;
}, $priority=21, $accepted_args=2 );


//aggiunta di un'azione
add_action( $hook_name='', $callback=function( $parametro1 ){
  //azione aggiunta
}, $priority=21, $accepted_args=1 );

Ottenere informazioni relative hooks e callbacks:

//ottenere tutti gli hooks attivi
global $wp_filter;
$hooks = array_keys( $wp_filter );
print_rR( $hooks );

//ottenere i callbacks attivi per un hook con relativa priorità (la chiave numerica dell'array)
global $wp_filter;
$hook = $wp_filter['the_content'];
$callbacks = $hook->callbacks;
print_rR( $callbacks );

Rimuovere un callback relativo un hook:

remove_filter( $hook_name='the_content', $callback='do_blocks', $priority=9 );

Trovare gli hooks che contengono un certo callback:

function rimuoviCallbacksDaHooks( $callbackToRemove='?' ){
  $finalString = '';
  global $wp_filter;
  foreach( $wp_filter as $hookName=>$filters ){
    foreach( $filters as $HookPriority=>$filter ){
      foreach( $filter as $callback=>$filterDefs ){
        if( $callback == $callbackToRemove ){
          $finalString .= "<li>remove_filter( '$hookName', '$callback', $HookPriority );</li>";
        }
      }
    }
  }
  if( $finalString ){ $finalString = '<ul>'.$finalString.'</ul>'; }
  else{ $finalString = 'Nessun callback trovato con il nome '.$callbackToRemove; }
  return $finalString;
}

//usare in un blocco php in una pagina di prova con:
echo rimuoviCallbacksDaHooks( 'do_blocks' );

//risulterà qualcosa come:
- remove_filter( 'the_content', 'do_blocks', 9 );
- remove_filter( 'widget_block_content', 'do_blocks', 9 );

Trovare i callbacks relativi un certo hook:

function CallbacksRelativiHook( $hookToInspect='?' ){
	$finalString = '';
	global $wp_filter;
	foreach( $wp_filter as $hookName=>$filters ){
		if( $hookName == $hookToInspect ){
			foreach( $filters as $HookPriority=>$filter ){
				foreach( $filter as $callback=>$filterDefs ){
					$finalString .= "<li style='margin-bottom:25px;'>Callback $callback - priorità $HookPriority<br>
					rimuovere con: remove_filter( '$hookName', '$callback', $HookPriority );</li>";
				}
			}
		}
	}
	if( $finalString ){
		$finalString = "<p>Callbacks registrati a hook $hookToInspect :</p><ul>$finalString</ul>";
	}
	else{ $finalString = 'Nessun hook trovato con il nome '.$hookToInspect; }
	return $finalString;
}

//usare in un blocco php in una pagina di prova con:
echo CallbacksRelativiHook( $hookToInspect='the_content' );

//risulterà qualcosa come:
Callback do_blocks - priorità 9
rimuovere con: remove_filter( 'the_content', 'do_blocks', 9 );
Callback wptexturize - priorità 10
rimuovere con: remove_filter( 'the_content', 'wptexturize', 10 );
Callback wpautop - priorità 10
rimuovere con: remove_filter( 'the_content', 'wpautop', 10 );
Callback shortcode_unautop - priorità 10
rimuovere con: remove_filter( 'the_content', 'shortcode_unautop', 10 );
Callback prepend_attachment - priorità 10
rimuovere con: remove_filter( 'the_content', 'prepend_attachment', 10 );
Callback wp_replace_insecure_home_url - priorità 10
rimuovere con: remove_filter( 'the_content', 'wp_replace_insecure_home_url', 10 );
Callback wp_filter_content_tags - priorità 12
rimuovere con: remove_filter( 'the_content', 'wp_filter_content_tags', 12 );
Callback convert_smilies - priorità 20
rimuovere con: remove_filter( 'the_content', 'convert_smilies', 20 );

Hooks php

Questo framework fa ampio uso di wordpress hooks per modificare dinamicamente le pagine, alcuni sono aggiunti dai moduli e altri da funzioni. Questa sezione comprende alcune regole generali e liste che, se rispettate, rendono il tutto più semplice e ordinato:

Priorità

Ho cercato di mantenere le priorità degli hooks del framework il più uniformi possibili: nella stragrande maggioranza dei casi gli hooks del tema padre hanno una priorità di 21 (11 o 31 per i moduli). Quindi per una buona coesistenza con gli hooks personalizzati inseriti nel tema figlio è buona norma rispettare queste regole:

  • partire da priorità 41 per tutti gli hooks nuovi che devono agire dopo quelli del tema padre e i moduli
  • partire da priorità 11 per tutti gli hooks che devono agire prima di quelli del tema padre

Ovviamente queste istruzioni sono indicative e devono essere valutate caso per caso, comunque è un buon punto di partenza.

Lista hooks

Gli hooks php sono tutti inseriti nella cartella tema padre/php/hooks (esclusi quelli dei moduli che si trovano nelle loro cartelle dedicate), i files con riferimento allo stesso hook sono di solito organizzati in sottocartelle. Questa è la lista degli hook utilizzati nel framework (in aggiornamento):

admin_bar_menu

Aggiunge voci alla barra superiore admin.

Risorse collegate:


admin_footer

Include icone interne al tema. Genera tabelle costanti nel backend. Scrive le caches predefinite se modificate e se rilevato un post id corrente.

Risorse collegate:

  • costanti php relative i post types
  • costanti php relative i tags
  • funzione GpciCacheData

after_switch_theme

  • svuota le cartelle temp e logs appena attivato il tema child
  • crea il menu Default classic se non esiste.

Risorse collegate:


after_setup_theme

  • aggiunge il supporto menus
  • aggiunge il supporto align-wide
  • registra gli shortcodes del tema padre
  • registra gli shortcodes dalla cartella del tema child

Risorse collegate:


customize_save_after

  • aggiorna i files nel tema child
  • aggiunge regole per le cartelle private al file .htaccess (temporaneamente abbandonato).

Risorse collegate:


  • aggiunge pulsante per eseguire azioni ajax e contenitore per la risposta
  • configura globali php per azioni ajax su query

Risorse collegate:


init

  • sovrascrive i blocco gutenberg originali nel caso di funzioni modificate
  • popola le globali meta_box_registry
  • disabilita le emoji
  • disabilita il rendering del css personalizzato del customizer predefinito di wordpress (funzione wp_custom_css_cb)
  • disabilita versione wordpress dalla head (funzione wp_generator)
  • registra categoria blocchi gpci
  • definisce costante gpci\hidden\ConstantsTable
  • aggiunge le azioni ajax a tutto il sito dalla pagina impostazioni
  • accoda script al backend con prefisso init
  • registra blocchi gutenberg tema padre e figlio
  • deregistra blocco php in base alla risoluzione dei problemi
  • passa vari valori e variabili al backend come icone globali, menu registrati, ecc..

Risorse collegate:


mb_settings_page_submit_buttons

  • Gestisce i comportamenti dei pulsanti submit e reset delle pagine collegate.

Risorse collegate:

  • pagine impostazioni gpci

Links utili:


mb_settings_pages

Crea le pagine impostazioni opzioni nel menu Gpci.

parse_query

Se la pagine è di tipo autore singolo, verifica che gli archivi autore siano abilitati altrimenti setta la query corrente a una pagina 404.


post_updated

Se site editor: aggiorna il file style.css.

Risorse collegate:


pre_render_block

Risorse collegate:


render_block

  • ri-registra gli shortcodes se il primo blocco della pagina (priorità 0)
  • setta le globali di render a priorità 0 e le riazzera a priorità 101
  • gestisce quasi tutti i controlli e il rendering di alcuni blocchi personalizzati nell'ordine seguente:
  1. rendering blocchi particolari o personalizzati
  2. configura la globale di render del blocco corrente $GLOBALS['gpci']['render']
  3. indicizza i blocchi gutenberg
  4. rendering shortcodes
  5. attributi aggiuntivi
  6. sostituzioni php
  7. css aggiuntivo
  8. codice js aggiuntivo
  9. schema json aggiuntivo
  10. disabilita rendering su dispositivi
  11. foreach

Risorse collegate:


rest_{$this->post_type}_query

Risorse collegate:


run_wptexturize

  • rimuove il filtro se esiste la funzione mb_frontend_submission_load
  • rimuove il filtro globalmente in base alla costante gpci\tweaks\included\run_wptexturize

Risorse collegate:


rwmb_meta_boxes

  • genera tutti i campi personalizzati
  • filtra le metaboxes e i campi personalizzati (anche nested) in base alla chiave conditions (priorità 99)

Esempio di creazione metabox condizionale con php

add_filter( 'rwmb_meta_boxes', function( $meta_boxes ){
  $meta_boxes[]=[
    'conditions'      => [
      GetContext( 'is_settings_page', [ 'id'=>'gpci_module_ai_settings_page' ] ),
      GetContext( 'is_doing_ajax' ),
      'operator'=>'or'
    ],
    'id'              => 'gpci_module_ai_metabox',
    'title'           => 'Conversazioni',
    'settings_pages'  => 'gpci_module_ai_settings_page',
    //'post_types'    => ['post', 'page'],
    'style'           => 'boxes',
    'fields'          => [
      //arrays di campi
    ]
  ];

  return $meta_boxes;
}, 31, 1 );
Metabox builder

Per ottenere lo stesso risultato delle condizioni dal metabox builder è possibile, come specificato nella documentazione, utilizzare i custom settings e aggiungere qualcosa come:

  • chiave: conditions
  • valore: [{"function,GetContext,is_frontend":false}]

oppure

  • chiave: conditions.function,GetContext,is_settings_page,{"id":"gpci_module_ai_settings_page"}
  • valore: 1

template_redirect

  • controlla e aggiunge la modalità manutenzione
  • riordina e inizializza tutti gli output buffering
  • include costanti specifiche php
  • definisce alcune costanti (da ricontrollare)
  • disabilita i feeds del sito in base alla costante php
  • rimuove tuttti gli shortcodes registrati

Risorse collegate:


use_block_editor_for_post_type

Disabilita gunberg se il post type è selezionato nella pagina impostazioni collegata.

wp_ajax

Rende disponibili a javascript le funzioni per:

  • gestire i form
  • gestire le query
  • generare il server side rendering in gutenberg
  • ottenere informazioni controllate
  • processare shortcodes in gutenberg
  • ottenere le media sizes
  • eseguire funzioni interne controllate (aggiornamento tema padre e resettare caches)
  • settare le media sizes dal template btn

Risorse collegate:

  • da fare

wp_ajax_no_priv

Apre a javascript la funzione per gestire i form. Apre a javascript la funzione per gestire le query.

Risorse collegate:

  • da fare

wp_body_open

Genera (se esistono) le icone globali all'apertura del body.

Risorse collegate:


  • Inserisce nella i vari tag meta, style, e script derivanti dalle globali php $GLOBALS['gpci']['headTags']

Risorse collegate:


wp_sitemaps_add_provider

Disabilita le sitemap relative agli utenti/tassonomie in base al valore delle costanti included.


posts_request

  • genera i posts virtuali se richiesto nelle queries

Risorse collegate:


the_posts

  • aggiunge/rimuove le proprietà impostate all'oggetto post

Risorse collegate:


posts_where

  • gestisce eventuali filtri personalizzati nelle queries

Risorse collegate:


upgrader_pre_install

  • imposta temporaneamente in cache la versione del tema prima dell'aggiornamento

Risorse collegate:


upgrader_process_complete

  • aggiorna automaticamente opzioni e campi nel database alla fine dell'aggiornamento

Risorse collegate: