First commit
This commit is contained in:
commit
5794f84759
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/vendor
|
||||
composer.phar
|
||||
composer.lock
|
||||
.DS_Store
|
||||
13
.travis.yml
Normal file
13
.travis.yml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
language: php
|
||||
|
||||
php:
|
||||
- 5.4
|
||||
- 5.5
|
||||
- 5.6
|
||||
- hhvm
|
||||
|
||||
before_script:
|
||||
- travis_retry composer self-update
|
||||
- travis_retry composer install --prefer-source --no-interaction --dev
|
||||
|
||||
script: phpunit
|
||||
22
LICENSE
Normal file
22
LICENSE
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Cyber-Duck Ltd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
67
README.md
Normal file
67
README.md
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
# laravel-ap-api
|
||||
Laravel package for the [Wordpress JSON REST API](https://github.com/WP-API/WP-API)
|
||||
|
||||
## Install
|
||||
|
||||
Simply add the following line to your `composer.json` and run install/update:
|
||||
|
||||
"cyberduck/laravel-wp-api": "dev-master"
|
||||
|
||||
## Configuration
|
||||
|
||||
Publish the package config files to configure the location of your Wordpress install:
|
||||
|
||||
php artisan config:publish cyberduck/laravel-wp-api
|
||||
|
||||
You will also need to add the service provider and the facade alias to your `app/config/app.php`:
|
||||
|
||||
```php
|
||||
'providers' => array(
|
||||
'Cyberduck\LaravelWpApi\LaravelWpApiServiceProvider'
|
||||
)
|
||||
|
||||
'aliases' => array(
|
||||
'WpApi' => 'Cyberduck\LaravelWpApi\Facades\WpApi'
|
||||
),
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
The package provides a simplified interface to some of the existing api methods documented [here](http://wp-api.org/).
|
||||
You can either use the Facade provided or inject the WpApi class.
|
||||
|
||||
#### Posts
|
||||
```php
|
||||
WpApi::posts($page);
|
||||
|
||||
```
|
||||
|
||||
#### Post
|
||||
```php
|
||||
WpApi::post($slug);
|
||||
|
||||
```
|
||||
|
||||
#### Categories
|
||||
```php
|
||||
WpApi::categories();
|
||||
|
||||
```
|
||||
|
||||
#### Category posts
|
||||
```php
|
||||
WpApi::category_posts($slug, $page);
|
||||
|
||||
```
|
||||
|
||||
#### Search
|
||||
```php
|
||||
WpApi::search($query, $page);
|
||||
|
||||
```
|
||||
|
||||
#### Archive
|
||||
```php
|
||||
WpApi::archive($year, $month, $page);
|
||||
|
||||
```
|
||||
26
composer.json
Normal file
26
composer.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"name": "cyberduck/laravel-wp-api",
|
||||
"description": "",
|
||||
"keywords": ["laravel", "package", "zoopla"],
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ben Speakman",
|
||||
"email": "ben@cyber-duck.co.uk"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"illuminate/support": "4.2.*|~5.0",
|
||||
"guzzlehttp/guzzle": "~4.0"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/migrations"
|
||||
],
|
||||
"psr-0": {
|
||||
"Cyberduck\\LaravelWpApi\\": "src/"
|
||||
}
|
||||
},
|
||||
"minimum-stability": "stable"
|
||||
}
|
||||
18
phpunit.xml
Normal file
18
phpunit.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertNoticesToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Package Test Suite">
|
||||
<directory suffix=".php">./tests/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
||||
0
public/.gitkeep
Normal file
0
public/.gitkeep
Normal file
57
src/Cyberduck/LaravelWpApi/LaravelWpApiServiceProvider.php
Normal file
57
src/Cyberduck/LaravelWpApi/LaravelWpApiServiceProvider.php
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?php namespace Cyberduck\LaravelWpApi;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class LaravelWpApiServiceProvider extends ServiceProvider {
|
||||
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $defer = false;
|
||||
|
||||
/**
|
||||
* Bootstrap the application events.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->package('cyberduck/laravel-wp-api');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->app->bindShared('wp-api', function ($app) {
|
||||
|
||||
$endpoint = $this->app['config']->get('laravel-wp-api::endpoint');
|
||||
$client = new Client();
|
||||
|
||||
return new WpApi($endpoint, $client);
|
||||
|
||||
});
|
||||
|
||||
$this->app->bind('Cyberduck\LaravelWpApi\WpApi', function($app)
|
||||
{
|
||||
return $app['wp-api'];
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the services provided by the provider.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provides()
|
||||
{
|
||||
return ['wp-api'];
|
||||
}
|
||||
|
||||
}
|
||||
82
src/Cyberduck/LaravelWpApi/WpApi.php
Normal file
82
src/Cyberduck/LaravelWpApi/WpApi.php
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
<?php namespace Cyberduck\LaravelWpApi;
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class WpApi
|
||||
{
|
||||
|
||||
protected $client;
|
||||
|
||||
public function __construct($endpoint, Client $client)
|
||||
{
|
||||
$this->endpoint = $endpoint;
|
||||
$this->client = $client;
|
||||
}
|
||||
|
||||
public function posts($page = null)
|
||||
{
|
||||
return $this->_get('posts', ['page' => $page]);
|
||||
}
|
||||
|
||||
public function post($slug)
|
||||
{
|
||||
return $this->_get('posts', ['filter' => ['name' => $slug]]);
|
||||
}
|
||||
|
||||
public function categories()
|
||||
{
|
||||
return $this->_get('taxonomies/category/terms');
|
||||
}
|
||||
|
||||
public function category_posts($slug, $page = null)
|
||||
{
|
||||
return $this->_get('posts', ['page' => $page, 'filter' => ['category_name' => $slug]]);
|
||||
}
|
||||
|
||||
public function search($query, $page = null)
|
||||
{
|
||||
return $this->_get('posts', ['page' => $page, 'filter' => ['s' => $query]]);
|
||||
}
|
||||
|
||||
public function archive($year, $month, $page = null)
|
||||
{
|
||||
return $this->_get('posts', ['page' => $page, 'filter' => ['year' => $year, 'month' => $month]]);
|
||||
}
|
||||
|
||||
public function _get($method, array $query = array())
|
||||
{
|
||||
|
||||
$client = new Client();
|
||||
|
||||
try {
|
||||
|
||||
$response = $client->get($this->endpoint . '/wp-json/' . $method, ['query' => $query]);
|
||||
|
||||
$return = [
|
||||
'results' => $response->json(),
|
||||
'total' => $response->getHeader('X-WP-Total'),
|
||||
'pages' => $response->getHeader('X-WP-TotalPages')
|
||||
];
|
||||
|
||||
} catch (\GuzzleHttp\Exception\TransferException $e) {
|
||||
|
||||
$error['message'] = $e->getMessage();
|
||||
|
||||
if ($e->getResponse()) {
|
||||
$error['code'] = $e->getResponse()->getStatusCode();
|
||||
}
|
||||
|
||||
$return = [
|
||||
'error' => $error,
|
||||
'results' => [],
|
||||
'total' => 0,
|
||||
'pages' => 0
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
return $return;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
0
src/config/.gitkeep
Normal file
0
src/config/.gitkeep
Normal file
7
src/config/config.php
Normal file
7
src/config/config.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'endpoint' => '<WP_LOCATION>',
|
||||
|
||||
);
|
||||
0
src/controllers/.gitkeep
Normal file
0
src/controllers/.gitkeep
Normal file
0
src/lang/.gitkeep
Normal file
0
src/lang/.gitkeep
Normal file
0
src/migrations/.gitkeep
Normal file
0
src/migrations/.gitkeep
Normal file
0
src/views/.gitkeep
Normal file
0
src/views/.gitkeep
Normal file
0
tests/.gitkeep
Normal file
0
tests/.gitkeep
Normal file
Loading…
Reference in a new issue