クラス化したカスタム投稿タイプの一覧ページにサムネイルとカスタムタクソノミー列を追加するメモ。
/**
* add column to costom post type list
*
* @param string $key field key custom post type filed name
* @param string $label display label of field key
*/
public function addTaxonomyColumn( $key, $label ) {
$post_type_name = $this->post_type_name;
// 一覧画面にカスタムタクソノミースタッフによる分類を追加
$manage_edit_columns = function( $columns ) use( $key, $label )
{
/** @var string $key */
/** @var string $label */
$columns[ $key ] = $label;
return $columns;
};
$manage_posts_column = function ( $column, $post_id ) use ( $key, $post_type_name )
{
/** @var string $key */
/** @var string $post_type_name */
if ( $key == $column ) {
$value = get_the_term_list( $post_id, $post_type_name );
$value = preg_replace( "/<[^>]+>(.+)</a>/", "$1", $value );
echo $value;
}
};
add_filter( 'manage_edit-' . $this->post_type_name . '_columns', $manage_edit_columns );
add_action( 'manage_posts_custom_column', $manage_posts_column, 10, 2 );
}
public function addThumbnailColumn( $label )
{
$post_type_name = $this->post_type_name;
// 一覧画面にカスタムタクソノミースタッフによる分類を追加
$manage_edit_columns = function( $columns ) use( $label )
{
/** @var string $label */
$columns[ 'thumbnail' ] = $label;
return $columns;
};
$manage_posts_column = function ( $column, $post_id )
{
if ('thumbnail' == $column) {
$value = get_the_post_thumbnail( $post_id, array( 100, 100 ) );
echo $value;
}
};
add_filter( 'manage_edit-' . $this->post_type_name . '_columns', $manage_edit_columns );
add_action( 'manage_posts_custom_column', $manage_posts_column, 10, 2 );
}
カスタムフィールド、カスタムタクソノミーを持つカスタム投稿タイプをクラス化する : WordPressにを追加したコード。
functions.php
include( get_template_directory() . ‘/inc/shortcode.php’ );
/*
* custom post type
*/
$custom = new CustomPostType( 'custom', array() );
$custom->addTaxonomy( 'cat' );
$custom->addMetabox(
'meta',
array(
'name' => 'text',
'nationality' => 'text',
)
);
$custom->addThumbnailColumn( 'eye catch' );
$custom->addTaxonomyColumn( 'cat', 'category' );
custom_post_type.php
custom_post_type.php
<?php
/**
* CustomPostType class
*
* @author Sawai Hiroshi
*/
/**
* CustomPostType
*/
class CustomPostType
{
/** @var string $post_type_name custom post type name */
public $post_type_name;
/** @var array $labels label of custom post type */
public $labels;
/**
* @param string $post_type_name
* @param array $labels custom post type labels
*/
public function __construct( $post_type_name, $labels = array() )
{
$this->post_type_name = strtolower( str_replace(' ', '_', $post_type_name ) );
$this->setLabels( $labels );
if ( ! post_type_exists( $this->post_type_name ) ) {
add_action( 'init', array( &$this, 'register') );
}
$this->save();
}
/**
* set labels of custom post type
*
* @param $labels custom post type labels
*/
private function setLabels( $labels )
{
$this->labels = array_merge(
array(
'name' => 'Custom Post',
'singular_name' => 'Custom Post一覧',
'add_new' => 'Custom Postを追加',
'add_new_item' => 'Custom Postを追加',
'edit_item' => 'Custom Postを編集',
'new_item' => '新しいCustom Post',
'view_item' => 'Custom Postを表示',
'search_items' => 'Custom Postを探す',
'not_found' => 'Custom Postはありません',
'not_found_in_trash' => 'ゴミ箱にCustom Postはありません',
),
$labels
);
}
/**
* add custom taxonomy to custom post type
*
* @param string $name taxonomy name
* @param array $args register_taxonomy third parameter array
*/
public function addTaxonomy( $name, $args = array() )
{
if ( ! true === empty( $name ) ) {
$post_type_name = $this->post_type_name;
$taxonomy_name = strtolower( str_replace(' ', '_', $post_type_name ) );
$taxonomy_args = $this->setTaxonomyArgs( $args );
}
if ( ! true === taxonomy_exists( $name ) ) {
// register taxonomy
add_action(
'init',
function() use( $taxonomy_name, $post_type_name, $taxonomy_args )
{
register_taxonomy( $taxonomy_name, $post_type_name, $taxonomy_args );
}
);
} else {
add_action(
'init',
function() use( $taxonomy_name, $post_type_name )
{
register_taxonomy_for_object_type( $taxonomy_name, $post_type_name );
}
);
}
}
/**
* set custom taxonomy arguments from labels
*
* @param array $args custom taxonomy array of register_taxonomy third parameter
* @return array custom taxonomy new argument array
*/
private function setTaxonomyArgs( $args )
{
return array_merge(
array(
'label' => 'Custom Taxonomy',
'singular_label' => 'Custom Taxonomy',
'hierarchical' => false,
'update_count_callback' => '_update_post_term_count',
),
$args
);
}
/**
* add meta box to custom post type
*
* @param string $title custom meta box title
* @param array $fields field of custom meta box
* @param string $context
* @param string $priority
*/
public function addMetabox( $title, $fields = array(), $context = 'normal', $priority = 'default')
{
if ( ! true === empty( $title ) ) {
$post_type_name = $this->post_type_name;
$box_id = strtolower( str_replace( ' ', '_', $title ) );
$box_title = ucwords( str_replace( '_', ' ', $title ) );
$box_context = $context;
$box_priority = $priority;
global $custom_fields;
$custom_fields[ $title ] = $fields;
add_action(
'admin_init',
function() use( $box_id, $box_title, $post_type_name, $box_context, $box_priority, $fields )
{
add_meta_box(
$box_id,
$box_title,
function( $post, $data )
{
global $post;
wp_nonce_field( 'save', 'meta_box' );
$custom_fields = $data[ 'args' ][ 0 ];
$meta = get_post_custom( $post->ID );
// Check the array and loop through it
if( ! true === empty( $custom_fields ) )
{
/* Loop through $custom_fields */
foreach( $custom_fields as $label => $type )
{
$field_id_name = strtolower( str_replace( ' ', '_', $data[ 'id' ] ) )
. '_' . strtolower( str_replace( ' ', '_', $label ) );
if ( true === isset( $meta[ $field_id_name ][ 0 ] ) ) {
$value = $meta[ $field_id_name ][ 0 ];
} else {
$value = '';
}
echo '<label for="' . $field_id_name . '">' . $label
. '</label><input type="text" name="custom_meta[' . $field_id_name . ']" id="'
. $field_id_name . '" value="' . $value . '" />';
}
}
},
$post_type_name,
$box_context,
$box_priority,
array( $fields )
);
}
);
}
}
/**
* save custom post type fields
*/
private function save()
{
$post_type_name = $this->post_type_name;
add_action(
'save_post',
function() use( $post_type_name )
{
if( defined( 'DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if ( false === isset( $_POST[ 'meta_box' ] ) ) {
return;
}
if ( ! wp_verify_nonce( $_POST[ 'meta_box' ], 'save' ) ) {
return;
}
global $post;
if( isset( $_POST )
&& isset( $post->ID )
&& get_post_type( $post->ID ) === $post_type_name )
{
global $custom_fields;
// Loop through each meta box
foreach( $custom_fields as $title => $fields )
{
// Loop through all fields
foreach( $fields as $label => $type )
{
$field_id_name = strtolower( str_replace( ' ', '_', $title ) ) . '_' . strtolower( str_replace( ' ', '_', $label ) );
update_post_meta( $post->ID, $field_id_name, $_POST['custom_meta'][$field_id_name] );
}
}
}
}
);
}
/**
* register custom post type
* not private but public
*/
public function register()
{
$args = array(
'labels' => $this->labels,
'public' => true,
'capability_type' => 'post',
'show_ui' => true,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'rewrite' => array( 'slug' => $this->post_type_name, 'with_front' =>false ),
);
register_post_type( $this->post_type_name, $args );
}
/**
* add column to costom post type list
*
* @param string $key field key custom post type filed name
* @param string $label display label of field key
*/
public function addTaxonomyColumn( $key, $label ) {
$post_type_name = $this->post_type_name;
// 一覧画面にカスタムタクソノミースタッフによる分類を追加
$manage_edit_columns = function( $columns ) use( $key, $label )
{
/** @var string $key */
/** @var string $label */
$columns[ $key ] = $label;
return $columns;
};
$manage_posts_column = function ( $column, $post_id ) use ( $key, $post_type_name )
{
/** @var string $key */
/** @var string $post_type_name */
if ( $key == $column ) {
$value = get_the_term_list( $post_id, $post_type_name );
$value = preg_replace( "/<[^>]+>(.+)</a>/", "$1", $value );
echo $value;
}
};
add_filter( 'manage_edit-' . $this->post_type_name . '_columns', $manage_edit_columns );
add_action( 'manage_posts_custom_column', $manage_posts_column, 10, 2 );
}
public function addThumbnailColumn( $label )
{
$post_type_name = $this->post_type_name;
// 一覧画面にカスタムタクソノミースタッフによる分類を追加
$manage_edit_columns = function( $columns ) use( $label )
{
/** @var string $label */
$columns[ 'thumbnail' ] = $label;
return $columns;
};
$manage_posts_column = function ( $column, $post_id )
{
if ('thumbnail' == $column) {
$value = get_the_post_thumbnail( $post_id, array( 100, 100 ) );
echo $value;
}
};
add_filter( 'manage_edit-' . $this->post_type_name . '_columns', $manage_edit_columns );
add_action( 'manage_posts_custom_column', $manage_posts_column, 10, 2 );
}
}
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。