PHP类和WordPress问题 [英] Issues with PHP classes and WordPress

查看:45
本文介绍了PHP类和WordPress问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试将新选项添加​​到重命名wp -login.php ,因为它几乎没有更新。所有者还允许我向其中添加新选项。

I am currently trying to add new options to the Rename wp-login.php because it is barely being updated. The owner also allowed me to add new options to it.

插件功能允许您重命名 / wp-admin / wp-login.php 移到其他位置。我对PHP类几乎一无所知,而且您猜到了,整个插件基本上都是使用PHP类创建的。

The plugin functionality allows you to 'rename' /wp-admin/ and wp-login.php to a different location. I barely have any knowledge about PHP classes and, you guessed it, the whole plugin is basically created using PHP classes.

我要做什么:


  1. 该字段为空时,将所有内容恢复为 / wp-admin / 。基本上是一个禁用选项;我已经知道了,但是当该字段留空并保存时,它会保存之前输入的值。那是个问题;当您将其保存为空白时,它应该为空。

  1. When the field is empty, revert everything to /wp-admin/. Basically a disable option; I've got that, but when the field is left blank and you'll save it, it saves the value which was entered before. That's a problem; It should be empty when you save it blank.

当前该字段位于设置菜单的固定链接部分,但我想放置该选项在自定义页面中。

Currently the field is in the "Permalinks" section of the settings menu, but I want to put the option in a custom page.

此外,此插件如何保存字段的值?我什么也找不到,甚至没有 register_setting 函数。

Also, how does this plugin saves the value of the field? I can't find anything, not even a register_setting function.

当我说字段时, '我正在谈论此字段:< input id = rwl-page-input type = text name = rwl_page value ='。$ this-> new_login_slug()。 >

When I say 'the field', I'm talking about this field: <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;
}

如果有人可以帮助我,我将非常感激!

I would really, really appreciate it if anyone can help me out with this!

推荐答案

第一个


,此插件如何保存字段的值?我找不到任何东西,甚至找不到register_setting函数。

Also, how does this plugin saves the value of the field? I can't find anything, not even a register_setting function.

此插件通过此函数保存值:

This plugin save the value by this function:

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

You can read more at: update_site_option

在admin_init函数中具有

In admin_init function have

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'
);

此函数将保存值。如果您将该字段留空,则该值将不会更新。这就是为什么您拥有它的旧价值。
如果要全部还原为旧版本,则可以删除此插件。

This function will get value saved. If you let the field blank this value won't be update. That's why you got old value of it. If you want revert all to old version you can remove this plugin.

希望它可以提供帮助。
我只是编码人员,尝试过该插件而不是开发者。 xD

Hope it can help. I'm just coder had try this plugin not dev it. xD

这篇关于PHP类和WordPress问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