wpavatar/includes/compatibility.php
2025-05-19 03:26:25 +08:00

106 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* WPAvatar 兼容性修复
*
* 用于处理与 WP-China-Yes 插件的兼容性问题
*/
namespace WPAvatar;
class Compatibility {
/**
* 初始化兼容性修复
*/
public static function init() {
// 在所有插件加载后、主题初始化前运行
add_action('after_setup_theme', [__CLASS__, 'handle_wp_china_yes_compatibility'], 5);
}
/**
* 处理与 WP-China-Yes 插件的兼容性
*/
public static function handle_wp_china_yes_compatibility() {
// 检查 WP-China-Yes 插件是否激活
if (self::is_wp_china_yes_active()) {
// 移除 WP-China-Yes 的头像替换过滤器
self::remove_wp_china_yes_filters();
// 重新初始化 WPAvatar 的 Cravatar 功能,使用更高的优先级
self::reinitialize_wpavatar_filters();
// 可选:添加管理界面通知
if (is_admin()) {
add_action('admin_notices', [__CLASS__, 'admin_compatibility_notice']);
}
}
}
/**
* 检查 WP-China-Yes 插件是否激活
*/
private static function is_wp_china_yes_active() {
return class_exists('WenPai\\ChinaYes\\Service\\Super') ||
defined('CHINA_YES_VERSION') ||
function_exists('WenPai\\ChinaYes\\get_settings');
}
/**
* 移除 WP-China-Yes 的头像替换过滤器
*/
private static function remove_wp_china_yes_filters() {
// 找到可能的 Super 类实例
global $wp_filter;
$filters_to_check = [
'get_avatar_url',
'um_user_avatar_url_filter',
'bp_gravatar_url',
'user_profile_picture_description',
'avatar_defaults'
];
foreach ($filters_to_check as $filter_name) {
if (isset($wp_filter[$filter_name])) {
foreach ($wp_filter[$filter_name]->callbacks as $priority => $callbacks) {
foreach ($callbacks as $callback_key => $callback_data) {
if (is_array($callback_data['function']) &&
is_object($callback_data['function'][0]) &&
get_class($callback_data['function'][0]) === 'WenPai\\ChinaYes\\Service\\Super') {
$method_name = $callback_data['function'][1];
remove_filter($filter_name, [$callback_data['function'][0], $method_name], $priority);
}
}
}
}
}
}
/**
* 重新初始化 WPAvatar 的 Cravatar 过滤器,使用更高的优先级
*/
private static function reinitialize_wpavatar_filters() {
if (wpavatar_get_option('wpavatar_enable_cravatar', true)) {
// 使用高优先级再次添加过滤器
add_filter('um_user_avatar_url_filter', ['\WPAvatar\Cravatar', 'replace_avatar_url'], 9999);
add_filter('bp_gravatar_url', ['\WPAvatar\Cravatar', 'replace_avatar_url'], 9999);
add_filter('user_profile_picture_description', ['\WPAvatar\Cravatar', 'modify_profile_picture_description'], 9999);
// 确保 get_avatar_url 过滤器的优先级高于其他插件
remove_filter('get_avatar_url', ['\WPAvatar\Cravatar', 'get_avatar_url'], 999);
add_filter('get_avatar_url', ['\WPAvatar\Cravatar', 'get_avatar_url'], 9999, 2);
}
}
/**
* 管理界面兼容性通知
*/
public static function admin_compatibility_notice() {
$screen = get_current_screen();
if ($screen && $screen->id === 'settings_page_wpavatar-settings') {
echo '<div class="notice notice-info is-dismissible">';
echo '<p>检测到文派叶子WPCY.COM插件WPAvatar 生态组件兼容性补丁已生效,确保文派头像设置优先。</p>';
echo '</div>';
}
}
}