Ce înseamnă acest cod de funcție PHP?

29 mar. 2012, 00:41:37
Vizualizări: 828
Voturi: -7

Poate cineva să mă ajute să înțeleg fiecare parte a acestui cod? Puteți comenta fiecare linie astfel încât să pot înțelege și să personalizez codul conform nevoilor mele. Iată link-ul în pastebin:

class Towfiq_Person {
    // Definirea unei clase numite Towfiq_Person
    static function on_load() {
        // Metodă statică care rulează la încărcarea clasei
        add_action('init',array(__CLASS__,'init'));
        // Adaugă acțiune pentru hook-ul 'init' care apelează metoda 'init' a clasei curente
        add_action('wp_insert_post',array(__CLASS__,'wp_insert_post'),10,2);
        // Adaugă acțiune pentru hook-ul 'wp_insert_post' care apelează metoda 'wp_insert_post' cu 2 parametri
        add_action('profile_update',array(__CLASS__,'profile_update'),10,2);
        // Adaugă acțiune pentru hook-ul 'profile_update' care apelează metoda 'profile_update' cu 2 parametri
        add_action('user_register',array(__CLASS__,'profile_update'));
        // Adaugă acțiune pentru hook-ul 'user_register' care apelează metoda 'profile_update'
        add_filter('author_link',array(__CLASS__,'author_link'),10,2);
        // Adaugă filtru pentru hook-ul 'author_link' care apelează metoda 'author_link' cu 2 parametri
        add_filter('get_the_author_url',array(__CLASS__,'author_link'),10,2);
        // Adaugă filtru pentru hook-ul 'get_the_author_url' care apelează metoda 'author_link' cu 2 parametri
 }

Restul codului la acest link: pastebin.com/30GCNhLv

mulțumesc mult

ACTUALIZARE 1:

Am înțeles prima parte, dar ce face fiecare linie din această parte? Adică în limbaj uman:

// Metodă statică care returnează cheia de email prin aplicarea unui filtru
static function get_email_key() {
     return apply_filters( 'person_email_key', '_email' );
 }
 
// Metodă statică care actualizează profilul utilizatorului și datele persoanei asociate
static function profile_update($user_id,$old_user_data=false) {
     global $wpdb;
     $is_new_person = false;
     // Obține datele utilizatorului
     $user = get_userdata($user_id);
     // Determină email-ul vechi (dacă există) sau pe cel nou
     $user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email);
     // Obține cheia de email
     $email_key = self::get_email_key();
     // Caută ID-ul postării persoanei asociate acestui email
     $person_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta}      WHERE     meta_key='%s' AND meta_value='%s'",$email_key,$user_email));
     // Dacă nu există o persoană asociată
     if (!is_numeric($person_id)) {
         // Creează o nouă postare de tip persoană
         $person_id = $is_new_person = wp_insert_post(array(
            'post_type' => 'towfiq-person',
            'post_status' => 'publish',   // Poate ar trebui să fie 'pending' sau 'draft'?
            'post_title' => $user->display_name,
        ));
    }
    // Actualizează metadatele utilizatorului și postării
    update_user_meta($user_id,'_person_id',$person_id);
    update_post_meta($person_id,'_user_id',$user_id);
    // Dacă e o persoană nouă sau email-ul s-a schimbat
    if ($is_new_person || ($old_user_data && $user->user_email!=$old_user_data->user_email)) {
        // Actualizează email-ul în metadatele postării
        update_post_meta($person_id,$email_key,$user->user_email);
    }
}
1
Comentarii

Te rog să încerci să formulezi aceasta ca o întrebare gestionabilă. În forma actuală, aceasta nu este nici măcar o întrebare, ci o cerere ca cineva să facă munca de documentare a codului terților și să ți-l explice. Ca atare, nu este potrivită pentru formatul de întrebări și răspunsuri al acestui site.

Rarst Rarst
29 mar. 2012 01:40:02
Toate răspunsurile la întrebare 1
4

Practic, acesta este un model de programare pentru organizarea codului în spații de nume într-un plugin WordPress. În mod obișnuit, poți avea doar o singură funcție numită init() într-un program, dar mai mulți autori vor încerca să folosească acest nume. Plasarea numelor de funcții într-o clasă este o soluție pentru a depăși această limitare.

De exemplu:

class Towfiq_Person {
    static function on_load() { }

    static function init() { }

    static function profile_update() { }
}

În loc să le apelezi direct, le invoci și cu numele clasei. Deci:

Towfiq_Person::on_load();
Towfiq_Person::init();
Towfiq_Person::profile_update();

Secțiunea de cod pe care ai inclus-o în întrebarea ta este inițializatorul pentru această clasă. La sfârșitul fișierului PHP legat este Towfiq_Person::on_load(), care îi spune WordPress să execute funcția statică on_load() a clasei Towfiq_Person.

