2016-07-13 86 views
0

我當前嘗試將新選項添加​​到Rename wp-login.php,因爲它幾乎沒有更新。店主也允許我添加新的選項。PHP類和WordPress的問題

該插件功能允許您將/wp-admin/wp-login.php重命名爲不同的位置。我幾乎沒有任何關於PHP類的知識,並且你猜對了,整個插件基本上是用PHP類創建的。

我所試圖做的事:

  1. 當該字段爲空,恢復一切/wp-admin/。基本上禁用選項;我明白了,但是當該字段留空並保存時,它會保存之前輸入的值。這是一個問題;當它保存爲空時,它應該是空的。

  2. 目前該字段位於設置菜單的「固定鏈接」部分,但我想將該選項放在自定義頁面中。

另外,這個插件如何保存字段的值?我找不到任何東西,甚至沒有一個register_setting函數。

當我說「場」,我說的這個領域:<input id="rwl-page-input" type="text" name="rwl_page" value="' . $this->new_login_slug() . '">


代碼如下:

<?php 
if (defined('ABSPATH') && ! class_exists('Rename_WP_Login')) { 

    class Rename_WP_Login { 
     private $wp_login_php; 

     private function basename() { 
      return plugin_basename(__FILE__); 
     } 

     private function path() { 
      return trailingslashit(dirname(__FILE__)); 
     } 

     private function use_trailing_slashes() { 
      return '/' === substr(get_option('permalink_structure'), -1, 1); 
     } 

     private function user_trailingslashit($string) { 
      return $this->use_trailing_slashes() ? trailingslashit($string) : untrailingslashit($string); 
     } 

     private function wp_template_loader() { 
      global $pagenow; 

      $pagenow = 'index.php'; 

      if (! defined('WP_USE_THEMES')) { 
       define('WP_USE_THEMES', true); 
      } 

      wp(); 

      if ($_SERVER['REQUEST_URI'] === $this->user_trailingslashit(str_repeat('-/', 10))) { 
       $_SERVER['REQUEST_URI'] = $this->user_trailingslashit('/wp-login-php/'); 
      } 

      require_once ABSPATH . WPINC . '/template-loader.php'; 

      die; 
     } 

     private function new_login_slug() { 
      if (
       ($slug = get_option('rwl_page')) || (
        is_multisite() && 
        is_plugin_active_for_network($this->basename()) && 
        ($slug = get_site_option('rwl_page', 'login')) 
       ) || 
       ($slug = 'login') 
      ) { 
       return $slug; 
      } 
     } 

     public function new_login_url($scheme = null) { 
      if (get_option('permalink_structure')) { 
       return $this->user_trailingslashit(home_url('/', $scheme) . $this->new_login_slug()); 
      } else { 
       return home_url('/', $scheme) . '?' . $this->new_login_slug(); 
      } 
     } 

     public function __construct() { 
      register_activation_hook($this->basename(), array($this, 'activate')); 
      register_uninstall_hook($this->basename(), array('Rename_WP_Login', 'uninstall')); 

      add_action('admin_init', array($this, 'admin_init')); 
      add_action('admin_notices', array($this, 'admin_notices')); 
      add_action('network_admin_notices', array($this, 'admin_notices')); 

      if (is_multisite() && ! function_exists('is_plugin_active_for_network')) { 
       require_once ABSPATH . '/wp-admin/includes/plugin.php'; 
      } 

      add_filter('plugin_action_links_' . $this->basename(), array($this, 'plugin_action_links')); 

      if (is_multisite() && is_plugin_active_for_network($this->basename())) { 
       add_filter('network_admin_plugin_action_links_' . $this->basename(), array($this, 'plugin_action_links')); 

       add_action('wpmu_options', array($this, 'wpmu_options')); 
       add_action('update_wpmu_options', array($this, 'update_wpmu_options')); 
      } 

      add_action('plugins_loaded', array($this, 'plugins_loaded'), 1); 
      add_action('wp_loaded', array($this, 'wp_loaded')); 

      add_filter('site_url', array($this, 'site_url'), 10, 4); 
      add_filter('network_site_url', array($this, 'network_site_url'), 10, 3); 
      add_filter('wp_redirect', array($this, 'wp_redirect'), 10, 2); 

      add_filter('site_option_welcome_email', array($this, 'welcome_email')); 

      remove_action('template_redirect', 'wp_redirect_admin_locations', 1000); 
     } 

     public function activate() { 
      add_option('rwl_redirect', '1'); 
     } 

     public static function uninstall() { 
      global $wpdb; 

      if (is_multisite()) { 
       $blogs = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs}"); 

       if ($blogs) { 
        foreach ($blogs as $blog) { 
         switch_to_blog($blog); 
         delete_option('rwl_page'); 
        } 

        restore_current_blog(); 
       } 

       delete_site_option('rwl_page'); 
      } else { 
       delete_option('rwl_page'); 
      } 
     } 

     public function wpmu_options() { 
      echo (
       '<h3>' . 
        _x('Rename wp-login.php', 'Text string for settings page', 'rename-wp-login') . 
       '</h3>' . 
       '<p>' . 
        __('This option allows you to set a networkwide default, which can be overridden by individual sites. Simply go to to the site’s permalink settings to change the url.', 'rename-wp-login') . 
       '</p>' . 
       '<table class="form-table">' . 
        '<tr valign="top">' . 
         '<th scope="row">' . 
          __('Networkwide default', 'rename-wp-login') . 
         '</th>' . 
         '<td>' . 
          '<input id="rwl-page-input" type="text" name="rwl_page" value="' . get_site_option('rwl_page', 'login') . '">' . 
         '</td>' . 
        '</tr>' . 
       '</table>' 
      ); 
     } 

     public function update_wpmu_options() { 
      if (
       ($rwl_page = sanitize_title_with_dashes($_POST['rwl_page'])) && 
       strpos($rwl_page, 'wp-login') === false && 
       ! in_array($rwl_page, $this->forbidden_slugs()) 
      ) { 
       update_site_option('rwl_page', $rwl_page); 
      } 
     } 

     public function admin_init() { 
      global $pagenow; 

      add_settings_section(
       'rename-wp-login-section', 
       _x('Rename wp-login.php', 'Text string for settings page', 'rename-wp-login'), 
       array($this, 'rwl_section_desc'), 
       'permalink' 
      ); 

      add_settings_field(
       'rwl-page', 
       '<label for="rwl-page">' . __('Login url', 'rename-wp-login') . '</label>', 
       array($this, 'rwl_page_input'), 
       'permalink', 
       'rename-wp-login-section' 
      ); 

      if (isset($_POST['rwl_page']) && $pagenow === 'options-permalink.php') { 
       if (
        ($rwl_page = sanitize_title_with_dashes($_POST['rwl_page'])) && 
        strpos($rwl_page, 'wp-login') === false && 
        ! in_array($rwl_page, $this->forbidden_slugs()) 
       ) { 
        if (is_multisite() && $rwl_page === get_site_option('rwl_page', 'login')) { 
         delete_option('rwl_page'); 
        } else { 
         update_option('rwl_page', $rwl_page); 
        } 
       } 
      } 

      if (get_option('rwl_redirect')) { 
       delete_option('rwl_redirect'); 

       if (is_multisite() && is_super_admin() && is_plugin_active_for_network($this->basename())) { 
        $redirect = network_admin_url('settings.php#rwl-page-input'); 
       } else { 
        $redirect = admin_url('options-permalink.php#rwl-page-input'); 
       } 

       wp_safe_redirect($redirect); 

       die; 
      } 
     } 

     public function rwl_section_desc() { 
      if (is_multisite() && is_super_admin() && is_plugin_active_for_network($this->basename())) { 
       echo (
        '<p>' . 
         sprintf(
          __('To set a networkwide default, go to %s.', 'rename-wp-login'), 
          '<a href="' . esc_url(network_admin_url('settings.php#rwl-page-input')) . '">' . 
           __('Network Settings', 'rename-wp-login') . 
          '</a>' 
         ) . 
        '</p>' 
       ); 
      } 
     } 

     public function rwl_page_input() { 
      if (get_option('permalink_structure')) { 
       echo '<code>' . trailingslashit(home_url()) . '</code> <input id="rwl-page-input" type="text" name="rwl_page" value="' . $this->new_login_slug() . '">' . ($this->use_trailing_slashes() ? ' <code>/</code>' : ''); 
      } else { 
       echo '<code>' . trailingslashit(home_url()) . '?</code> <input id="rwl-page-input" type="text" name="rwl_page" value="' . $this->new_login_slug() . '">'; 
      } 
     } 

     public function admin_notices() { 
      global $pagenow; 

      if (! is_network_admin() && $pagenow === 'options-permalink.php' && isset($_GET['settings-updated'])) { 
       echo '<div class="notice notice-success is-dismissible"><p>' . sprintf(__('Your login page is now here: %s. Bookmark this page!', 'rename-wp-login'), '<strong><a href="' . $this->new_login_url() . '">' . $this->new_login_url() . '</a></strong>') . '</p></div>'; 
      } 
     } 

     public function plugin_action_links($links) { 
      if (is_network_admin() && is_plugin_active_for_network($this->basename())) { 
       array_unshift($links, 
        '<a href="' . esc_url(network_admin_url('settings.php#rwl-page-input')) . '">' . 
         __('Settings', 'rename-wp-login') . 
        '</a>' 
       ); 
      } elseif (! is_network_admin()) { 
       array_unshift($links, 
        '<a href="' . esc_url(admin_url('options-permalink.php#rwl-page-input')) . '">' . 
         __('Settings', 'rename-wp-login') . 
        '</a>' 
       ); 
      } 

      return $links; 
     } 

     public function plugins_loaded() { 
      global $pagenow; 

      load_plugin_textdomain('rename-wp-login'); 

      if (
       ! is_multisite() && (
        strpos($_SERVER['REQUEST_URI'], 'wp-signup') !== false || 
        strpos($_SERVER['REQUEST_URI'], 'wp-activate') !== false 
       ) 
      ) { 
       wp_die(__('This feature is not enabled.', 'rename-wp-login'), '', array('response' => 403)); 
      } 

      $request = parse_url($_SERVER['REQUEST_URI']); 

      if ((
        strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false || 
        untrailingslashit($request['path']) === site_url('wp-login', 'relative') 
       ) && 
       ! is_admin() 
      ) { 
       $this->wp_login_php = true; 
       $_SERVER['REQUEST_URI'] = $this->user_trailingslashit('/' . str_repeat('-/', 10)); 
       $pagenow = 'index.php'; 
      } elseif (
       untrailingslashit($request['path']) === home_url($this->new_login_slug(), 'relative') || (
        ! get_option('permalink_structure') && 
        isset($_GET[$this->new_login_slug()]) && 
        empty($_GET[$this->new_login_slug()]) 
      )) { 
       $pagenow = 'wp-login.php'; 
      } 
     } 

     public function wp_loaded() { 
      global $pagenow; 

      if (is_admin() && ! is_user_logged_in() && ! defined('DOING_AJAX')) { 
       wp_die(__('You must log in to access the admin area.', 'rename-wp-login'), '', array('response' => 403)); 
      } 

      $request = parse_url($_SERVER['REQUEST_URI']); 

      if (
       $pagenow === 'wp-login.php' && 
       $request['path'] !== $this->user_trailingslashit($request['path']) && 
       get_option('permalink_structure') 
      ) { 
       wp_safe_redirect($this->user_trailingslashit($this->new_login_url()) . (! empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '')); 
       die; 
      } elseif ($this->wp_login_php) { 
       if (
        ($referer = wp_get_referer()) && 
        strpos($referer, 'wp-activate.php') !== false && 
        ($referer = parse_url($referer)) && 
        ! empty($referer['query']) 
       ) { 
        parse_str($referer['query'], $referer); 

        if (
         ! empty($referer['key']) && 
         ($result = wpmu_activate_signup($referer['key'])) && 
         is_wp_error($result) && (
          $result->get_error_code() === 'already_active' || 
          $result->get_error_code() === 'blog_taken' 
        )) { 
         wp_safe_redirect($this->new_login_url() . (! empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '')); 
         die; 
        } 
       } 

       $this->wp_template_loader(); 
      } elseif ($pagenow === 'wp-login.php') { 
       global $error, $interim_login, $action, $user_login; 

       @require_once ABSPATH . 'wp-login.php'; 

       die; 
      } 
     } 

     public function site_url($url, $path, $scheme, $blog_id) { 
      return $this->filter_wp_login_php($url, $scheme); 
     } 

     public function network_site_url($url, $path, $scheme) { 
      return $this->filter_wp_login_php($url, $scheme); 
     } 

     public function wp_redirect($location, $status) { 
      return $this->filter_wp_login_php($location); 
     } 

     public function filter_wp_login_php($url, $scheme = null) { 
      if (strpos($url, 'wp-login.php') !== false) { 
       if (is_ssl()) { 
        $scheme = 'https'; 
       } 

       $args = explode('?', $url); 

       if (isset($args[1])) { 
        parse_str($args[1], $args); 
        $url = add_query_arg($args, $this->new_login_url($scheme)); 
       } else { 
        $url = $this->new_login_url($scheme); 
       } 
      } 

      return $url; 
     } 

     public function welcome_email($value) { 
      return str_replace('wp-login.php', trailingslashit(get_site_option('rwl_page', 'login')), $value); 
     } 

     public function forbidden_slugs() { 
      $wp = new WP; 
      return array_merge($wp->public_query_vars, $wp->private_query_vars); 
     } 
    } 

    new Rename_WP_Login; 
} 

我真的,真的,如果有人能理解女人幫我解決這個問題!

回答

1

第一

此外,請問這個插件保存字段的值?我找不到任何東西,甚至沒有找到register_setting函數。

public function update_wpmu_options() { 
    if (
     ($rwl_page = sanitize_title_with_dashes($_POST['rwl_page'])) && 
    strpos($rwl_page, 'wp-login') === false && 
     ! in_array($rwl_page, $this->forbidden_slugs()) 
    ) { 
     update_site_option('rwl_page', $rwl_page); 
    } 
} 

你可以讀到更多在:

這個插件通過此功能保存價值update_site_option

在admin_init功能已經

add_settings_field(
    'rwl-page', 
    '<label for="rwl-page">' . __('Login url', 'rename-wp-login') . '</label>', 
    array($this, 'rwl_page_input'), 
    'permalink', 
    'rename-wp-login-section' 
); 

此功能將得到的值保存。如果你讓字段爲空,這個值不會被更新。這就是爲什麼你有它的舊價值。 如果你想恢復所有舊版本,你可以刪除這個插件。

希望它可以幫助。 我只是編碼器試過這個插件不開發它。 xD

+0

幫助很大,謝謝! –