如何在WordPress的register_activation_hook中检查变量值
调试register_activation_hook内代码的实用方法
因为WordPress插件激活钩子是后台静默执行的,echo、alert这类前端输出方式根本没用,Query Monitor也因为激活流程的特殊性抓不到这个阶段的信息,试试这几个靠谱的调试方案:
1. 写入调试日志
这是最稳妥的方式,直接把变量内容写到日志文件里。
首先在wp-config.php里开启调试日志:
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); // 避免前端显示错误
然后在你的激活钩子代码里加入日志写入逻辑:
$data_store = \WC_Data_Store::load('webhook'); $all_hooks = $data_store->search_webhooks( array( 'limit' => 10, ) ); // 写入查询到的所有webhook数据 error_log( '所有Webhook数据:' . print_r( $all_hooks, true ) ); $_items = array_map('wc_get_webhook', $all_hooks->webhooks); foreach ($_items as $webhook) { $name = $webhook->get_name(); // 写入单个webhook的名称 error_log( '当前Webhook名称:' . $name ); if ($name === "Test Hook") { $webhook->set_status('active'); $webhook->save(); // 写入操作日志 error_log( '已激活Test Hook' ); } }
激活插件后,去wp-content/debug.log文件里就能看到所有调试内容了。
2. 重定向传递调试信息
利用激活后跳回插件列表页的特性,把调试数据通过URL参数传递过去显示:
在激活钩子代码末尾加入重定向逻辑:
// 把需要调试的变量转成URL安全的字符串 $debug_content = urlencode( print_r( $_items, true ) ); // 跳回插件列表页并带上调试参数 wp_redirect( admin_url( 'plugins.php?activation_debug=' . $debug_content ) ); exit;
然后在插件主文件里加一段临时代码,用来显示调试信息:
add_action( 'admin_notices', function() { if ( isset( $_GET['activation_debug'] ) ) { echo '<div class="notice notice-info"><pre>' . urldecode( $_GET['activation_debug'] ) . '</pre></div>'; // 只显示一次,避免每次刷新都出现 remove_action( current_action(), __FUNCTION__ ); } } );
激活插件后,插件列表页会弹出包含调试数据的通知框,调试完记得删掉这段代码。
3. 临时存储到数据库
把调试数据存到WordPress的选项表里,之后在后台查看:
在激活钩子里加入存储逻辑:
// 把webhook数据存到options表 update_option( 'temp_activation_debug', print_r( $_items, true ) );
然后加一个临时的后台页面用来读取数据:
add_action( 'admin_menu', function() { add_submenu_page( 'tools.php', '激活调试数据', '激活调试数据', 'manage_options', 'activation-debug-page', function() { $debug_data = get_option( 'temp_activation_debug' ); if ( $debug_data ) { echo '<pre>' . $debug_data . '</pre>'; // 看完就删掉数据,避免占用空间 delete_option( 'temp_activation_debug' ); } else { echo '<p>没有调试数据</p>'; } } ); } );
激活插件后,去后台「工具」菜单下找到「激活调试数据」页面就能看到内容,调试完成后记得删除这段代码。
内容的提问来源于stack exchange,提问作者Mustafa Yusuf
相关产品推荐
相关产品推荐

