Блог
WordPress Hook Архитектура: Акције против Филтера Објашњено
Основа сваког сјајног додатка. Сазнајте како 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 користи куке
Када Градитељ додатака генерише додатак, он структурира код око класе са методама прикаченим на куке у конструктору. Овај образац избегава сукобе имена глобалних функција и одржава код организованим.
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 покренуо. Ово обично значи прикачивање вашег уклањања на каснију акцију.