Sorun anlaşılması Apply_filters ()


19

Apply_filters () içinde

apply_filters( $tag, $value, $var ... );

Kafamı $valueve $var. Kodeksi okudum ve $valuemodifiye edilebilir gibi geliyor , $vardeğil, ama vahşi doğada bunun herhangi bir örneği bulamadım. Bir değişkeni geçmenin bir yolu olarak kullanılıyor gibi görünüyor. Bu durumda, bununla arasındaki fark $varnedir?

Yanıtlar:


35

İşlevi daha iyi adlarla görmeye çalışın:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

Bu işlev şu şekilde adlandırıldığında:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

Kullanabilirsiniz …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

… Ve bu işleve iki değişken aktarın. Birincisini döndürürsünüz, ikincisi sadece daha fazla bağlam sağlar:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

Ek değişkenler, kararlarınızı kolaylaştırmak için var, bunları değiştirmek için değil.


Eğer doğru anlıyorsam. Otomatik olarak $ value_to_change için geçerli olarak Apply_filters döndürülen değeri toplamak için bir değişken eklemiyor musunuz?
r00tAcc3ss

@ r00tAcc3ss Hiçbir şey otomatik olarak gerçekleşmez. Geri aramanızdaki değeri değiştirmeniz gerekir. Bağlama bağlı olarak, isterseniz değiştirmeden de iade edebilirsiniz.
fuxia

Ah evet. Yani, döndürülen değeri başka bir değişkene kabul etmek ve $ değerine atamak zorunda değilim. Kancalı işlevde $ değerini değiştirip "otomatik olarak" döndürdüysem bu yapılır.
r00tAcc3ss

11

Filtreler nedir?

Filtreler , WordPress'in verilerle bir işlem yapmadan hemen önce (veritabanına eklemek veya tarayıcı ekranına göndermek gibi), yürütmenin belirli noktalarında verileri ilettiği işlevlerdir. Filtreler veritabanı ile tarayıcı (WordPress sayfa oluştururken) ve tarayıcı ile veritabanı arasında (WordPress veritabanına yeni yayınlar ve yorumlar eklerken) oturur; WordPress'deki çoğu girdi ve çıktı en az bir filtreden geçer. WordPress varsayılan olarak bazı filtreleme yapar ve eklentiniz kendi filtrelemesini ekleyebilir.

Bir Filtreye Bağlanma

Kullanıcıların bazı belirli verileri (bir değer, bir fonksiyonun çıkışı vb.) Değiştirmesine izin vermek için, fonksiyonlar aracılığıyla filtre kancaları sağlanır apply_filters.
Bu filtre kancaları, filtrenin adını (veya etiketini ) ve en azından filtrelemek için kullanılacak işlev adını içerir (yani bir şekilde değiştirmek) için .

Bir yazının başlığını değiştirmek için the_title, aşağıdaki gibi tanımlanan filtre kancasını kullanabilirsiniz :

apply_filters( 'the_title', $title, $id );

Bu, filtrenin etiketine / adına sahip olduğu anlamına gelir, the_titleilk parametre $titledeğiştirilecek verilerdir (yani posta başlığı) ve ikinci parametre $idfazladan bilgilerdir (bu durumda posta kimliği).

Görüntülemek için her yazının başlığı BÜYÜK HARF, örneğin, aşağıdaki satırı kullanabilirsiniz:

add_filter('the_title', 'strtoupper');

İşleve bakarsak add_filter, bunun aşağıdaki gibi tanımlandığını görürüz:

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Üçüncü ve dördüncü parametre ilgili varsayılan değerine (yani 10ve 1) ayarlanmışken yalnızca birinci ve ikinci (gerekli) parametreyi belirledik .

Daha Karmaşık Bir Filtre

Yalnızca belirli bir gönderiyi filtrelemek istiyorsanız , ek bilgileri kullanabilirsiniz (bu filtre durumunda: kimlik). Bunu yapmak için, parametre sayısını belirtmelisiniz (bu durumda 2'dir) ve bunu tekrar yapmak için, öncelik parametresini (argüman sayısından önce gelir) belirtmeniz gerekir.

Diyelim ki yalnızca 42 numaralı kimliğin başlığını etkilemek istiyoruz, o zaman şöyle görünür:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

Bu durumda, mevcut dört parametrenin tümünü belirtmeliyiz.

Hangi Parametrelerim Var?

Belirli bir filtrenin kullanılabilir parametrelerini (sayısını) tanımlamak için, nerede tanımlandığına bakmanız gerekir (bu durumda: burada ).


Kaynaklar :


2
Kapsamlı bir yanıt ve kusursuz sınıf için +1 (güzel biçimlendirme brochacho)!
bosco

Teşekkürler, bu çok kapsamlı, ama gerçekten ne istediğimi açıklamıyor. Örneğin. filtrede $ value değişkeni ile $ var değişkeni arasındaki fark.
r00tAcc3ss

Hm, söyleyebilirim, öyle, ama tabii ki, bu benim öznel hissim. Yine de filtre ve parametreleri hakkında bazı bilgiler ekleyeceğim.
tfrommen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.