-
-
Save quasel/1be0c3ac5cb4002bf4926e8fc25d8373 to your computer and use it in GitHub Desktop.
Pods CPT Admin Fields
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Name: CPT Admin Fields | |
* | |
* Description: Allow adding fields to the CPT editor table. | |
* | |
* Version: 2.3 | |
* | |
* Category: Advanced | |
* | |
* Tableless Mode: No | |
* | |
* @package Pods\Components | |
* @subpackage CPT Admin Fields | |
*/ | |
if ( class_exists( 'Pods_CPT_Admin_Fields' ) ) { | |
return; | |
} | |
class Pods_CPT_Admin_Fields extends PodsComponent { | |
/** | |
* Do things like register/enqueue scripts and stylesheets | |
* | |
* @since 2.3 | |
*/ | |
public function __construct() { | |
if ( ! pods_tableless() ) { | |
add_filter( 'pods_admin_setup_edit_options_post_type', array( $this, 'setup_edit_options' ), 10, 2 ); | |
add_filter( 'pods_register_post_type', array( $this, 'setup_post_type' ), 10, 2 ); | |
} | |
} | |
function setup_post_type( $options, $post_type ) { | |
add_filter( "manage_edit-{$post_type}_sortable_columns", array( $this, "admin_columns" ), 10, 1 ); | |
add_filter( "manage_edit-{$post_type}_columns", array( $this, "admin_columns" ), 10, 1 ); | |
add_action( "manage_{$post_type}_posts_custom_column", array( $this, "custom_column" ), 10, 2 ); | |
return $options; | |
} | |
function setup_edit_options( $options, $pod ) { | |
$options['admin-ui']['ui_fields_manage'] = array( | |
'label' => __( 'Admin Table Columns', 'pods' ), | |
'help' => __( 'help', 'pods' ), | |
'type' => 'pick', | |
'default' => array(), | |
'data' => array(), | |
'pick_format_type' => 'multi' | |
); | |
if ( ! empty( $pod['fields'] ) ) { | |
$options['admin-ui']['ui_fields_manage']['data']['title'] = __( 'Title', 'pods' ); | |
// These defaults match WordPress default settings | |
$options['admin-ui']['ui_fields_manage']['default'][] = 'title'; | |
$options['admin-ui']['ui_fields_manage']['default'][] = 'date'; | |
foreach ( $pod['fields'] as $field ) { | |
$options['admin-ui']['ui_fields_manage']['data'][ $field['name'] ] = $field['label']; | |
} | |
$options['admin-ui']['ui_fields_manage']['data']['author'] = __( 'Author', 'pods' ); | |
$options['admin-ui']['ui_fields_manage']['data']['date'] = __( 'Date', 'pods' ); | |
} else { | |
unset( $options['admin-ui']['ui_fields_manage'] ); | |
} | |
return $options; | |
} | |
public function custom_column( $column_name, $post_id = null ) { | |
preg_match( '/^manage_(.+)_posts_custom_column$/', current_action(), $matches ); | |
if ( $matches[1] ) { | |
$pod = Pods( $matches[1], $post_id ); | |
echo $pod->display( $column_name, true ); | |
} | |
} | |
public function admin_columns( $columns ) { | |
$post_types = PodsMeta::$post_types; | |
preg_match( '/^manage_edit-(.*)(_sortable){0,1}_columns$/U', current_action(), $matches ); | |
$pod = $matches[1]; | |
$sortable = isset( $matches[2] ) ? true : false; | |
if ( ! matches ) { | |
return $columns; | |
} | |
foreach ( $post_types as $type ) { | |
if ( $pod === $type['name'] ) { | |
if ( empty( $type['options']['ui_fields_manage'] ) ) { | |
return $columns; | |
} | |
if ( $sortable ) { | |
$columns = array(); | |
} else { | |
$columns = array( 'cb' => '<input type="checkbox" />' ); | |
} | |
foreach ( $type['options']['ui_fields_manage'] as $field ) { | |
if ( isset( $type['fields'][ $field ] ) ) { | |
$columns[ $field ] = $type['fields'][ $field ]['label']; | |
} elseif ( isset( $type['object_fields'][ $field ] ) ) { | |
$columns[ $field ] = $type['object_fields'][ $field ]['label']; | |
} elseif ( isset( $type['object_fields'][ 'post_' . $field ] ) ) { | |
// Also check post_ prefix | |
$columns[ $field ] = $type['object_fields'][ 'post_' . $field ]['label']; | |
} | |
} | |
// Stop after first matching Pod | |
break; | |
} | |
} | |
return $columns; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment