htmlburger/admin-column-manager

此插件提供了一种简单的方法,可以从WordPress管理屏幕中添加、删除和管理帖子、用户和分类列表的列。

v1.0.0 2016-06-27 10:07 UTC

This package is not auto-updated.

Last update: 2024-09-22 10:46:51 UTC


README

此插件提供了一种简单的方法,可以从WordPress管理屏幕中添加、删除和管理帖子、用户和分类列表的列。

用法

修改页面列表列
从页面列表屏幕中删除日期和作者列,并添加2个额外列(颜色查看次数)。额外列的值从某些帖子元字段中获取。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
  ->remove( array('date', 'author') )
  ->add( array(
		Carbon_Admin_Column::create('Color')
		   ->set_field('color'),
		Carbon_Admin_Column::create('Views Count')
		   ->set_field('views_count'),
	 ));

使用回调函数打印列值
向页面列表屏幕添加额外列:查看次数。每个拥有超过1000次查看的页面都将以特殊的CSS类popular-page渲染。

这是通过使用自定义回调函数来打印特定post_id的列内容来实现的。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
  ->add( array(
		Carbon_Admin_Column::create('Views Count')
		   ->set_callback('crb_admin_render_view_count_col'),
	 ));

function crb_admin_render_view_count_col( $post_id ) {
	$views_count = get_post_meta($post_id, 'views_count', 1);
	$views_count = intval($views_count);
	
	if ($views_count > 1000) {
		$views_count = '<span class="popular-page">' . $views_count . '</span>';
	}
	
	return $views_count;
}

修改自定义帖子类型列
crb_cars自定义帖子类型列表屏幕中删除日期和作者列,并添加2个额外列(型号价格)。额外列的值从某些帖子元字段中获取。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('crb_cars') )
  ->remove( array('date', 'author') )
  ->add( array(
		Carbon_Admin_Column::create('Model')
		   ->set_field('_crb_car_model'),
		Carbon_Admin_Column::create('Price')
		   ->set_field('_crb_car_price'),
	 ));

在列表表中渲染特色图片

要显示postpagecrb_cars帖子类型的特色图片,请使用接受$post_id作为参数的自定义回调函数。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page', 'post', 'crb_cars') )
  ->add( array(
		Carbon_Admin_Column::create('Thumbnail')
		   ->set_callback('crb_column_render_post_thumbnail'),
	 ));

function crb_column_render_post_thumbnail( $post_id ) {
	if ( has_post_thumbnail( $post_id ) ) {
		$thumbnail = get_the_post_thumbnail( $post_id, 'my_backend_image_size' );
	} else {
		$thumbnail = '';
	}
	
	return $thumbnail;
}

修改分类列

从分类和标签列表屏幕中删除slug和计数列,并添加2个额外列(图片副标题)。额外列的值从某些术语元字段中获取。通过使用自定义回调函数显示术语图片,通过使用字段元键显示术语副标题来实现。

代码

Carbon_Admin_Columns_Manager::modify_columns('taxonomy', array('category', 'post_tag') )
  ->remove( array('description', 'posts') )
  ->add( array(
		Carbon_Admin_Column::create('Subtitle')
		   ->set_field('crb_term_subtitle'),
		Carbon_Admin_Column::create('Image')
		   ->set_callback('crb_column_render_term_image'),
	 ));

function crb_column_render_term_image( $term_id ) {
	if ( $term_image_id = carbon_get_term_meta( $term_id, 'crb_term_image' ) ) {
		$term_image = wp_get_attachment_image( $term_image_id, 'my_backend_image_size' );
	} else {
		$term_image = '';
	}

	return $term_image;
}

修改用户列

从用户列表屏幕中删除帖子、角色和电子邮件列,并添加2个额外列(用户是否活跃用户注册日期)。额外列的值从用户元字段中获取。通过使用字段元键显示用户状态(活跃/不活跃),通过使用自定义回调函数显示用户注册日期来实现。

代码

