2014-11-15 1 views
1

Я пытаюсь использовать и extend the WP-API для Wordpress.С чего начать с расширения WP-API

Теперь я могу просто быть глупым, но я действительно не могу понять, с чего начать, хотя я читал ссылку выше и снова. И я не говорю по-кодовому, а сам по себе, где я могу поместить код? В плагине? Если да, то что мне нужно включить, чтобы заставить его работать? Или это достаточно, чтобы расширить класс?

Извините, но я просто обнаружил, что информация на странице слишком мала ... Или я пропустил совершенно структурированный пример сверху донизу?

Здесь он находится на GitHub. Спасибо за любую помощь!

ответ

4

Я не знаю, была ли документация устаревшей или что-то еще, но довольно просто расширить WP-API. Сначала вам понадобится write a plugin.

В плагине, где вы регистрируете крючки, такие как скрипты и стили (functions.php, bootstrap.php), вы добавляете новый крюк для регистрации маршрутов.

add_filter('json_endpoints', array($this, 'registerRoutes')); 

public function registerRoutes($routes){ 
     $editorService = $this->container["editorService"]; 

     $routes['/newsletters'] = array(
      array(array($editorService, 'create'), \WP_JSON_Server::CREATABLE | \WP_JSON_Server::ACCEPT_JSON), 
     ); 
     $routes['/newsletters/(?P<id>\d+)'] = array(
      array(array($editorService, 'get'), \WP_JSON_Server::READABLE) 
     ); 
     return $routes; 
    } 

Если вы читали документацию, вы увидите, что бюллетень является объектом. В этом примере я ввожу сервис и вызываю его в маршрутах. Возможно, вы используете другой подход, и если у вас возникнут трудности в этом вопросе, вам нужно будет выяснить, как структурировать плагин, какие шаблоны применяются, писать или не создавать собственные рамки и т. Д.

Если это так, проверить этот скелет, это отличный подход к MVC https://github.com/iandunn/WordPress-Plugin-Skeleton

Если вы хотите, чтобы вызвать функцию внутри того же класса, вы могли бы сделать:

public function registerRoutes(){ 
    $routes['/newsletters'] = array(
     array(array($this, 'createNewsletter'), \WP_JSON_Server::CREATABLE | \WP_JSON_Server::ACCEPT_JSON) 
    ); 
} 
public function createNewsletter() { 
    $wpdb->prepare(); // etc etc 
}