Definirea unui array global în functions.php

1 mar. 2013, 02:48:17
Vizualizări: 27.4K
Voturi: 1

Încerc să creez un array de ani, care să fie disponibil în fișierele mele template și în cel puțin o altă funcție din functions.php.

function get_the_years() 
{
    global $year_arr = range(2001, date('Y')); // creează un array de la 2001 până la anul curent
    return $year_arr;
}

Apoi vreau să îl folosesc într-o funcție care creează un termen pentru fiecare an în taxonomia personalizată 'year'.

function create_year_terms() {
foreach($year_arr as $value){   
    $term = term_exists($value, 'year');
        if ($term !== 0 && $term !== null) {
            echo $value . ' categoria există!'; // afișează dacă categoria există deja
        }
        else { wp_insert_term(
            $value, // termenul
            'year', // taxonomia
            array(
                'description'=> 'Numele unui an',
                'slug' => $value )
            );
            echo 'termenul '. $value . ' a fost creat'; // afișează când se creează un termen nou
        }
    }

}

Și încerc să atașez această funcție la hook-ul wp_login

add_action('wp_login', 'create_year_terms');

Am încercat să-mi fac temele și cred că "înțeleg ceva" dar sunt puțin speriat să nu stric ceva punând lucruri greșite în functions.php, așa că vă rog să-mi scuzați întrebarea.

2
Comentarii

Cum este această întrebare specifică WordPress?

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

Oh, scuze, nu sunt foarte familiarizat cu php, am crezut că este specific WordPress, din cauza hook-urilor și termenilor personalizați creați.

schwarzgrau schwarzgrau
1 mar. 2013 03:02:45
Toate răspunsurile la întrebare 2
1

Pentru a accesa o variabilă definită în scopul global, trebuie să o referențezi folosind cuvântul cheie global oriunde dorești să o apelezi din nou.

În cazul tău, funcția create_year_terms() trebuie să apeleze global $year_arr în cadrul scopului său.

De asemenea, poți obține întotdeauna variabila ta din scopul global folosind array-ul $GLOBALS cu numele variabilei tale ca key, astfel:

$GLOBALS["year_arr"]

Actualizare

Referitor la decizia ta legată de hook: În primul rând, este o practică recomandată să plasezi acest tip de cod într-un plugin și nu în funcțiile temei. În al doilea rând, conectează-l la init; sau înregistrează un activation hook pentru pluginul tău și apoi poți folosi wp_schedule_event cu un interval personalizat de un an.

…dar din nou, este asta cu adevărat necesar?

1 mar. 2013 02:57:03
Comentarii

wp_schedule_event este un sfat foarte bun. Din păcate, cred că este necesar. Am creat un site web pentru departamentul de film al colegiului meu. Și atâta timp cât încă studiez, voi administra site-ul, dar ar trebui să funcționeze chiar dacă altcineva va avea grijă de el.

schwarzgrau schwarzgrau
1 mar. 2013 03:25:23
2

În primul rând, trebuie să definești o variabilă globală în domeniul de aplicare în care dorești să ai acces la ea, adică în afara funcțiilor tale (și poate chiar în afara clasei - dacă ai una).

În al doilea rând, din câte știu, trebuie mai întâi să 'declari' o variabilă ca globală, iar apoi, pe o linie nouă, să-i setezi valoarea:

global $myvar;
$myvar = "whatever";

În interiorul funcțiilor, trebuie să declari din nou variabila ca globală înainte de a o folosi. Altfel, ar fi doar o variabilă locală cu același nume ca variabila globală (dar încă necunoscută) din 'exterior'.

Și exact ce anume dorești să faci cu funcția? Ești familiarizat cu hook-urile?

wp_login este depreciat - folosește wp_signon. Dar nu înțeleg exact ce încerci să realizezi...

1 mar. 2013 03:02:45
Comentarii

mulțumesc pentru clarificarea privind utilizarea lui global. Funcția ar trebui să verifice dacă există deja un termen personalizat cu anul curent, iar dacă nu, să creeze unul. Am ales wp_login, pentru că din câte știu eu, nu există un hook care să fie executat în fiecare 1 ianuarie sau altceva pe care l-aș putea folosi.

schwarzgrau schwarzgrau
1 mar. 2013 03:09:09

De ce ai face asta? Am actualizat răspunsul meu mai sus pentru a aborda această problemă.

Sunyatasattva Sunyatasattva
1 mar. 2013 03:19:09