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