Carbon_Admin_Columns_Manager::modify_columns('user')
  ->remove( array('email', 'role', 'posts') )
  ->add( array(
		Carbon_Admin_Column::create('Is Active')
		   ->set_field('crb_user_status'),
		Carbon_Admin_Column::create('Registration Date')
		   ->set_callback('crb_column_get_user_registration_date'),
	 ));

function crb_column_get_user_registration_date( $user_id ) {
	$user = get_user_by( 'id', $user_id );
	$user_registration_date = $user->data->user_registered;

	$friendly_date_text = date( 'd F, Y', strtotime( $user_registration_date ) );

	return $friendly_date_text;
}

如何处理WordPress管理的响应式版本

默认情况下,WordPress在设备宽度等于或小于800像素时隐藏所有附加列。但是,可以通过使用回调函数删除不必要的列或将它们的值合并到单个列中。

以下示例从页面列表屏幕中删除了dateauthorcomments列,并添加了一个显示authorcommentsdatethumbnail的单列。在这个例子中,我们将使用常规帖子函数来检索信息。每个列将显示与列表条目相对应的帖子数据。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
	->remove( array('date', 'author', 'comments') )
	->add( array(
		Carbon_Admin_Column::create('Page Information')
			->set_callback('crb_column_page_information'),
	) );

function crb_column_page_information( $page_id ) {
	ob_start();
	?>
	<ul>
		<?php if ( has_post_thumbnail() ): ?>
			<li>
				<?php the_post_thumbnail( 'thumbnail' ) ?>
			</li>
		<?php endif ?>
		<li>
			Posted on : <?php the_time('F jS, Y ') ?>
		</li>
		<li>
			 <?php printf(__('Posted by : %s', 'crb'), get_the_author()) ?>
		</li>
		<li>
			<?php comments_popup_link( __('No Comments', 'crb'), __('1 Comment', 'crb'), __('% Comments', 'crb') ); ?>
		</li>
	</ul>
	<?php
	$page_information_content = ob_get_clean();

	return $page_information_content;
}

在WordPress管理中创建可排序的列

在页面列表屏幕上创建一个可排序的列,按查看次数对页面进行排序。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
	->add( array(
		Carbon_Admin_Column::create('Page Information')
			->set_sort_field('views_count'), # that value will be accessible as 'orderby' get parameter.
			->set_callback('crb_column_page_information'),
	) );

add_action('pre_get_posts', 'crb_sort_pages_by_their_views_count');
function crb_sort_pages_by_their_views_count( $query ) {

	if ( 
		is_admin() 
		&& $query->is_main_query() 
		&& get_query_var( 'post_type' )==='page'
		&& !empty( $_GET['orderby'] )
		&& $_GET['orderby']==='orderby_custom_column'
	) {
		
		$query->set('orderby', 'meta_value_num');
		$query->set('meta_key', '_crb_page_views');
	}

	return $query;
}

在用户列表屏幕上创建一个可排序的列,按用户状态(活跃/不活跃)对用户进行排序。

代码

Carbon_Admin_Columns_Manager::modify_columns('user')
	->add( array(
		Carbon_Admin_Column::create('Is User Active')
			->set_field('_crb_is_user_active')
			->set_sort_field('orderby_status'),
	) );

add_action( 'pre_get_users', 'crb_pre_user_query' );
function crb_pre_user_query( $user_query ) {
	global $wpdb;

	if (
		is_admin()
		&& !empty($_GET['orderby']) 
		&& $_GET['orderby']==='orderby_status'
	) {
		$user_query->set('meta_key', '_crb_is_user_active');
		$user_query->set('orderby', 'meta_value');
	}
}

为WordPress管理中的列设置自定义宽度

为页面列表屏幕的Color、查看次数和状态列设置不同的宽度。颜色列宽度以百分比表示,而查看次数列宽度以像素表示。状态列的宽度以整数传递,将自动将其视为像素值。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
	->remove( array('date', 'author') )
	->add( array(
		Carbon_Admin_Column::create('Color')
			->set_width( '80%' )
			->set_field('color'),
		Carbon_Admin_Column::create('Views Count')
			->set_width( '25px' )
			->set_field('views_count'),
		Carbon_Admin_Column::create('Status')
			->set_width( 100 )
			->set_field('status'),
	));

