Danh mục Hook WordPress
Danh mục có thể tìm kiếm về các action và filter WordPress mà lập trình viên thực sự dùng — kèm chữ ký add_action/add_filter chính xác, thời điểm kích hoạt, ví dụ chạy được và điều thường khiến người ta vấp phải.
39 hook, kèm chữ ký add_action / add_filter chính xác, thời điểm nó kích hoạt, một ví dụ chạy được, và cái điểm hay khiến người ta vấp ngã. 1 hook được đánh dấu là chưa xác minh — chúng tôi chưa đối chiếu số lượng tham số của chúng với mã nguồn WordPress, và thà nêu rõ điều đó còn hơn trình bày một phỏng đoán như thể là sự thật.
Danh sách này không đầy đủ và cũng không tỏ ra như vậy — WordPress có hàng nghìn hook. Nó chỉ gồm những hook mà người ta thực sự hay dùng đến.
Chạy sau khi WordPress nạp xong nhưng trước khi bất kỳ header nào được gửi đi. Nơi chuẩn để đăng ký kiểu bài viết tùy chỉnh, taxonomy và quy tắc rewrite.
Kích hoạt
Trên mọi yêu cầu, cả front end lẫn admin, sau khi core, các plugin và giao diện đã được nạp.
Chữ ký
add_action( 'init', 'my_callback' );Ví dụ
add_action( 'init', function () {
register_post_type( 'book', array(
'public' => true,
'label' => 'Books',
'show_in_rest' => true, // required for the block editor
) );
} );Điểm dễ vấp
init chạy trên MỌI yêu cầu, kể cả AJAX, REST và cron. Làm bất cứ điều gì chậm ở đây (một yêu cầu HTTP, một truy vấn nặng) sẽ làm nặng từng lượt tải trang. Ngoài ra: người dùng hiện tại đã có sẵn ở đây, nhưng bạn không thể xuất ra bất cứ thứ gì — header chưa được gửi, nhưng sắp được gửi rồi.
Chạy ngay khi giao diện được nạp. Nơi đúng để dùng add_theme_support(), add_image_size() và đăng ký menu điều hướng.
Kích hoạt
Sau khi functions.php của giao diện được nạp, TRƯỚC init.
Chữ ký
add_action( 'after_setup_theme', 'my_callback' );Ví dụ
add_action( 'after_setup_theme', function () {
add_theme_support( 'post-thumbnails' );
add_theme_support( 'title-tag' );
add_image_size( 'card', 600, 400, true ); // true = hard crop
} );Điểm dễ vấp
Đăng ký kích thước ảnh trên init thay vì ở đây thì đa số trường hợp vẫn chạy do may mắn, rồi lại hỏng một cách khó hiểu trong vài trường hợp. Hãy dùng after_setup_theme — nó sinh ra chính là để làm việc này.
Chạy ngay khi tất cả plugin đang kích hoạt được nạp. Thời điểm an toàn sớm nhất để tương tác với một plugin khác.
Kích hoạt
Sau khi mọi tệp plugin được nạp vào, trước khi giao diện được nạp.
Chữ ký
add_action( 'plugins_loaded', 'my_callback' );Điểm dễ vấp
Người dùng hiện tại CHƯA có sẵn ở đây — wp_get_current_user() sẽ không hoạt động đáng tin cậy. Nếu cần người dùng, hãy dùng init.
Chạy sau khi WordPress đã nạp hoàn toàn — plugin, giao diện, init và người dùng đều đã sẵn sàng.
Kích hoạt
Sau init và sau khi người dùng hiện tại được thiết lập.
Chữ ký
add_action( 'wp_loaded', 'my_callback' );Chạy ở đầu mỗi yêu cầu phía admin. Dùng cho register_setting(), kiểm tra quyền và chuyển hướng trong admin.
Kích hoạt
Trên mọi yêu cầu phía admin.
Chữ ký
add_action( 'admin_init', 'my_callback' );Điểm dễ vấp
Nó cũng kích hoạt trên các yêu cầu admin-ajax.php, vốn không thực sự là "màn hình admin". Nếu callback của bạn giả định có một màn hình, hãy bảo vệ nó bằng wp_doing_ajax().
Nơi đúng duy nhất để nạp (enqueue) CSS và JavaScript cho front end.
Kích hoạt
Khi tải trang front end, trước khi phần head được kết xuất.
Chữ ký
add_action( 'wp_enqueue_scripts', 'my_callback' );Ví dụ
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style(
'child-style',
get_stylesheet_uri(),
array( 'parent-style' ), // load AFTER the parent
wp_get_theme()->get( 'Version' ) // cache-bust on version change
);
} );Điểm dễ vấp
Bất chấp cái tên, nó xử lý cả STYLE lẫn script — không hề có hook wp_enqueue_styles, và người ta mất thời gian thật để đi tìm nó. Ngoài ra: nó không kích hoạt trong admin (hãy dùng admin_enqueue_scripts) hay trong trình soạn thảo block (hãy dùng enqueue_block_editor_assets).
Nạp CSS/JS trong admin. Nhận hook suffix của màn hình hiện tại để bạn có thể chỉ tải tài nguyên trên đúng một màn hình.
Kích hoạt
Khi tải trang admin.
Chữ ký
add_action( 'admin_enqueue_scripts', 'my_callback' ); // receives $hook_suffixVí dụ
add_action( 'admin_enqueue_scripts', function ( $hook ) {
if ( 'settings_page_my-plugin' !== $hook ) {
return; // do not load our JS on every admin screen
}
wp_enqueue_script( 'my-admin', plugins_url( 'admin.js', __FILE__ ), array(), '1.0', true );
} );Điểm dễ vấp
Không kiểm tra $hook là nguyên nhân phổ biến nhất khiến một plugin làm hỏng các màn hình admin không liên quan. Chỉ tải tài nguyên ở nơi cần đến và không ở đâu khác.
Chỉ nạp tài nguyên vào trình soạn thảo block (Gutenberg) — không phải front end, không phải phần còn lại của admin.
Kích hoạt
Khi trình soạn thảo block được nạp.
Chữ ký
add_action( 'enqueue_block_editor_assets', 'my_callback' );In nội dung vào phần <head>. Dùng cho các thẻ meta và CSS then chốt được nhúng inline.
Kích hoạt
Bên trong <head>, ở front end.
Chữ ký
add_action( 'wp_head', 'my_callback' );Điểm dễ vấp
ĐỪNG nạp script hay style ở đây — hãy dùng wp_enqueue_scripts để WordPress lo phần phụ thuộc và loại bỏ trùng lặp. Việc echo một thẻ <script> vào wp_head bỏ qua toàn bộ cơ chế đó và là lý do vì sao rất nhiều website nạp jQuery đến ba lần.
In nội dung ngay trước </body>. Nơi phù hợp cho các đoạn mã phân tích và markup được trì hoãn.
Kích hoạt
Ở cuối trang front end.
Chữ ký
add_action( 'wp_footer', 'my_callback' );Điểm dễ vấp
Một giao diện quên gọi wp_footer() sẽ làm hỏng thanh admin, làm hỏng mọi plugin có nạp script ở footer, và bị từ chối tự động trong khâu duyệt giao diện của wordpress.org.
Lọc nội dung bài viết ngay trước khi hiển thị. Nơi thường dùng để chèn thêm markup vào đầu hoặc cuối một bài viết.
Kích hoạt
Mỗi khi the_content() được gọi.
Chữ ký
add_filter( 'the_content', 'my_callback' ); // receives $contentVí dụ
add_filter( 'the_content', function ( $content ) {
if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {
return $content; // <- the guard everyone forgets
}
return $content . '<p class="cta">Enjoyed this? Read more.</p>';
} );Điểm dễ vấp
Nó chạy thường xuyên hơn bạn tưởng nhiều — trong widget, trong phản hồi REST, trong khâu tạo đoạn trích của một số plugin, và mỗi bài một lần trong vòng lặp trên trang lưu trữ. Nếu thiếu các điều kiện bảo vệ is_singular / in_the_loop / is_main_query, lời kêu gọi hành động (CTA) của bạn sẽ xuất hiện mười lăm lần trên trang chủ blog và cả trong nguồn cấp RSS. Đây là filter bị dùng sai nhiều nhất trong WordPress.
Lọc tiêu đề bài viết trước khi hiển thị.
Kích hoạt
Mỗi khi the_title() hoặc get_the_title() được gọi.
Chữ ký
add_filter( 'the_title', 'my_callback', 10, 2 ); // receives $title, $post_idĐiểm dễ vấp
Nó cũng kích hoạt với tiêu đề trong menu admin, trong menu điều hướng và trong thẻ <title> của tài liệu. Lọc nó mà không đặt điều kiện sẽ đổi tên mọi thứ ở những nơi bạn không hề định làm.
Đặt số TỪ mà một đoạn trích tự sinh sẽ chứa. Mặc định là 55.
Kích hoạt
Khi WordPress tạo đoạn trích cho một bài viết không có đoạn trích thủ công.
Chữ ký
add_filter( 'excerpt_length', 'my_callback' ); // receives $length (words)Ví dụ
add_filter( 'excerpt_length', function ( $length ) {
return 25;
}, 999 ); // high priority: many themes set this too, and last one winsĐiểm dễ vấp
Nó không có tác dụng với các bài đã có đoạn trích THỦ CÔNG — những đoạn đó được dùng nguyên văn. Và nhiều giao diện tự đặt filter này, nên bạn thường cần một số ưu tiên cao để giành phần thắng.
Thay đổi chuỗi được nối vào cuối một đoạn trích bị cắt ngắn. Mặc định là " […]".
Kích hoạt
Khi một đoạn trích tự sinh bị cắt ngắn.
Chữ ký
add_filter( 'excerpt_more', 'my_callback' ); // receives $moreSửa một truy vấn TRƯỚC khi nó chạy. Cách đúng để thay đổi những gì hiển thị trên một trang lưu trữ — tốt hơn nhiều so với việc dùng một WP_Query thứ hai.
Kích hoạt
Sau khi các biến truy vấn được phân tích, trước khi SQL được dựng.
Chữ ký
add_action( 'pre_get_posts', 'my_callback' ); // receives WP_Query $query (by reference)Ví dụ
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return; // <- both guards are mandatory
}
if ( $query->is_category() ) {
$query->set( 'posts_per_page', 12 );
}
} );Điểm dễ vấp
Nó cũng chạy trong ADMIN, và chạy cho MỌI truy vấn, kể cả menu, widget và thư viện media. Bỏ qua các điều kiện bảo vệ is_admin() và is_main_query() thì bạn sẽ âm thầm thay đổi những gì danh sách bài viết trong admin hiển thị — một lỗi thực sự khó lần ra nguồn gốc. Cũng lưu ý: hãy sửa $query, đừng trả về gì cả.
Lọc mệnh đề WHERE trong SQL thô của một truy vấn.
Kích hoạt
Trong lúc SQL của truy vấn đang được lắp ghép.
Chữ ký
add_filter( 'posts_where', 'my_callback', 10, 2 ); // receives $where, WP_Query $queryĐiểm dễ vấp
Bạn đang viết SQL thô. Luôn bảo vệ bằng $query->is_main_query() và luôn dùng $wpdb->prepare() cho mọi dữ liệu người dùng nhập vào. Đây là cách nhanh nhất để đưa lỗ hổng SQL injection vào một website WordPress.
Lọc tổng số bài viết mà một truy vấn tìm được — vốn là căn cứ để tính phân trang.
Kích hoạt
Sau khi truy vấn chạy, trước khi phân trang được tính.
Chữ ký
add_filter( 'found_posts', 'my_callback', 10, 2 ); // receives $found_posts, WP_Query $queryĐặt kích thước pixel mà vượt qua đó WordPress sẽ thu nhỏ ảnh tải lên và phục vụ một bản "-scaled" thay cho ảnh gốc. Mặc định 2560.
Kích hoạt
Khi tải lên, lúc WordPress quyết định một ảnh có "lớn" hay không.
Chữ ký
add_filter( 'big_image_size_threshold', 'my_callback' ); // receives int $thresholdVí dụ
// Serve originals at full resolution — no -scaled copy.
add_filter( 'big_image_size_threshold', '__return_false' );
// Or just raise the ceiling:
add_filter( 'big_image_size_threshold', function () {
return 3840;
} );Điểm dễ vấp
Đây là nguyên nhân phổ biến nhất của tình trạng "ảnh của tôi bị mờ sau khi tải lên WordPress", và gần như không ai biết nó tồn tại. Ảnh gốc của bạn vẫn còn trên ổ đĩa — chỉ là nó không bao giờ được phục vụ. Lưu ý nó áp dụng cho cạnh DÀI NHẤT, và chỉ ảnh hưởng đến những ảnh tải lên sau khi filter được kích hoạt.
Lọc mảng các kích thước ảnh mà WordPress sắp tạo cho một ảnh tải lên. Bỏ (unset) một kích thước để ngừng tạo nó.
Kích hoạt
Khi tải lên, trước khi các tệp ảnh phái sinh được tạo.
Chữ ký
add_filter( 'intermediate_image_sizes_advanced', 'my_callback', 10, 2 ); // receives $sizes, $metadataVí dụ
add_filter( 'intermediate_image_sizes_advanced', function ( $sizes ) {
unset( $sizes['1536x1536'] );
unset( $sizes['2048x2048'] );
return $sizes;
} );Điểm dễ vấp
Loại bỏ một kích thước mà giao diện của bạn thực sự DÙNG có nghĩa là WordPress sẽ lùi về dùng ảnh gốc cỡ đầy đủ — điều còn tệ hơn cả dung lượng ổ đĩa bạn tiết kiệm được. Và việc này chỉ ngăn các tệp MỚI được tạo; những tệp đã có vẫn nằm đó cho đến khi bạn tạo lại (regenerate).
Đặt mức chất lượng JPEG mà WordPress dùng để mã hóa lại ảnh tải lên. Mặc định 82.
Kích hoạt
Bất cứ khi nào WordPress ghi một tệp JPEG.
Chữ ký
add_filter( 'jpeg_quality', 'my_callback', 10, 2 ); // receives $quality, $contextĐiểm dễ vấp
Chất lượng 82 ổn với ảnh chụp và kém thấy rõ với ảnh chụp màn hình, logo và đồ họa phẳng — những thứ đó có cạnh sắc và không có nhiễu kiểu ảnh chụp để che giấu artefact. Ngoài ra: wp_editor_set_quality là filter hiện đại hơn và tác động trực tiếp đến các lớp trình chỉnh sửa ảnh; đặt cả hai là chuyện thường gặp.
Đặt mức chất lượng đầu ra mà các lớp WP_Image_Editor (GD và Imagick) sử dụng.
Kích hoạt
Khi một thực thể trình chỉnh sửa ảnh đặt mức chất lượng của nó.
Chữ ký
add_filter( 'wp_editor_set_quality', 'my_callback', 10, 2 ); // receives $quality, $mime_typeThêm các kích thước ảnh tùy chỉnh của bạn vào danh sách thả xuống chọn kích thước trong hộp thoại media và trình soạn thảo block.
Kích hoạt
Khi giao diện media dựng bộ chọn kích thước của nó.
Chữ ký
add_filter( 'image_size_names_choose', 'my_callback' ); // receives $sizesVí dụ
add_filter( 'image_size_names_choose', function ( $sizes ) {
return array_merge( $sizes, array( 'card' => __( 'Card', 'textdomain' ) ) );
} );Điểm dễ vấp
add_image_size() đăng ký kích thước nhưng KHÔNG làm cho nó có thể chọn được trong trình soạn thảo. Mọi câu hỏi kiểu "kích thước ảnh tùy chỉnh của tôi không xuất hiện trong danh sách thả xuống" đều là do thiếu filter này.
Kiểm tra hoặc từ chối một tệp TRƯỚC khi nó được chuyển vào thư mục uploads.
Kích hoạt
Trong lúc tải lên, trước khi tệp được ghi.
Chữ ký
add_filter( 'wp_handle_upload_prefilter', 'my_callback' ); // receives $fileĐiểm dễ vấp
Để từ chối một tệp, hãy đặt $file['error'] thành một chuỗi thông báo rồi trả về $file. Trả về false hay ném ngoại lệ sẽ không cho ra kết quả bạn muốn.
Lọc mảng siêu dữ liệu (bao gồm các kích thước đã tạo) sau khi một tệp đính kèm được xử lý.
Kích hoạt
Sau khi các ảnh phái sinh được tạo lúc tải lên.
Chữ ký
add_filter( 'wp_generate_attachment_metadata', 'my_callback', 10, 2 ); // receives $metadata, $attachment_idĐiểm dễ vấp
Đây là hook mà các plugin tối ưu ảnh sử dụng. Nó có thể chậm — nó chạy sau khi mọi kích thước ảnh được ghi, và thực hiện một yêu cầu HTTP ở đây khiến mọi lượt tải lên phải chờ nó.
Lọc các ứng viên srcset mà WordPress tạo cho một ảnh responsive.
Kích hoạt
Khi một ảnh responsive được kết xuất.
Chữ ký
add_filter( 'wp_calculate_image_srcset', 'my_callback', 10, 5 );Điểm dễ vấp
Removing the medium_large (768w) size elsewhere silently degrades srcset — that size exists almost entirely to serve it.
Chúng tôi chưa xác minh số lượng tham số chính xác của hook này với mã nguồn WordPress. Hãy kiểm tra developer.wordpress.org trước khi dựa vào nó. Chúng tôi thà nêu rõ điểm chưa chắc chắn còn hơn lặng lẽ trình bày một phỏng đoán như thể là sự thật.
Đăng ký các trang menu và menu con trong admin.
Kích hoạt
Khi menu admin đang được dựng.
Chữ ký
add_action( 'admin_menu', 'my_callback' );Ví dụ
add_action( 'admin_menu', function () {
add_options_page(
'My Plugin',
'My Plugin',
'manage_options', // capability — NOT a role
'my-plugin',
'my_render_settings_page'
);
} );Điểm dễ vấp
Tham số capability là một QUYỀN (capability), không phải một vai trò (role). Truyền "administrator" trông có vẻ chạy được (vì trong một số cấu hình, admin có một quyền trùng tên đó) rồi âm thầm cấp quyền truy cập cho nhầm người. Hãy dùng manage_options.
In một thông báo ở đầu một màn hình admin.
Kích hoạt
Khi trang admin được kết xuất.
Chữ ký
add_action( 'admin_notices', 'my_callback' );Điểm dễ vấp
Nó kích hoạt trên MỌI màn hình admin. Một plugin hiển thị thông báo "cảm ơn bạn đã cài đặt!" vô điều kiện trên tất cả các màn hình là kiểu làm bị ghét nhất trong admin WordPress. Hãy đặt điều kiện cho nó, và cho phép đóng thông báo.
Chạy bất cứ khi nào một bài viết được tạo hoặc cập nhật. Nơi thường dùng để lưu dữ liệu của meta box.
Kích hoạt
Sau khi một bài viết được ghi vào cơ sở dữ liệu.
Chữ ký
add_action( 'save_post', 'my_callback', 10, 3 ); // receives $post_id, $post, $updateVí dụ
add_action( 'save_post', function ( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( wp_is_post_revision( $post_id ) ) return;
if ( ! current_user_can( 'edit_post', $post_id ) ) return;
// ... now it is safe to save
}, 10, 1 );Điểm dễ vấp
Nó kích hoạt cả khi TỰ ĐỘNG LƯU (autosave) và với các BẢN SỬA ĐỔI (revision) chứ không chỉ khi lưu thật. Nếu thiếu ba điều kiện bảo vệ ở trên, dữ liệu meta của bạn sẽ bị ghi đè bằng giá trị rỗng mỗi lần trình soạn thảo tự động lưu — một lỗi trông như dữ liệu ngẫu nhiên biến mất.
Đăng ký các meta box trên màn hình chỉnh sửa bài viết.
Kích hoạt
Khi màn hình chỉnh sửa được dựng.
Chữ ký
add_action( 'add_meta_boxes', 'my_callback', 10, 2 ); // receives $post_type, $postĐiểm dễ vấp
Các meta box cổ điển không xuất hiện trong trình soạn thảo block trừ khi trình soạn thảo lùi về chế độ tương thích. Với một website thuần trình soạn thảo block, hãy đăng ký post meta bằng show_in_rest và dựng một panel ở thanh bên để thay thế.
Chạy sau khi một người dùng đăng nhập thành công.
Kích hoạt
Khi xác thực thành công.
Chữ ký
add_action( 'wp_login', 'my_callback', 10, 2 ); // receives $user_login, WP_User $userChạy ngay sau khi một người dùng mới được tạo.
Kích hoạt
Khi đăng ký.
Chữ ký
add_action( 'user_register', 'my_callback', 10, 2 ); // receives $user_id, $userdataLọc kết quả xác thực. Trả về một WP_Error để chặn một lượt đăng nhập.
Kích hoạt
Trong lúc thực hiện đăng nhập.
Chữ ký
add_filter( 'authenticate', 'my_callback', 30, 3 ); // receives $user, $username, $passwordĐiểm dễ vấp
Độ ưu tiên rất quan trọng ở đây. Core của WordPress gắn các kiểm tra của nó ở độ ưu tiên 20 và 30 — gắn quá sớm thì bạn chạy trước cả khi mật khẩu được kiểm tra.
Đăng ký các route và trường (field) của REST.
Kích hoạt
Khi REST API khởi tạo.
Chữ ký
add_action( 'rest_api_init', 'my_callback' );Ví dụ
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/items', array(
'methods' => 'GET',
'callback' => 'my_get_items',
'permission_callback' => '__return_true', // BE DELIBERATE ABOUT THIS
) );
} );Điểm dễ vấp
permission_callback là BẮT BUỘC — kể từ WP 5.5, bỏ qua nó sẽ sinh ra một cảnh báo, còn đặt nó thành __return_true khiến endpoint trở nên hoàn toàn công khai. Điều đó ổn với dữ liệu thực sự công khai và là một lỗ hổng nghiêm trọng với mọi thứ khác. Hãy quyết định, đừng để mặc định.
Thêm một khoảng lặp lại tùy chỉnh cho wp_schedule_event().
Kích hoạt
Khi WordPress dựng danh sách các lịch có sẵn.
Chữ ký
add_filter( 'cron_schedules', 'my_callback' ); // receives $schedulesVí dụ
add_filter( 'cron_schedules', function ( $schedules ) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // seconds
'display' => __( 'Every 5 minutes', 'textdomain' ),
);
return $schedules;
} );Điểm dễ vấp
WP-Cron không phải là cron thật. Nó chỉ kích hoạt khi có người truy cập website, nên một website ít lượt truy cập sẽ không chạy lịch năm phút một lần đúng mỗi năm phút. Nếu thời điểm thực sự quan trọng, hãy tắt WP-Cron (DISABLE_WP_CRON) và gọi wp-cron.php từ một cron hệ thống thật.
Chạy ngay sau khi một bình luận được lưu.
Kích hoạt
Khi bình luận được gửi.
Chữ ký
add_action( 'comment_post', 'my_callback', 10, 3 ); // receives $comment_id, $approved, $commentdataLọc dữ liệu bình luận trước khi lưu. Dùng để kiểm tra spam và xác thực.
Kích hoạt
Trước khi bình luận được ghi.
Chữ ký
add_filter( 'preprocess_comment', 'my_callback' ); // receives $commentdataĐiểm dễ vấp
Để từ chối một bình luận ở đây, hãy gọi wp_die() kèm một thông báo — trả về false không chặn được nó.
Chạy trên trang xác nhận đã nhận đơn hàng sau khi thanh toán thành công.
Kích hoạt
Khi khách hàng đến trang cảm ơn.
Chữ ký
add_action( 'woocommerce_thankyou', 'my_callback' ); // receives $order_idĐiểm dễ vấp
Đây KHÔNG phải là nơi đáng tin cậy để kích hoạt việc xử lý đơn hàng. Nó chỉ chạy nếu khách hàng thực sự đến được trang cảm ơn — nếu họ đóng tab sau khi thanh toán, nó sẽ không bao giờ chạy. Hãy dùng woocommerce_payment_complete hoặc một hook chuyển trạng thái đơn hàng cho bất cứ việc gì bắt buộc phải xảy ra.
Xuất markup ngay trước nút thêm vào giỏ trên một trang sản phẩm.
Kích hoạt
Trong lúc trang sản phẩm được kết xuất.
Chữ ký
add_action( 'woocommerce_before_add_to_cart_button', 'my_callback' );Thêm, bớt hoặc sắp xếp lại các trường trên trang thanh toán cổ điển.
Kích hoạt
Khi biểu mẫu thanh toán được dựng.
Chữ ký
add_filter( 'woocommerce_checkout_fields', 'my_callback' ); // receives $fieldsĐiểm dễ vấp
Việc này chỉ ảnh hưởng đến trang thanh toán CỔ ĐIỂN (dạng shortcode). Trang thanh toán mới dựa trên block hoàn toàn bỏ qua nó và được tùy biến thông qua Slot & Fill trong JavaScript. Điều này khiến gần như ai cũng vấp phải trong lần đầu tiên.