Intereting Posts
Аргументы аргумента WordPress options_type Как вызвать запрос $ _GET на странице плагина администратора? Пользовательское поле Singleton (Meta Box) Получить текущий вход в систему пользователя под 3.1, re: удалить «Howdy» Как создать цикл для создания слайдов на основе нескольких категорий с помощью Coda Slider Регистрационная форма, не регистрирующая имя и фамилию Разрешить просмотр экрана редактирования для типа сообщения, но не изменять / сохранять / публиковать / обновлять get_userdata по имени пользователя удалять пункты меню, если пользователь не может читать Правильный подход к перемещению полного сайта из одного домена в другой И сохранение виджетов Как добавить настраиваемый URL-адрес в авторские архивы? Сообщение об отправке формы Ajax по пользовательским полям Правильный способ заменить the_content только для страниц, созданных настраиваемым плагином Использование плагина списка категорий WP для динамического отображения категории (PHP) Добавить тег заголовка в изображение в галерее wordpress

Изменение встроенных в XML-RPC WordPress

Короче говоря, я хочу иметь возможность изменять ответ wp.getPost, чтобы также возвращать дополнительные данные, такие как постоянная ссылка. Я думал, что будет так же просто, как просто вызвать ту же функцию, что и код xml-rpc для вызова ( wp_getPost ):

 add_filter( 'xmlrpc_methods', 'nc_xmlrpc_methods' ); function nc_xmlrpc_methods( $methods ) { $methods['wp.getPost'] = 'my_getPost'; return $methods; } function nc_getPost( $args ) { global $wp_xmlrpc_server; $post_obj = $wp_xmlrpc_server->wp_getPost( $args ); $post = $post_obj->to_array(); $post['permalink'] = get_permalink( $post_obj->ID ); return $post; } 

Что касается permalink, я знаю, что getPost возвращает ссылку уже, но это не полезно для черновиков, потому что мне нужно знать будущую ссылку, а не текущий путь.

Я видел этот пост, и он предлагает расширить wp_xmlrpc_server . Я совершенно новый для PHP, поэтому я не совсем уверен, почему это необходимо, если я действительно не строю расширение API. Я что-то пропустил с моим кодом?

Догадаться.

 $post_obj['permalink'] = my_getDraftPermalink( $post_obj['post_id'] ); 

Это правильный синтаксис для получения post_id. Тогда требуется настраиваемая функция, которая получает постоянную ссылку так же, как пользовательский интерфейс панели управления. Панель управления использует get_sample_permalink а не get_permalink , которая вернет путь к проекту, если сообщение не get_permalink .

 function my_getDraftPermalink ( $post_id ) { require_once ABSPATH . '/wp-admin/includes/post.php'; list( $permalink, $postname ) = get_sample_permalink( $post_id ); return str_replace( '%postname%', $postname, $permalink ); }