Filtreler ve kancalar gerçekten WordPress'te nasıl çalışır?
Gelişmiş bir şey soruyorum. PHP'de nasıl uygulanır? Örneğin, farklı kancalardaki tüm kancaları nasıl toplar ve bunları çekirdek kancalarına vb. "Bağlar".
Filtreler ve kancalar gerçekten WordPress'te nasıl çalışır?
Gelişmiş bir şey soruyorum. PHP'de nasıl uygulanır? Örneğin, farklı kancalardaki tüm kancaları nasıl toplar ve bunları çekirdek kancalarına vb. "Bağlar".
Yanıtlar:
Temel olarak, Filtreleri ve Kancaları toplayan " Eklenti API "'si aşağıdaki işlevlerden oluşur:
apply_filters()
- yürütdo_action
- yürütapply_filters_ref_array()
- yürütdo_action_ref_array()
- yürütadd_filter()
- yığına ekleadd_action()
- yığına ekleGenel olarak, birkaç küresel kelime var (WordPress dünyasında başka neler var):
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
Birincisi , tüm filtre adlarını altdiziler olarak tutan $wp_filter
bir geneldir Array
. Bu alt dizilerin her biri daha sonra bir öncelik dizisi altında toplanan geri çağrılar olan daha fazla alt diziyi tutar.
Bir yürütme işlevi çağrıldığında, WordPress bu küre dizilerini bu ada sahip anahtarlar için arar. Ardından ekli geri aramalar öncelikten sonra öncelikli olur. Ön tarafta olan tek şey, all
filtreye takılan geri çağrılardır .
add_action
Veya kullanarak bir geri arama eklediğinizde add_filter
, WordPress ilk önce zaten eklenmiş geri aramaların üzerine yazmamak için "benzersiz" bir kimlik hesaplar.
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
Sonra geri çağrınızı global $wp_filter
yığına ekler :
$wp_filter[ $tag ][ $priority ][ $idx ] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
Gördüğünüz gibi ana alt dizi $tag
(veya action / filter name), sonra her şey belirli bir öncelik altında toplanır ve sonra "benzersiz" geri arama / ID dizesi anahtar olarak kullanılır.
Daha sonra, bir filtre çağrıldığında - $tag
/ action- / filter-name ile oluyor - dizi aranır ve geri aramalar çağrılır. Kullandığı gibi call_user_func_array
kaç argüman ekli olduğu önemli değil. WordPress bunu kendiliğinden çözer.
foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
call_user_func_array(
$the_['function'],
array_slice(
$args,
0,
(int) $the_['accepted_args']
)
);
}
Kancalar hem WordPress çekirdek dosyalarına hem de bazı ana tema dosyalarına dahil edilir. İçeriği, dosyada belirli bir yere bağlamanızı sağlar.
Bir örnek WordPress'teki wp_head kancasıdır. Bu temayı, bu temaya içerik eklemek için alt temanızda kullanabilirsiniz '
Örnek:
add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}
Bazı premium temalar , aynı şeyi yapmak için bir çocuk temasında kullanabileceğiniz eylem kancalarını da içerir . İşte tüm aksiyon kancalarını ve içeriğinizi Genesis tema çerçevesinde çıkardıkları pozisyonu içeren görsel bir harita .
Örnek:
add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}
İşte header.php dosyasını Genesis tema çerçevesinde açtıysanız, kancaya benziyor:
do_action( 'genesis_header' );
İşte size birçok şekilde kullanabileceğiniz WordPress kancalarının bir listesi .
Filtreler , varolan bir işlevin çıktısını değiştirmenizi sağlar ve hem WordPress çekirdek dosyalarına hem de Genesis gibi bazı ana tema çerçevelerine dahil edilir.
Genesis Tasarım Çerçevesi ile kullanabileceğiniz filtrelerin bir listesi
İşte WordPress'e dahil olan filtrelerin listesi
İşte bir filtreyi Genesis gibi bir tema çerçevesinde nasıl kullanabileceğinizi gösteren bir örnek:
add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}
Yukarıdaki kod bir alt temada kullanılabilir ve yazarı değiştirmek için yazarı yorumlarınızı yazar. Herhangi bir temada çalışır.
İşte alıntıların uzunluğunu 50 kelimeye ayarlayan başka bir örnek:
add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50;
}
The_excerpt () işlevini wp-include / post-template.php dosyasında bulabilirsiniz.
İşte göründüğü gibi:
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
Aynı şeyi yapmak için eklentilerdeki kancaları ve filtreleri de kullanabilirsiniz; ana temayı veya WordPress'i güncellediğinizde kod kaybolmaz.
Temel olarak, kancalar ve filtreler, temel WordPress dosyalarını veya ana tema dosyalarınızı düzenlemeden hem WordPress'i hem de ana temanızı özelleştirmenizi ve değiştirmenizi sağlar.
Üst tema çerçevesi, kancalar ve filtreler içerdiğinde alt temaların özelleştirilmesi önemli ölçüde daha kolaydır, çünkü üst tema şablon dosyalarını hiçbir zaman düzenlemeniz gerekmez. Bu şekilde temaları da güvenle değiştirebilirsiniz.