silvanus/wp-post-crud

Provides class class for handling CRUD operations on WP Posts

v1.1.0 2019-11-09 19:17 UTC

This package is auto-updated.

Last update: 2024-05-11 02:00:30 UTC


README

Provides CRUD class for handling WP Post Types in Actice Recordish way. Includes classes for detault WordPress types Post/Page and is extendable to include custom post types.

Aim is to abstract away awkward parts of creating, handling and deleting Posts programmatically in WordPress.

Installation

Via Composer:

composer require silvanus/wp-post-crud

To use autoloading mechanism, you must include vendor/autoload.php file in your code.

Issues & Contributing

If you find a bug or feel something is wrong, submit an issue or a pull request. Read the instructions first.

Usage

Post CRUD gives models that have create, read, update and delete methods. Main methods: set_field(), get_field(), save() and delete()

Creating new post

<?php

// Default post model.
use Silvanus\PostCrud\Models\Post as Model;

// Create new post instance.
$model = new Model();

// Set some values
$model->set_field('post_title', 'Lorem ipsum dolor sit amet');
$model->set_field('post_content', 'Dolor sit igitur.');

// Persist the data in database.
$model->save();

All fields values should match WP Post table columns.

Edit existing post

Models will automatically load WP Post data if you instantiate them with ID.

<?php

// Default post model.
use Silvanus\PostCrud\Models\Post as Model;

// Pass ID of post to model.
$model = new Model(89);

// Use existing data.
echo $model->get_field('post_title');
echo $model->get_field('post_content');
echo $model->get_field('post_name');

// Not a fan of that slug, change it.
$model->set_field('post_name', 'sluggity_slug');

// Persist the changes.
$model->save();

Delete post

<?php

// Default post model.
use Silvanus\PostCrud\Models\Post as Model;

// Post IDs to be deleted.
$post_ids = array(1995, 2011, 2019);

// These posts have been particularly silly.
foreach( $post_ids as $post_id ) {
    $model = new Model($post_id);
    $model->delete();
}

Custom Post Types

You can create your own classes for your own Custom Post Types. You only need to extend AbstractCrud class and provide name of post type.

<?php

// AbstractCrud class for all the heavy lifting.
use Silvanus\PostCrud\AbstractCrud;

/**
 * Minimal implementation for your post type.
 */
class Book extends AbstractCrud
{

    /**
     * Slug of post type you have already registered elsewhere.
     */
    protected $post_type = 'book';
}

Your class will have access to all the same methods.

<?php

// Your Book class
use YourName\YourNamespace\Book;

// Create new post book.
$book = new Book();

// Set up book data.
$book->set_field('post_title', 'Revelation Space');
$book->set_field('post_status', 'published');

// Persist.
$book->save();

Meta fields

Models can also handle metadata. Use set_meta() and get_meta() methods.

<?php

// Our book could use some meta data.
$book->set_meta('author', 'Alastair Reynolds');
$book->set_meta('rating', 5);

// Persist.
$book->save();

Shorthand methods

There are shorthand getters & setters for the most common use cases. Instead of using set_field($key, $value) or get_field($value), you can use the following:

<?php

// Set values using shorthands.
$model->set_title('Lorem ipsum');
$model->set_content('Dolor sit igitur, dolor sit amet.');
$model->set_excerpt('Dolor sit igitur');

// Access values through shorthands
echo $model->get_title();
echo $model->get_excerpt();

// Persist.
$book->save();

Other shorthands are: set_status($status), get_status(), set_slug($slug) and get_slug().

Under the hood AbstractCrud class will call set_field() and get_field() methods.