Definire un array globale in functions.php?

1 mar 2013, 02:48:17
Visualizzazioni: 27.4K
Voti: 1

Sto cercando di creare un array di anni, che sia disponibile nei miei file template e in almeno un'altra funzione nel functions.php.

function get_the_years() 
{
    global $year_arr = range(2001, date('Y'));
    return $year_arr;
}

Poi voglio utilizzarlo in una funzione che crea un termine per ogni anno nella tassonomia personalizzata 'year'.

function create_year_terms() {
foreach($year_arr as $value){   
    $term = term_exists($value, 'year');
        if ($term !== 0 && $term !== null) {
            echo $value . ' categoria esistente!';
        }
        else { wp_insert_term(
            $value, // il termine 
            'year', // la tassonomia
            array(
                'description'=> 'Il nome di un anno',
                'slug' => $value )
            );
            echo'termine '. $value . ' creato';
        }
    }

}

E sto cercando di collegare questa funzione all'hook wp_login

add_action('wp_login', 'create_year_terms');

Ho cercato di fare i miei compiti e penso di aver capito "qualcosa" ma sono un po' preoccupato di rompere qualcosa inserendo codice sbagliato nel mio functions.php, quindi scusate la domanda.

2
Commenti

In che modo questa domanda è specifica per WordPress?

Chip Bennett Chip Bennett
1 mar 2013 02:56:31

Oh scusa, non sono molto familiare con PHP, mi aspettavo che fosse specifico per WordPress, a causa degli hook e dei termini personalizzati creati.

schwarzgrau schwarzgrau
1 mar 2013 03:02:45
Tutte le risposte alla domanda 2
1

Per accedere a una variabile definita nello scope global devi farvi riferimento con la parola chiave global ovunque tu voglia richiamarla nuovamente.

Nel tuo caso, la funzione create_year_terms() deve chiamare global $year_arr all'interno del suo scope.

Inoltre, puoi sempre ottenere la tua variabile nello scope global utilizzando l'array $GLOBALS con il nome della tua variabile come key, in questo modo:

$GLOBALS["year_arr"]

Aggiornamento

Riguardo alla tua decisione sugli hook: prima di tutto, è buona pratica inserire questo tipo di codice in un plugin piuttosto che nelle funzioni del tema. In secondo luogo, aggancialo a init; oppure registra un activation hook per il tuo plugin e poi magari usa wp_schedule_event con un intervallo personalizzato di un anno.

...ma poi di nuovo, è davvero necessario?

1 mar 2013 02:57:03
Commenti

wp_schedule_event è un suggerimento davvero utile. Purtroppo credo sia necessario. Ho realizzato un sito web per il dipartimento di cinema del mio college. Finché continuerò a studiare mi occuperò dell'amministrazione del sito, ma dovrebbe comunque funzionare se qualcun altro se ne prendesse cura.

schwarzgrau schwarzgrau
1 mar 2013 03:25:23
2

Innanzitutto, devi definire una variabile globale nell'ambito dove vuoi averne accesso, cioè al di fuori delle tue funzioni (e forse anche al di fuori della classe - se ne hai una).

In secondo luogo, per quanto ne so, devi prima 'rendere' una variabile globale, e poi, in una nuova riga, impostarne il valore:

global $myvar;
$myvar = "qualunque cosa";

All'interno delle funzioni, devi dichiarare nuovamente la variabile come globale prima di usarla. Altrimenti sarebbe solo una variabile locale con lo stesso nome della variabile globale (ma ancora sconosciuta) dall' 'esterno'.

E cosa vuoi fare esattamente con la funzione? Conosci l'hook?

wp_login è deprecato - usa wp_signon. Ma non capisco cosa stai cercando di fare...

1 mar 2013 03:02:45
Commenti

grazie per la chiarificazione sull'uso di global. La funzione dovrebbe verificare se esiste già un termine personalizzato con l'anno corrente, in caso contrario ne crea uno. Ho scelto wp_login, perché per quanto ne so non esiste un hook che viene eseguito ogni 1° gennaio o qualcos'altro che potrei usare.

schwarzgrau schwarzgrau
1 mar 2013 03:09:09

Perché vorresti farlo? Ho aggiornato la mia risposta sopra per affrontare questo problema.

Sunyatasattva Sunyatasattva
1 mar 2013 03:19:09