remove_action în WordPress

Hooks: acțiuni și filtre WordPress 1.2.0

Scoate o funcție legată de o acțiune sau de un filtru; callback-ul și prioritatea trebuie să fie identice cu cele de la adăugare.

Sintaxă
remove_action( string $hook_name, callable|string|array $callback, int $priority = 10 ): bool
remove_filter( string $hook_name, callable|string|array $callback, int $priority = 10 ): bool

Ce face remove_action

remove_action() și remove_filter() anulează un add_action() / add_filter() făcut de nucleu, de tema părinte sau de un plugin. remove_action() este un alias pentru remove_filter(), deci fac același lucru.

Regula importantă: $callback și $priority trebuie să fie exact cele de la adăugare. Dacă funcția a fost adăugată cu prioritatea 20 și o scoți fără prioritate (adică 10), nu se întâmplă nimic și nu primești niciun avertisment.

Contează și momentul: funcția trebuie să fi fost deja adăugată, iar acțiunea să nu fi rulat încă. De aceea scoaterea se face des dintr-un hook care rulează mai târziu, de exemplu after_setup_theme sau init.

Parametri

Parametru Descriere
$hook_name Numele acțiunii sau al filtrului de care este legată funcția.
$callback Aceeași funcție dată la adăugare: numele ei ca text sau array( $obiect, 'metoda' ) cu același obiect.
$priority Opțional, implicit 10. Trebuie să fie prioritatea folosită la adăugare.

Ce returnează

true dacă funcția era legată și a fost scoasă, false altfel.

Exemple

Exemplul 1: Fără paragrafe automate în conținut

Nucleul leagă wpautop de the_content cu prioritatea implicită 10. Fără el, liniile goale din conținut nu mai devin <p>.

remove_filter( 'the_content', 'wpautop' );

Exemplul 2: Scoți o funcție a temei părinte

Tema părinte are add_action( 'wp_footer', 'parinte_credite', 20 );. functions.php al temei copil se încarcă înaintea celui părinte, așa că scoaterea se face în after_setup_theme, care rulează după ce ambele au fost încărcate.

add_action( 'after_setup_theme', 'dex_scoate_credite' );

function dex_scoate_credite() {
    remove_action( 'wp_footer', 'parinte_credite', 20 );
}

Exemplul 3: Prioritatea greșită nu scoate nimic

wp_generator (eticheta meta cu versiunea WordPress) este legat de wp_head cu prioritatea 10. Primul apel, cu prioritatea 1, eșuează; al doilea reușește.

add_action( 'init', function () {
    var_dump( remove_action( 'wp_head', 'wp_generator', 1 ) );
    var_dump( remove_action( 'wp_head', 'wp_generator' ) );
} );

Ce afișează pagina

bool(false)
bool(true)

Greșeli frecvente

  • Altă prioritate decât la adăugare: verifică în codul temei sau al pluginului al treilea argument din add_action() și folosește-l exact.
  • Scoatere prea devreme: în functions.php al temei copil, funcția părintelui nu a fost încă adăugată. Mută remove_action() într-un hook ulterior (after_setup_theme, init).
  • Metode de clasă: array( 'Clasa', 'metoda' ) nu scoate o funcție adăugată cu array( $obiect, 'metoda' ); ai nevoie de același obiect. Funcțiile anonime nu pot fi scoase deloc.

Comenzi înrudite

  • add_action: Leagă o funcție de o acțiune WordPress, ca să ruleze automat când WordPress ajunge în acel punct.
  • add_filter: Leagă o funcție de un filtru: WordPress îi dă o valoare, iar funcția întoarce valoarea modificată.
  • the_content: Filtrul prin care trece conținutul unui articol după ce este citit din baza de date și înainte de a fi afișat.