WP-CHINA-YES 启动提醒
';
$html .= '';
$incompatible_plugins = [
'wpjam-basic/wpjam-basic.php',
'cardui-x/cardui-x.php',
'nicetheme-jimu/nc-plugins.php',
];
if ( is_network_admin() ) {
$active_plugins = (array) get_site_option( 'active_sitewide_plugins', array() );
$active_plugins = array_keys( $active_plugins );
} else{
$active_plugins = (array) get_option( 'active_plugins' );
}
$matches = array_intersect( $active_plugins, $incompatible_plugins );
if($matches){
$error = true;
$html .= '检测到您已启用下列提供类似功能的插件,请注意:您必须关闭这些插件中带有的wp代理更新、429错误解决等相关功能,以免系统更新被多次接管而产生错误。
';
foreach ( $matches as $matche ) {
$data = get_plugin_data( WP_PLUGIN_DIR . '/' . $matche );
$html.= '- '.$data["Name"].'
';
}
}
$html .= '
';
if($error) return ['error' => $html];
}
(new WP_CHINA_YES)->init();
class WP_CHINA_YES {
private $wp_china_yes_options = [];
public function init() {
add_filter('pre_http_request', [$this, 'pre_http_request'], 10, 3);
$post_action = isset($_POST['action']) ? sanitize_text_field(trim($_POST['action'])) : ' ';
if (defined('DOING_AJAX') && DOING_AJAX && ! in_array($post_action, ['wpcy_set_config', 'wpcy_get_config'])) {
return;
}
if (is_admin()) {
$this->wp_china_yes_options = get_option('wp_china_yes_options');
if (empty($this->wp_china_yes_options)) {
self::set_wp_option();
}
register_deactivation_hook(__FILE__, [$this, 'wp_china_yes_deactivate']);
add_filter('plugin_row_meta', [$this, 'plugin_row_meta'], 10, 2);
add_filter('plugin_action_links', [$this, 'action_links'], 10, 2);
add_action('admin_menu', [$this, 'admin_menu']);
add_action('init', [$this, 'set_cookie']);
add_action('wp_ajax_wpcy_get_config', [$this, 'get_config']);
add_action('wp_ajax_wpcy_set_config', [$this, 'set_config']);
add_action('wp_dashboard_setup', [$this, 'sponsor_widget']);
}
}
public function wp_china_yes_deactivate() {
delete_option('wp_china_yes_options');
}
public function pre_http_request($preempt, $r, $url) {
if ( ! stristr($url, 'api.wordpress.org') && ! stristr($url, 'downloads.wordpress.org')) {
return false;
}
if ($this->wp_china_yes_options["community"] == 1) {
$api_server = 'api.w.org.ixmu.net';
$download_server = 'd.w.org.ixmu.net';
} else {
$api_server = 'api.w.org.ibadboy.net';
$download_server = 'd.w.org.ibadboy.net';
}
$api_server = $this->wp_china_yes_options["custom_api_server"] ?: $api_server;
$download_server = $this->wp_china_yes_options["custom_download_server"] ?: $download_server;
$url = str_replace('api.wordpress.org', $api_server, $url);
$url = str_replace('downloads.wordpress.org', $download_server, $url);
/**
* 此处原本是复制了官方对外部请求处理的原始代码
* 后经我爱水煮鱼(http://blog.wpjam.com/)提醒,可以直接调用wp_remote_request达成相同目的,由此精简掉100余行代码。
*/
return wp_remote_request($url, $r);
}
public function plugin_row_meta($links, $file) {
$base = plugin_basename(__FILE__);
if ($file == $base) {
$links[] = '集成此插件到自己的产品中';
$links[] = '参与项目发展';
$links[] = 'GitHub';
}
return $links;
}
public function action_links($links, $file) {
if ($file != plugin_basename(__FILE__)) {
return $links;
}
$settings_link = '设置';
array_unshift($links, $settings_link);
return $links;
}
public function admin_menu() {
add_options_page(
'WP-China-Yes',
'WP-China-Yes',
'manage_options',
'wp_china_yes',
[$this, 'settings']
);
}
public function settings() {
$setting_page_url = plugins_url('settings.html', __FILE__) . '?v=2.2.0';
echo <<
EOT;
}
public function set_cookie() {
if ( ! isset($_COOKIE['wp-china-yes']) && current_user_can('manage_options')) {
setcookie('wp-china-yes', json_encode([
'get_config' => wp_create_nonce('wpcy_get_config'),
'set_config' => wp_create_nonce('wpcy_set_config')
], JSON_UNESCAPED_UNICODE), time() + 1209600, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
public function get_config() {
self::success('', $this->wp_china_yes_options);
}
public function set_config() {
if ( ! array_key_exists('community', $_POST) ||
( ! array_key_exists('custom_api_server', $_POST) && ! array_key_exists('custom_download_server', $_POST))) {
self::error('参数错误', - 1);
}
self::set_wp_option(
sanitize_text_field(trim($_POST['community'])),
sanitize_text_field(trim($_POST['custom_api_server'])),
sanitize_text_field(trim($_POST['custom_download_server']))
);
self::success();
}
public function sponsor_widget() {
wp_add_dashboard_widget('sponsor_widget', '《WordPress中国区仓库源建设计划》赞助商', function () {
require_once plugin_dir_path(__FILE__) . 'sponsor_widget.php';
});
}
private static function success($message = '', $data = []) {
header('Content-Type:application/json; charset=utf-8');
echo json_encode([
'code' => 0,
'message' => $message,
'data' => $data
], JSON_UNESCAPED_UNICODE);
exit;
}
private static function error($message = '', $code = - 1) {
header('Content-Type:application/json; charset=utf-8');
header('Status:500');
echo json_encode([
'code' => $code,
'message' => $message
], JSON_UNESCAPED_UNICODE);
exit;
}
private static function set_wp_option($community = 0, $custom_api_server = '', $custom_download_server = '') {
update_option("wp_china_yes_options", [
'community' => (int) $community,
'custom_api_server' => $custom_api_server,
'custom_download_server' => $custom_download_server
]);
}
}