Skip to content

Commit 9090c0c

Browse files
author
Guido W. Pettinari
committed
Aggiunta classe config x accedere alle opzioni serializzate
1 parent 919715b commit 9090c0c

File tree

2 files changed

+110
-2
lines changed

2 files changed

+110
-2
lines changed

readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Come funziona
2-
Crea nuovi menu o sottomenu in WordPress estendendo la classe `Idearia\SettingsPage`.
32

3+
* Crea nuovi menu o sottomenu in WordPress estendendo la classe `Idearia\SettingsPage`.
4+
* Accedi alle opzioni serializzate come fossi in Laravel estendend la classe `Idearia\Config`.
45
# Per avere più controllo
56

67
La classe `Idearia\SettingsPage` è un wrapper di `Idearia\SettingsApi` che ne semplifica l'utilizzo, che a sua volta è un wrapper della [Settings API di WordPress](https://codex.wordpress.org/Settings_API).
78

89
Per avere maggiore controllo sulle opzioni, puoi usare direttamente la classe `Idearia\SettingsApi`.
9-
1010
# Dopo ogni modifica al repo...
1111

1212
Aggiorna il repository composer di Idearia come da istruzioni:

src/class-config.php

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<?php
2+
3+
namespace Idearia;
4+
5+
defined( 'ABSPATH' ) || exit;
6+
7+
/**
8+
* Accedi alle opzioni serializzate di WordPress usando la sintassi
9+
* di Laravel.
10+
*
11+
* Si tratta di un wrapper di get_option() che permette di
12+
* usare la sintassi
13+
* config('sezione.opzione')
14+
* per accedere alle opzioni, invece di dover fare
15+
* $sezione_x = get_option('sezione_x)
16+
* $opzione_y = $sezione_x['opzione_y]
17+
*/
18+
abstract class Config
19+
{
20+
/**
21+
* Opzionalmente, specifica i valori di default da
22+
* quando non viene trovata un'opzione a database.
23+
*
24+
* Esempio:
25+
* return [
26+
* 'tavoli.management_mode' => 'standard',
27+
* 'tavoli.default_staff_id' => null,
28+
* 'impostazioni_ristorante.max_capacity_per_turno' => 50,
29+
* 'impostazioni_sistema.max_giorni_gestione_turni' => 20,
30+
* ];
31+
*
32+
* NOTA BENE: Volendo qui puoi anche inserire opzioni che non
33+
* esistono a database o nelle pagine di settings. È un buon modo
34+
* per avere un controllo centralizzato di quelle opzioni che non
35+
* hai ancora esposto all'utente.
36+
*/
37+
public static function getDefaults(): array
38+
{
39+
return [];
40+
}
41+
42+
/**
43+
* Opzionalmente, specifica un prefisso da applicare ai nomi delle
44+
* opzioni.
45+
*
46+
* Ad esempio, se il prefisso è 'test_' chiamando
47+
* config('foo')
48+
* verrà ritornata l'opzione test_foo.
49+
*/
50+
protected static $db_prefix = '';
51+
52+
/**
53+
* Accedi alle opzioni senza curarti di dove sono immagazzinate.
54+
*
55+
* Ad esempio, per accedere all'elemento foo contenuto nell'opzione
56+
* serializzata bar, basta chiamare config( 'bar.foo' ). Per accedere
57+
* all'intera opzione serializzata, basta chiamare config( 'bar' ).
58+
*
59+
* Se l'opzione non esiste, verrà ritornato il valore di default
60+
* dato come secondo argomento; se questi è null, verrà ritornato
61+
* il valore di default definito in getDefaults; se non esiste
62+
* nemmeno questo, verrà ritornato null.
63+
*
64+
* Il modello è quello della funzione config di Laravel:
65+
* https://laravel.com/docs/8.x/helpers#method-config
66+
*
67+
* @throws Exception Quando viene passata una stringa vuota o invalida.
68+
*
69+
* @todo Aggiungi ricorsività
70+
*/
71+
public static function config( string $query, $default = null )
72+
{
73+
$tokens = explode( '.', $query );
74+
75+
$option_name = $tokens[0];
76+
77+
if ( ! $option_name ) {
78+
throw new Exception( 'Passato valore vuoto o invalido a config', 1 );
79+
}
80+
81+
$default = $default ?? self::getDefaultValue( $query );
82+
83+
$option_key = $option_name;
84+
85+
if ( self::$db_prefix ) {
86+
$option_key = self::$db_prefix . $option_key;
87+
}
88+
89+
$option_value = get_option( $option_key, $default );
90+
91+
if ( count( $tokens ) === 1 ) {
92+
return $option_value;
93+
}
94+
95+
return $option_value[ $tokens[1] ] ?? $default;
96+
}
97+
98+
/**
99+
* Data un'opzione, ritorna il suo valore di default;
100+
* se non è definito, ritorna null
101+
*/
102+
public static function getDefaultValue( string $query )
103+
{
104+
$defaults = self::getDefaults();
105+
106+
return $defaults[ $query ] ?? null;
107+
}
108+
}

0 commit comments

Comments
 (0)