原文地址:http://www.smashingmagazine.com/2013/12/05/modifying-admin-post-lists-in-wordpress/
这里贴出自己制作功能应用时用到的代码:
/*Adding Custom Table Headers
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------*/
add_filter('manage_post_posts_columns', 'bs_expire_table_head');
function bs_expire_table_head( $defaults ) {
$defaults['expire_date'] = 'Expire Date';
return $defaults;
}
/*Fill 'er Up!
--------------------------------------------------------------------------*/
add_action( 'manage_post_posts_custom_column', 'bs_expire_table_content', 10, 2 );
function bs_expire_table_content( $column_name, $post_id ) {
if ($column_name == 'expire_date') {
$expire_date = get_post_meta( $post_id, 'custom_expire', true );
echo $expire_date ;
}
}
/*Ordering Columns
--------------------------------------------------------------------------*/
add_filter( 'manage_edit-post_sortable_columns', 'bs_expire_table_sorting' );
function bs_expire_table_sorting( $columns ) {
$columns['expire_date'] = 'expire_date';
return $columns;
}
add_filter( 'request', 'bs_expire_date_column_orderby' );
function bs_expire_date_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'expire_date' == $vars['orderby'] ) {
$vars = array_merge( $vars, array(
'meta_key' => 'custom_expire',
'orderby' => 'meta_value'
) );
}
return $vars;
}
/*Data Filtering
--------------------------------------------------------------------------*/
add_action( 'restrict_manage_posts', 'bs_expire_table_filtering' );
function bs_expire_table_filtering() {
global $wpdb;
if ( 1/*$screen->post_type == 'post'*/ ) {
$selected = ( !empty( $_GET['expire_date'] ) AND $_GET['expire_date'] == 'Expired' ) ? 'selected="select"' : '';
echo '<select name="expire_date" id="expire_date">';
echo '<option value="">Unselected Expired</option>';
echo '<option value="Expired" '.$selected.'>All Expired</option>';
echo '</select>';
}
}
/*we need to add rules to the query
--------------------------------------------------------------------------*/
add_filter( 'parse_query','bs_expire_table_filter' );
function bs_expire_table_filter( $query ) {
//var_dump($query);
if( is_admin() AND $query->query['post_type'] == 'post' ) {
$qv = &$query->query_vars;
//echo "<pre>".print_r($query,true)."</pre>";
$qv['meta_query'] = array();
if( !empty( $_GET['expire_date'] ) && $_GET['expire_date'] == 'Expired' ) {
add_filter( 'posts_where' , 'posts_where_statement' );
function posts_where_statement( $where ) {
global $wpdb;
$where .= "AND ID IN(
SELECT post_id
from $wpdb->postmeta
where meta_key = 'custom_expire'
AND meta_value <>''
AND STR_TO_DATE(meta_value,'%m/%d/%Y') < CURDATE()
)";
return $where;
}
}
if( !empty( $_GET['orderby'] ) AND $_GET['orderby'] == 'expire_date' ) {
$qv['orderby'] = 'meta_value';
$qv['meta_key'] = 'custom_expire';
$qv['order'] = strtoupper( $_GET['order'] );
}
}
}