请注意,WordPress 管理界面是响应式的,您应该使用合理的列数以及为每列指定合理的宽度。例如,列宽为 600 像素可能会在移动设备上引起问题。

如何设置自定义列名并为其添加特定样式?

默认情况下,除非指定自定义名称,否则列名是随机生成的。

在页面列表屏幕上设置图像列的自定义名称并设置最大图像宽度。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
	->remove( array('date', 'author') )
	->add( array(
		Carbon_Admin_Column::create('Color')
			->set_name( 'crb-column-page-thumbnail' )
			->set_width( '100px' )
			->set_field('color'),
	 ));

CSS

<style type="text/css">
	/* column heading */
	#carbon-crb-column-page-thumbnail {
		font-weight : bold;
	}

	/* column value */
	.crb-column-page-thumbnail img {
		max-width : 100%;
		height : auto;
	}
</style>

如何在管理员列表屏幕上重新排序列?

将页面缩略图列移动到文章复选框和标题列之间。您需要设置一个列名使用 set_name(),然后使用 sort() 指定新的顺序。所有未在传递给 sort() 方法的数组中指定的列将被移动到末尾,保持它们的默认顺序。

代码

Carbon_Admin_Columns_Manager::modify_columns('post', array('page') )
	->sort( array('cb', 'crb-thumbnail-column') )
	->add( array(
		Carbon_Admin_Column::create('Thumbnail')
			->set_name( 'crb-thumbnail-column' )
			->set_callback('crb_column_thumbnail'),
	 ));

有用的回调函数

以下函数仅供参考,并不在插件中定义。

页面/文章缩略图
使用以下回调函数显示文章缩略图照片。

代码

function crb_column_thumbnail( $post_id ) {
	if ( has_post_thumbnail( $post_id ) ) {
		return get_the_post_thumbnail( $post_id, 'admin_thumbnails' );
	}
}

页面模板
使用以下回调函数显示页面模板名称。

代码

function crb_column_page_template( $page_id ) {
	$page_template_name = array_search(
		get_post_meta( $page_id, '_wp_page_template', true ),
		get_page_templates()
	);

	if ( $page_template_name === false ) {
		$page_template_name = 'Default';
	}

	return $page_template_name;
}

页面侧边栏
使用以下回调函数显示每个页面选择的侧边栏。

代码

function crb_column_page_template( $page_id ) {
	
	$sidebar = get_post_meta( $page_id, 'crb_custom_sidebar', true );

	if ( empty($sidebar) ) {
		$sidebar = 'Default Sidebar';
	}

	return $page_template_name;
}

包摘要

列管理器
有三种类型的列管理器用于文章、分类和用户列表页面。

文章管理器

代码

$post_types = array( 'post_type_one', 'post_type_two' );

$columns_to_remove = array( 'column_one', 'column_two' );

$custom_column_order = array( 'column_name_five', 'column_name_four', 'column_name_three' );

$columns_to_add = array( $columns_code_goes_here );

Carbon_Admin_Columns_Manager::modify_columns('post', $post_types )
	->remove( $columns_to_remove ) # remove unnecessary columns
	->sort( $custom_column_order ) # set custom column order
	->add( $columns_to_add ) # add new columns

分类管理器

代码

$taxonomies = array( 'taxonomy_name_one', 'taxonomy_name_two' );

$columns_to_remove = array( 'column_one', 'column_two' );

$custom_column_order = array( 'column_name_five', 'column_name_four', 'column_name_three' );

$columns_to_add = array( $columns_code_goes_here );

Carbon_Admin_Columns_Manager::modify_columns('taxonomy', $taxonomies )
	->remove( $columns_to_remove ) # remove unnecessary columns
	->sort( $custom_column_order ) # set custom column order
	->add( $columns_to_add ) # add new columns

