如何将XML-RPC API的更多选项列入白名单?
问题描述:
在将REST API端点添加到WordPress核心之前,我需要一种以编程方式更新默认情况下XML-RPC API不包含的选项的方法。它看起来像在文件中添加的选项,“WP-包括/类WP-XML-RPC-server.php”通过下面的方法:如何将XML-RPC API的更多选项列入白名单?
public function initialise_blog_option_info() {
global $wp_version;
$this->blog_options = array(
// Read only options
'software_name' => array(
'desc' => __('Software Name'),
'readonly' => true,
'value' => 'WordPress'
),
'software_version' => array(
'desc' => __('Software Version'),
'readonly' => true,
'value' => $wp_version
),
'blog_url' => array(
'desc' => __('WordPress Address (URL)'),
'readonly' => true,
'option' => 'siteurl'
),
'home_url' => array(
'desc' => __('Site Address (URL)'),
'readonly' => true,
'option' => 'home'
),
'login_url' => array(
'desc' => __('Login Address (URL)'),
'readonly' => true,
'value' => wp_login_url()
),
'admin_url' => array(
'desc' => __('The URL to the admin area'),
'readonly' => true,
'value' => get_admin_url()
),
'image_default_link_type' => array(
'desc' => __('Image default link type'),
'readonly' => true,
'option' => 'image_default_link_type'
),
'image_default_size' => array(
'desc' => __('Image default size'),
'readonly' => true,
'option' => 'image_default_size'
),
'image_default_align' => array(
'desc' => __('Image default align'),
'readonly' => true,
'option' => 'image_default_align'
),
'template' => array(
'desc' => __('Template'),
'readonly' => true,
'option' => 'template'
),
'stylesheet' => array(
'desc' => __('Stylesheet'),
'readonly' => true,
'option' => 'stylesheet'
),
'post_thumbnail' => array(
'desc' => __('Post Thumbnail'),
'readonly' => true,
'value' => current_theme_supports('post-thumbnails')
),
// Updatable options
'time_zone' => array(
'desc' => __('Time Zone'),
'readonly' => false,
'option' => 'gmt_offset'
),
'blog_title' => array(
'desc' => __('Site Title'),
'readonly' => false,
'option' => 'blogname'
),
'blog_tagline' => array(
'desc' => __('Site Tagline'),
'readonly' => false,
'option' => 'blogdescription'
),
'date_format' => array(
'desc' => __('Date Format'),
'readonly' => false,
'option' => 'date_format'
),
'time_format' => array(
'desc' => __('Time Format'),
'readonly' => false,
'option' => 'time_format'
),
'users_can_register' => array(
'desc' => __('Allow new users to sign up'),
'readonly' => false,
'option' => 'users_can_register'
),
'thumbnail_size_w' => array(
'desc' => __('Thumbnail Width'),
'readonly' => false,
'option' => 'thumbnail_size_w'
),
'thumbnail_size_h' => array(
'desc' => __('Thumbnail Height'),
'readonly' => false,
'option' => 'thumbnail_size_h'
),
'thumbnail_crop' => array(
'desc' => __('Crop thumbnail to exact dimensions'),
'readonly' => false,
'option' => 'thumbnail_crop'
),
'medium_size_w' => array(
'desc' => __('Medium size image width'),
'readonly' => false,
'option' => 'medium_size_w'
),
'medium_size_h' => array(
'desc' => __('Medium size image height'),
'readonly' => false,
'option' => 'medium_size_h'
),
'medium_large_size_w' => array(
'desc' => __('Medium-Large size image width'),
'readonly' => false,
'option' => 'medium_large_size_w'
),
'medium_large_size_h' => array(
'desc' => __('Medium-Large size image height'),
'readonly' => false,
'option' => 'medium_large_size_h'
),
'large_size_w' => array(
'desc' => __('Large size image width'),
'readonly' => false,
'option' => 'large_size_w'
),
'large_size_h' => array(
'desc' => __('Large size image height'),
'readonly' => false,
'option' => 'large_size_h'
),
'default_comment_status' => array(
'desc' => __('Allow people to post comments on new articles'),
'readonly' => false,
'option' => 'default_comment_status'
),
'default_ping_status' => array(
'desc' => __('Allow link notifications from other blogs (pingbacks and trackbacks) on new articles'),
'readonly' => false,
'option' => 'default_ping_status'
)
);
/**
* Filter the XML-RPC blog options property.
*
* @since 2.6.0
*
* @param array $blog_options An array of XML-RPC blog options.
*/
$this->blog_options = apply_filters('xmlrpc_blog_options', $this->blog_options);
}
这里是我的编辑选项失败的尝试,让更新BLOG_URL,在我functions.php文件HOME_URL和WPCF7选项(SITE_URL和HOME_URL在原有功能是只读):
public function blog_option_info() {
global $wp_version;
$this->blog_options = array(
// Updatable options
'blog_url' => array(
'desc' => __('WordPress Address (URL)'),
'readonly' => false,
'option' => 'siteurl'
),
'home_url' => array(
'desc' => __('Site Address (URL)'),
'readonly' => false,
'option' => 'home'
),
'wpcf7' => array(
'desc' => __('Contact Form 7 Options'),
'readonly' => false,
'option' => 'wpcf7'
),
);
$this->blog_options = apply_filters('xmlrpc_blog_options', $this->blog_options);
}
什么是白名单更多选择正确的方式,使自己能得到并通过API更新它们?
答
自己刚刚遇到这个问题,绝对没有提及如何在网上做。您的文章指出,列入白名单的选项在$ this-> blog_options中有所帮助,尽管如此谢谢!下面是代码(这是一个自定义的插件):
<?php
include_once(ABSPATH . WPINC . '/class-IXR.php');
include_once(ABSPATH . WPINC . '/class-wp-xmlrpc-server.php');
class LSEOP_XmlRpc extends wp_xmlrpc_server {
private $version = 1.0;
public function __construct() {
parent::__construct();
$this->blog_options['permalink_structure'] = [
'desc' => __('Permalink Structure'),
'readonly' => false,
'option' => 'permalink_structure'
];
}
public static function lseop_getName() {
return __CLASS__;
}
}
add_filter('wp_xmlrpc_server_class', array('LSEOP_XmlRpc', 'lseop_getName'));
?>
有一个在插件很多其他的代码,因为我还加入了XML-RPC方法,但应该是你需要的一切。
答
如果您想通过XML-RPC添加读/写选项支持与名称NAME_OF_SOME_OPTION选项,下面的代码添加到您的functions.php:
add_filter('xmlrpc_blog_options', function($blog_options)
{
$blog_options['NAME_OF_SOME_OPTION'] = array(
'desc' => 'DESCRITPTION OF THE OPTION',
'readonly' => false,
'option' => 'NAME_OF_SOME_OPTION'
);
return $blog_options;
});
如果你希望能够到通过XML-RPC更新选项blog_url,写入以下内容:
add_filter('xmlrpc_blog_options', function($blog_options)
{
$blog_options['blog_url']['readonly'] = false;
return $blog_options;
});