2016-07-26 5 views
0

До тех пор, пока конечные точки API REST не будут добавлены в ядро ​​WordPress. Мне нужен способ программного обновления параметров, которые API-интерфейс XML-RPC не включает по умолчанию. Похоже, что параметры будут добавлены в файле, «сор-включает/класс-WP-XmlRpc-server.php» с помощью следующего метода:Как добавить белый список дополнительных параметров для API XML-RPC?

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, home_url и WPCF7 варианта в моем файле functions.php (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 ?

ответ

-1

Только что наткнулся на эту проблему сам и абсолютно нигде не упоминал, как это сделать онлайн. Ваш пост, указывающий, что параметры whitelisted определены в $ 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')); 
?> 

Существует много другого кода в плагин, потому что я также добавлять методы XMLRPC, но это должно быть все, что вам нужно.

0

Если вы хотите добавить поддержку варианта чтения/записи с помощью 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; 
    }); 

Если вы хотите, чтобы иметь возможность обновите опцию blog_url через XML-RPC, напишите следующее:

add_filter('xmlrpc_blog_options', function($blog_options) 
    { 
     $blog_options['blog_url']['readonly'] = false; 
     return $blog_options; 
    }); 
Смежные вопросы