Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Interesant
  • Acțiune inofensivă face php. PHP _SELF în atributul de acțiune al formularului

Acțiune inofensivă face php. PHP _SELF în atributul de acțiune al formularului

Am creat fundația unui viitor plugin care va fi recunoscut de sistemul WordPress. Astăzi vom schimba direct funcționalitatea de bază a sistemului.

Un sistem de „cârlige”, „evenimente” (acțiuni) și filtre (filtre) ne vor ajuta în acest sens. Aceste trei concepte sunt baza fiecărui plugin WordPress.

Cârlige

Există două tipuri de cârlige în WordPress:

  • Cârlig de acțiune: marchează un loc în cod care efectuează o acțiune specifică, de exemplu, trebuie să introduceți niște date și să le salvați în baza de date.
  • Cârlig de filtru: marchează un filtru care va schimba o anumită valoare (variabilă), astfel încât în ​​viitor codul să folosească valoarea modificată.
Acțiuni

Lucrul cu evenimente (acțiuni)

Logica generală pentru gestionarea evenimentelor în WordPress este simplă:

  • Marcați locul unde trebuie efectuată acțiunea folosind un cârlig de acțiune cu parametrii necesari.
  • Creați o funcție care va efectua acțiunile dorite folosind parametrii trecuți de cârlig.
  • Înregistrați un eveniment care va fi executat la declanșarea cârligului, cu o anumită prioritate.
  • Când WordPress încarcă o pagină și găsește un hook, sistemul va executa toate funcțiile care sunt înregistrate în acel hook.
  • Pentru a realiza primul punct, sistemul oferă funcția „do_action”:

    Do_action($tag, $arg_1, $arg_2, ... , $arg_n);

    Ia următoarele argumente: $tag – numele „cârligului”, $arg_1, $arg_2, ..., $arg_n – parametrii cu care va fi apelată funcția. Pot exista orice număr de argumente sau 0.

    Sistemul în sine are multe cârlige deja definite:

    Do_action("init");

    Acesta este un exemplu foarte simplu, fără argumente suplimentare. Acest cârlig este declanșat atunci când majoritatea sistemului a fost deja configurat și este timpul să vă creați propriile obiecte, categorii, postări etc.

    Do_action("salvare_post", $post_id, $post);

    În acest exemplu, cârligul este declanșat atunci când o postare este salvată cu două argumente post_id - identificatorul postării și post - postarea în sine.

    Crearea de cârlige este disponibilă oricărui dezvoltator pentru a-și crea propriul plugin (sau temă). Datorită acestui fapt, avem un instrument puternic pentru controlul comportamentului sistemului.

    Do_action(„cârligul_cu_adevărat_personalizat”);

    Odată ce am creat cârligul și am scris funcția, trebuie să înregistrăm funcția folosind „add_action”

    Add_action($tag, $function_to_add, $priority, $accepted_args_number);

    Funcția „add_action” ia doi parametri necesari: $tag: numele hook-ului corespunzător și $function_to_add: numele funcției care trebuie apelată. Ceilalți doi parametri sunt opționali: $priority: o variabilă întreagă care determină ordinea în care funcția este executată (implicit este 10), $accepted_args_number: numărul de argumente pe care funcția le acceptă (implicit este 1).

    Să ne uităm la un exemplu pentru a înțelege întregul proces. Să presupunem că vrem să adăugăm o mică notificare în partea de jos a site-ului nostru. Putem folosi cârligul „wp_footer” pentru aceasta, deoarece este o parte obligatorie a codului pe care o folosește fiecare temă.

    Funcția msp_helloworld_footer_notice())( echo „Bună ziua, sunt notificarea ta personalizată”; ) add_action(”wp_footer”, „msp_helloworld_footer_notice”);

    În acest exemplu, am creat o funcție care pur și simplu redă marcajul pentru alertă și am înregistrat-o cu „wp_footer”. Odată ce adăugăm acest cod în fișierul nostru de plugin (vezi anterior), vom vedea rezultatul pe pagină:

    Alertă pentru pluginul WordPress

    Lucrul cu filtre

    Filtrele funcționează în același mod ca și evenimentele. Dar filtrele nu execută doar o anumită bucată de cod, ci schimbă valorile care le sunt transmise de cârlig. Aceasta înseamnă că fiecare filtru are asociată o valoare (variabilă) pe care operează.

    Funcția de filtrare va prelua această valoare și o va transforma pentru utilizare ulterioară. Cârligele de filtrare sunt ușor diferite de cârligele de acțiune.

    Aplică_filtre($tag, $value_to_filter, $arg_1, $arg_2, ... , $arg_n);

    Funcția „apply_filter” creează un cârlig de filtru numit $tag și un parametru necesar $value_to_filter (acesta poate fi gol, dar trebuie declarat). Argumentele opționale rămase funcționează la fel ca pentru evenimente.

    Filter_function($value_to_filter, $arg_1, $arg_2, ... , $arg_n)( //filter returnează $value_to_filter; //valoarea trebuie returnată)

    Acesta este „scheletul” filtrului, care demonstrează că filtrul ar trebui:

  • accepta cel putin 1 argument;
  • returnează valoarea modificată.
  • add_filter($tag, $function_to_add, $priority, $accepted_args);

    Funcția „add_filter” înregistrează o funcție cu numele conținut în $function_to_add pentru cârligul $tag. Argumentele rămase - $priority și $accepted_args - funcționează la fel ca pentru hook-urile de evenimente.

    Să ne uităm la un exemplu: o sarcină comună pentru un plugin este să adauge ceva la sfârșitul unei postări. Dacă aruncăm o privire mai atentă la funcția „the_content”, care este folosită pentru a afișa conținutul unei postări, vom găsi următorul cârlig:

    $conținut = aplică_filtre(„conținutul”, $conținut);

    Folosind-o, putem adăuga cu ușurință ceva la sfârșitul postării.

    Funcția msp_helloworld_post_footer($content) ( $content .= "

    Bună, sunt subsolul dvs. personalizat al postării

    "; returnează $conținut; ) add_filter("the_conținut", "msp_helloworld_post_footer", 100);

    Rețineți că folosim un număr mare pentru prioritate pentru a ne asigura că toate filtrele standard sunt executate înainte de a executa „msp_helloworld_post_footer”. După ce includem codul în pluginul nostru, vom vedea rezultatul:


    Cum să găsești un cârlig

    Acum înțelegem că, pentru a efectua anumite acțiuni, trebuie să știm despre cârligele existente.

    Codexul WordPress oferă liste de cârlige pentru filtre și evenimente de referință pentru acțiuni și referințe pentru filtre.

    Acțiuni suplimentare cu cârlige

    La fel ca și adăugarea, un cârlig poate fi eliminat folosind o sintaxă similară.

    Puteți șterge evenimente ca acesta:

    Remove_action($tag, $function_to_remove, $priority, $accepted_args); remove_all_actions($tag, $priority);

    După cum probabil ați ghicit, „remove_action” elimină un anumit eveniment înregistrat pentru un anumit hook (prioritatea și numărul de argumente trebuie specificate corect, așa cum a fost specificat în timpul înregistrării), iar „remove_all_actions” ajută la eliminarea tuturor evenimentelor înregistrate pentru un hook ( dacă prioritatea este omisă, funcția va șterge toate evenimentele).

    Filtrele pot fi șterse în același mod:

    Remove_filter($tag, $function_to_remove, $priority, $accepted_args); remove_all_filters($tag, $priority);

    API-ul pluginului WordPress oferă, de asemenea, funcții pentru a verifica dacă o funcție este înregistrată pentru un anumit cârlig:

    Are_action($tag, $function_to_check); are_filter($tag, $funcție_de_verificat);

    Ambele funcții verifică dacă funcția dată este înregistrată pentru hook și returnează true dacă reușește, altfel flase. În interiorul funcției avem capacitatea de a verifica dacă cârligul a numit-o:

    If("hook_to_check_name" === current_filter())()

    În ciuda numelui „current_filter” nu funcționează numai cu filtre, ci și cu evenimente.

    Exemplu non-trivial

    Să reînviam „scheletul” pluginului nostru, pe care l-am pregătit în ultima lecție.

    Să umplem fișierul „core.php” (partea principală a pluginului nostru, care conține cea mai mare parte a funcțiilor) cu cod care rezolvă o problemă care poate apărea efectiv în timpul lucrului. Pentru a rezolva acest lucru vom folosi acțiuni și filtre.

    Permiteți site-ului dvs. WordPress să accepte postări de la diferiți autori de la oaspeți, dar nu vă permite să creați conturi. Aceasta înseamnă că utilizatorul care a publicat postarea și autorul real sunt persoane diferite și trebuie să ne asigurăm că autorul este indicat în postare. Putem face acest lucru folosind taxonomia.

    Să ne creăm propria taxonomie pentru a procesa numele autorului și scurta biografie. Vom putea folosi numele autorului ca și alți termeni de taxonomie (etichete, de exemplu) în postare. Cod:

    /** înregistrează filtre și evenimente **/ funcția msp_helloworld_init())( add_action("init", "msp_helloworld_taxonomies"); add_filter("the_content", "msp_helloworld_author_block_filter"); add_filter("post_class", "msp_helloworld"); _post_class"); add_action ("plugins_loaded", "msp_helloworld_init"); /** taxonomie **/ function msp_helloworld_taxonomies())( $args = array("labels" => array("name" => "Autori invitați", "singular_name" => "Autor invitat"), "show_in_nav_menus" = > false); register_taxonomy("gauthor", array("post"), $args ) /** autor block markup **/ function msp_helloworld_author_block())( global $post; $author_terms = wp_get_object_terms($post->ID, "gauthor"); if(empty($author_terms)) return $name = stripslashes($author_terms->name $url = esc_url(get_term_link($author_terms)) $desc = wp_filter_post_kses($author_terms->de); ; $out = ""; $out .= "Acesta este un post de oaspete de ($name)"; ()) $conținut .= msp_helloworld_author_block(); returnează $conținut; gauthor"); if(!empty($author_terms))( $post_class = "gauthor"; ) returnează $post_class; )

    După cum puteți vedea, am creat o funcție pentru a ne înregistra propria taxonomie și a lega-o la cârligul „init”. Apoi, am creat un șablon responsabil pentru afișarea blocului de autor folosind funcția WordPress „wp_get_object_terms”. Apoi am inserat un bloc cu informații despre autor la sfârșitul postării folosind filtrul „the_content”. Și, în cele din urmă, am adăugat propria noastră clasă CSS. Rezultat:


    Acest articol intră în detaliu despre utilizarea variabilei PHP _SELF.

    Ce este variabila PHP _SELF?

    Variabila PHP _SELF returnează numele și calea fișierului curent (relativ cu rădăcina documentului). Puteți utiliza această variabilă în atributul de acțiune al formularului. Există și câteva nuanțe pe care ar trebui să le cunoașteți. Desigur, nu putem ignora aceste nuanțe.

    Să ne uităm la câteva exemple.

    Echo $_SERVER["PHP_SELF"];

    1) Să presupunem că fișierul dvs. php se află la următoarea adresă:

    Http://www.yourserver.com/form-action.php

    În acest caz, variabila PHP _SELF va conține:

    „/form-action.php”

    2) Să presupunem că fișierul dvs. php se află la această adresă:

    Http://www.yourserver.com/dir1/form-action.php

    PHP_SELF va fi:

    „/dir1/form-action.php”

    PHP _SELF în atributul de acțiune al formularului. De ce era nevoie de ea acolo?

    De obicei, variabila PHP _SELF este utilizată în atributul de acțiune al etichetei formular. Atributul acțiune specifică adresa la care va fi trimis conținutul formularului după confirmare (utilizatorul dă clic pe butonul cu tip="submit"). De regulă, aceasta este aceeași pagină din care a plecat formularul.

    Cu toate acestea, dacă redenumiți fișierul la care face referire formularul, va trebui să redenumiți numele fișierului în atributul acțiune, altfel formularul nu va funcționa.

    Variabila PHP _SELF vă va scuti de corecții inutile, deoarece adresa paginii va fi generată automat pe baza numelui fișierului.

    Să presupunem că aveți un fișier formular numit form-action.php și doriți ca formularul să fie trimis în același fișier după confirmare. De obicei ei scriu astfel:

    Dar puteți folosi variabila PHP _SELF în loc de form-action.php. În acest caz, codul va arăta astfel:

    Cele mai bune articole pe această temă