v24 – Skapa egna post-types i WP plugins

I en plugin kan du registrera egna post types. Dessa post types kommer att finnas tillgängliga i WordPress så länge som din plugin är aktiverad. Om du avaktiverar din plugin kommer användare inte längre komma åt custom post typen. Dock kommer WordPress inte radera data från databas vilket betyder att om din plugin återaktiveras senare dyker allt innehåll upp igen.

Registrera en custom post type

<?php namespace MP;

class CustomPost {
  // the post type machine name
  public $post_type = 'portfolio_item';
  public function __construct() {
    // register post type
    add_action('init', array($this, 'register_post_type'));
  }

  public function register_post_type() {
    // registers a new post type in WordPress
    register_post_type(
      $this->post_type, // post type machine name
      array(
        'labels' => array(
          'name' => __('Portfolio items'),
          'singular_name' => __('Portfolio item')
        ),
        'public' => true,
        'has_archive' => true,
      )
    );
  }
}

Koden ovan registrerar en custom post type i WordPress medan pluginnen är aktiverad med hjälp av add_action(’init’). Just nu är din custom type väldigt enkelt uppbyggd, och har bara ”standard” fält såsom post_title och post_content.

Lägga till custom post meta fält på en custom post

Om du vill lägga till egna fält på en custom post i en plugin måste du använda dig av ”post meta”. Med hjälp av add_action(’init’) kan du deklarera egna post meta egenskaper. Tillsammans med en renderingscallback samt en save callback kan du sedan skapa input fält och lagra värden när ett inlägg sparas.


class CustomPost { // the post type machine name public $post_type = 'portfolio_item'; public $meta_box_machine_name = 'portfolio_item_meta'; public $custom_meta_name = 'my_project_date'; public function __construct() { [ ... ] // add custom post meta box (custom field) add_action('admin_init', array($this, 'add_meta_box')); // add custom meta box save callback add_action( 'save_post', array($this, 'save_meta_box'), 10, 2 ); } [ ... ] // registers a "custom field" meta box public function add_meta_box() { add_meta_box( $this->meta_box_machine_name, 'Portfolio item meta', // title of the meta box array($this, 'render_meta_box'), // field rendering function $this->post_type, // the post type this meta box should be used for 'normal', 'high' ); } // the rendering function for the custom meta box public function render_meta_box($post) { // is there a current value for this posts meta box? $current_value = get_post_meta( $post->ID, $this->custom_meta_name, true ); // echo out the meta box to the edit form echo '<input type="date" value="' . $current_value .'" name="'.$this->custom_meta_name.'">'; } // callback that runs on each post save public function save_meta_box($post_id, $post) { // do nothing if post is of wrong type if ($post->post_type != $this->post_type) { return; } if (isset($_POST[$this->custom_meta_name])) { // if our field is part of the update, save the value to DB update_post_meta( $post_id, $this->custom_meta_name, $_POST[$this->custom_meta_name]); } } }

Koden ovan registrerar ett nytt fält (post meta) för din custom post type. För admins/redaktörer lägger den även till ett input-fält i redigeringsformulär samt en callback för post save som uppdaterar post meta för ett specifikt inlägg.

Läs mer om custom post types

0 votes