Trong một lớp plugin tôi muốn cung cấp các trường đơn giản cho dữ liệu công khai: email, số điện thoại, Twitter, vv Danh sách có thể được mở rộng.
Xem plugin Dữ liệu liên hệ công khai trên GitHub để biết chi tiết.
Để giữ cho việc sử dụng đơn giản, tôi cũng muốn cung cấp các mã ngắn dễ gõ:
[public_email]
[public_phone]
[public_something]
Sự khác biệt duy nhất là phần thứ hai. Tôi không muốn tranh luận thêm cho các mã ngắn vì chúng dễ bị lỗi. Vì vậy, tôi đăng ký một trình xử lý shortcode cho tất cả các trường trong lớp plugin của mình:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Bây giờ shortcode_handler()
phải biết shortcode nào đã được gọi. Câu hỏi của tôi là: Làm thế nào để tôi làm điều này?
Cách giải quyết hiện tại của tôi là một chức năng khác:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Điều này làm việc cho the_content()
. Nhưng nó không thanh lịch cũng không mạnh mẽ.
Tôi đã đọc wp-includes/shortcodes.php
, nhưng tôi không thể thấy ngay bây giờ làm thế nào để làm điều đó tốt hơn.