Блог
WordPress Hook Architecture: Действия срещу Филтри Обяснени
Основата на всеки страхотен плъгин. Научете как PAGEnza AI използва кукички и филтри за създаване на поддържаем, мащабируем код.
Всеки WordPress плъгин прави едно от двете неща: той изпълнява код в определен момент (действие) или модифицира стойност, преди тя да бъде използвана (филтър). Това е всичко. Цялата екосистема от WordPress плъгини е изградена върху това разграничение.
Разбирането на разликата — и кога да използвате всяко от тях — е това, което отличава плъгините, които работят, от плъгините, които причиняват проблеми.
Действия: правете нещо в определен момент
Кукичката за действие е сигнал, който WordPress (или друг плъгин) изпраща в определен момент. Прикрепяте функция към този сигнал и вашата функция се изпълнява, когато сигналът бъде задействан.
add_action( 'wp_enqueue_scripts', 'my_plugin_load_assets' );
function my_plugin_load_assets() {
wp_enqueue_style( 'my-plugin', plugin_dir_url( __FILE__ ) . 'style.css' );
wp_enqueue_script( 'my-plugin', plugin_dir_url( __FILE__ ) . 'script.js', ['jquery'], '1.0', true );
}
wp_enqueue_scripts се задейства, когато WordPress подготвя зареждането на активи за фронт-енда. Прикрепянето към него е правилният начин за зареждане на CSS и JS — а не поставянето на <script> тагове директно в шаблоните.
Често срещани кукички за действия, които ще използвате постоянно:
init— изпълнява се рано, подходящо за регистриране на типове публикации и таксономииwp_enqueue_scripts— зареждане на активи за фронт-ендаadmin_enqueue_scripts— зареждане на активи за администрациятаsave_post— изпълнява се при запазване на публикация, подходящо за обработка на персонализирани полетаwp_ajax_{action}— обработка на AJAX заявки от удостоверени потребителиwp_ajax_nopriv_{action}— обработка на AJAX заявки от неудостоверени потребители
Филтри: модифицирайте стойност, преди тя да бъде използвана
Кукичката за филтър ви дава стойност, позволява ви да я модифицирате и очаква от вас да върнете модифицираната версия. След това WordPress използва вашата модифицирана стойност вместо оригиналната.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Готови ли сте да изпробвате PAGEnza? <a href="#">Започнете безплатно →</a></div>';
return $content . $cta;
}
Критичното правило: винаги връщайте нещо от филтър. Ако забравите return, стойността става null и сте повредили всичко, което я е използвало.
Често срещани кукички за филтри:
the_content— съдържанието на публикацията преди показванеthe_title— заглавието на публикациятаwp_nav_menu_items— HTML на навигационното менюupload_mimes— разрешени типове файлове за качванеplugin_action_links_{plugin-file}— връзки, показани на страницата със списъка на плъгините
Как PAGEnza AI използва кукички
Когато Plugin Builder генерира плъгин, той структурира кода около клас с методи, прикрепени към кукички в конструктора. Този модел избягва сблъсъци на имена на глобални функции и поддържа кода организиран.
class My_Plugin {
public function __construct() {
add_action( 'init', [ $this, 'register_post_type' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'load_assets' ] );
add_filter( 'the_content', [ $this, 'append_content' ] );
}
public function register_post_type() { /* ... */ }
public function load_assets() { /* ... */ }
public function append_content( $content ) {
// винаги връщайте
return $content;
}
}
new My_Plugin();
Сканирането за сигурност конкретно проверява дали AJAX обработчиците включват както проверка на nonce, така и проверка на възможности, преди да направят каквото и да било:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Сигурност: проверете nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Сигурност: проверете правата
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Недостатъчни права', 403 );
}
// Сега е безопасно за обработка
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Липсата на някоя от тези се маркира като проблем със сигурността и блокира пускането на плъгина.
Приоритет и опашката от кукички
Когато множество функции са прикрепени към една и съща кукичка, те се изпълняват в ред на приоритет (по-нисък номер = изпълнява се първи). Приоритетът по подразбиране е 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // по подразбиране
add_action( 'init', 'runs_last', 20 );
Това има значение, когато вашият плъгин трябва да се изпълни преди или след кода на друг плъгин. Ако модифицирате нещо, което друг плъгин също модифицира, приоритетът определя кой печели.
Често срещан модел: ако презаписвате филтър на тема, използвайте приоритет 20 или по-висок, за да сте сигурни, че се изпълнявате след кода на темата.
Премахване на кукички
Можете да премахнете кукичка, която някой друг е добавил — включително кукички на теми и плъгини:
remove_action( 'wp_head', 'wp_generator' ); // премахва версията на WP от <head>
remove_filter( 'the_content', 'wpautop' ); // премахва автоматичното обвиване в параграфи
Уловката: можете да премахнете кукичка само ако извикате remove_action/remove_filter след като оригиналното add_action/add_filter се е изпълнило. Това обикновено означава прикрепяне на премахването към по-късно действие.