2016-07-26 6 views
0

REST APIエンドポイントがWordPressコアに追加されるまで、XML-RPC APIにデフォルトで含まれていないオプションをプログラムで更新する方法が必要です。オプションがファイルに追加されているようにそれは次のような方法を経由して、「WP-含ま/クラス-WP-XMLRPC-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); 
} 

ここで更新できるようにするオプションを編集することで私の失敗した試みです私のfunctions.phpファイル内BLOG_URL、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を介してそれらを取得し、更新することができるように、より多くのオプションをホワイトリストに登録するための正しい方法は何?

答えて

-1

私はこの問題を自分自身に遭遇し、オンラインで行う方法についてはまったく言及していません。ホワイトリストに載っているオプションが$ 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

あなたのfunctions.phpに次のコードを追加し、名前NAME_OF_SOME_OPTIONとオプションのXML-RPC経由での読み出し/書き込みオプションのサポートを追加したい場合は、次の

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; 
    }); 
関連する問題