Această funcție conectează diverse evenimente și filtre în WordPress. Când WordPress declanșează acțiunea sa init, va apela și Towfiq_Person::init(). Când WordPress inserează un articol și declanșează acțiunea sa wp_insert_post, va apela și Towfiq_Person::wp_insert_post().

Fiecare linie pe care ai enumerat-o mai sus leagă o funcție specifică din clasă de un eveniment specific declanșat de WordPress.

Îți recomand să citești puțin despre Acțiuni și Filtre pentru a înțelege exact ce se întâmplă, dar acesta este un rezumat de bază.

Actualizare

Bazat pe cererea ta suplimentară pentru informații...

Nu putem defini fiecare funcție pentru tine. Ar trebui să contactezi dezvoltatorul original și să ceri documentația. Dar iată un rezumat rapid.

Funcția get_email_key() aplică un filtru WordPress asupra șirului "_email". În esență, ia "_email" și îl trece prin orice funcție legată de acel filtru înainte de a-l returna utilizatorului. Dacă ai apela get_email_key() acum, ți s-ar returna "_email".

Funcția profile_update() este legată de acțiunile profile_update și user_register din WordPress. Când oricare dintre aceste acțiuni sunt declanșate, WordPress va apela funcția ta și va trimite ID-ul utilizatorului care este modificat și (opțional) datele care au fost modificate.

Funcția ta face apoi următoarele:

// Referință la obiectul global de bază de date pentru a putea rula interogări mai târziu
global $wpdb;

// Presupunem că aceasta este o înregistrare existentă pentru moment. Aceasta va fi actualizată în altă parte
// dacă este necesar.
$is_new_person = false;

// Obține datele pentru utilizatorul trimis de WordPress
$user = get_userdata($user_id);

// Dacă avem date vechi ale utilizatorului, obținem email-ul utilizatorului din ele. Dacă nu, obținem email-ul utilizatorului
// din obiectul $user creat mai sus.
$user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email);

// Obține cheia de email. În mod obișnuit, aceasta va fi "_email"
$email_key = self::get_email_key();

// Obține ID-ul persoanei cu care lucrăm din baza de date. Căutăm
// ID-ul unui articol care are informații meta corespunzătoare cheii de email de mai sus și
// adresei de email a utilizatorului.
$person_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta}      WHERE     meta_key='%s' AND meta_value='%s'",$email_key,$user_email));

// Dacă nu am găsit un ID de utilizator (ID-ul returnat este null sau "false"), atunci
// inserăm un nou tip de articol personalizat "towfiq-person" cu datele de care avem nevoie. Titlul este
// numele utilizatorului, starea este publicată, și setăm informațiile meta ale articolului pentru a putea
// să-l găsim din nou cu interogarea de mai sus.
if (!is_numeric($person_id)) {
         $person_id = $is_new_person = wp_insert_post(array(
            'post_type' => 'towfiq-person',
            'post_status' => 'publish',   // Poate ar trebui să fie pending sau draft?
            'post_title' => $user->display_name,
        ));
    }
    // Actualizează informațiile meta ale utilizatorului pentru a mapa la noul tip de articol personalizat
    update_user_meta($user_id,'_person_id',$person_id);
    // Actualizează informațiile meta ale tipului de articol personalizat pentru a mapa la utilizator
    update_post_meta($person_id,'_user_id',$user_id);
    if ($is_new_person || ($old_user_data && $user->user_email!=$old_user_data-   >user_email)) {
        // Actualizează informațiile meta ale tipului de articol personalizat pentru a mapa la email-ul utilizatorului
        update_post_meta($person_id,$email_key,$user->user_email);
    }
29 mar. 2012 00:53:13
Comentarii

merses, am înțeles prima parte, dar ce zici de cealaltă parte? vezi update1.

fritids fritids
29 mar. 2012 01:15:13

Voi documenta acel set de funcții, dar sincer nu vom face toată treaba pentru tine. Citește codul. Dacă nu înțelegi ce face, contactează dezvoltatorul original și cere documentația. Nu vom scrie codul sau documentația pentru tine.

EAMann EAMann
29 mar. 2012 01:25:37

mulțumesc foarte mult pentru eforturile tale, am înțeles. am încercat să contactez autorul acestui cod pe acest site, dar fără succes. nu contează, e deja un început. noroc

fritids fritids
29 mar. 2012 01:48:00

Am contactat direct autorul original al acestui cod - dacă te uiți, răspunsul original a fost trimis de Mike Schinkel. Doar caută pe Google numele său și sunt sigur că îi poți găsi informațiile de contact pentru a lua legătura în cazul în care ai nevoie de ajutor suplimentar.

EAMann EAMann
29 mar. 2012 01:49:19