用户管理器

代码

$columns_to_remove = array( 'column_one', 'column_two' );

$custom_column_order = array( 'column_name_five', 'column_name_four', 'column_name_three' );

$columns_to_add = array( $columns_code_goes_here );

Carbon_Admin_Columns_Manager::modify_columns('user')
	->remove( $columns_to_remove ) # remove unnecessary columns
	->sort( $custom_column_order ) # set custom column order
	->add( $columns_to_add ) # add new columns

按给定元数据键列出元值的列

代码

$column_name = __('My Column Name', 'crb');

$meta_key = '_crb_meta_key';

Carbon_Admin_Column::create( $column_name )
	->set_field( $meta_key ),

通过回调函数打印其值的列

代码

$column_name = __('My Column Name', 'crb');

$callback_function_name = 'crb_callback_function';

Carbon_Admin_Column::create( $column_name )
	->set_callback( $callback_function_name ),

/**
 * Callback Function
 *
 * @param $object_id Post ID, Term ID or User Id according to the Manager
 */
function crb_callback_function( $object_id ) {
	# posts
	return get_post_meta( $object_id, '_crb_meta_key', true );

	# terms
	return carbon_get_term_meta( $object_id, '_crb_meta_key' );

	# users
	return get_user_meta( $object_id, '_crb_meta_key', true );
}

可用的列函数

  • ::create( $param ),字符串,列标签
  • set_field( $param ),字符串,元数据键,不能与 set_callback() 一起使用
  • set_callback( $param ),字符串,回调函数名称,不能与 set_field() 一起使用
  • set_name( $param ),字符串,可用于列排序或样式的唯一列名。默认情况下,列名是随机生成的
  • set_sort_field( $param ),字符串,$_GET['orderby']

代码

Carbon_Admin_Column::create( $column_label )
	->set_field( $meta_key )
	->set_callback( $callback_function_name )
	->set_name( $column_name )
	->set_sort_field( $crb_sorting_value )

常见问题解答

我需要包含这个库吗?
对于所有新项目,这个库将是 lib 文件夹的一部分。对于旧项目,您可以在项目中执行 drone upgrade-lib 后使用它,您需要手动将列文件添加到 /options 并在 functions.php 中 include 它。

在插件或其他主题中使用库有特别之处吗?
建议在插入库时检查是否已由插件或主题插入,可以使用 class_exists 检查已插入的库。

代码

if ( !class_exists(Carbon_Admin_Columns_Manager) ) {
	include_once( PATH_TO_LIBRARY . 'carbon-admin-columns-manager.php');
}

列的数量有限制吗?
当然,从代码的角度来看没有限制,但最好不要过度使用,并且始终需要检查在较低分辨率下的表现。

我能否设置列的特定宽度?
可以设置像素和百分比宽度。如上例所示。

我如何样式化列的内容?
需要设置列的唯一名称,之后就可以通过名称来样式化它。如上例所示。

我能否更改现有列的值?
目前还不行,因为 post/taxonomy 列打印值,没有 'hack' 的方法不能以很好的方式更改。

为什么列返回的值在表格上方?
这个问题仅在使用用户列时出现,当回调函数的值通过 echo 打印时。需要将值返回 return

我能否更改现有列的值?
目前还不行,因为 post/taxonomy 列打印值,没有 'hack' 的方法不能以很好的方式更改。

我想删除特定的列,但不知道它的名称。我从哪里可以找到它?
通常它是列的 ID。可以使用浏览器开发工具进行检查。

能否使用多语言网站的库?
当然。

在初始化列时是否有特定的结构?
没有特定的结构。根据作者的观点,建议遵循以下模式

代码

if ( !class_exists('Carbon_Admin_Columns_Manager') ) {
	return;
}

add_action( 'init', 'crb_admin_columns' );
function crb_admin_columns(){

	// columns code goes here

}

能否按照特定的顺序排序列?
可以重新排列列,未在列数组中设置的列将被放在最后。上面的例子已经描述了这一点。