我想在多站点站点页面(sites.php)中添加一个额外的列。在上面找到了这个代码,所以:
add_filter('wpmu_blogs_columns', 'xx_add_expired_date_column');
function xx_add_expired_date_column($site_columns) {
$site_columns['expired_Date'] = 'Expires';
return $site_columns;
}
/* Populate site_name with blogs site_name */
add_action('manage_sites_custom_column', 'xx_exipred_date_data', 10, 2);
function xx_exipred_date_data($column_name, $blog_id) {
$current_blog_details = get_blog_details(array('blog_id' => $blog_id));
echo ucwords($current_blog_details->blogname);
}wpmu_blogs_columns过滤器应该在站点屏幕上添加附加列。我把这段代码放在我正在开发的插件中。该插件的其他功能正在正常工作。插件已被网络激活。
当我查看网站列表(网络管理,网站,或通过网络仪表板网站,所有网站),额外的列不存在。
如果我在die()函数后面放一个xx_add_expired_date_column语句,“死”就永远不会发生。
我认为这可能是一个加载顺序错误-也许插件没有被加载到网站页面?可以做些什么来启用这个额外的列?
Added 2023年2月7日
进一步的测试:wpmu_blogs_columns过滤器将在主题的(或子主题的) functions.php文件中工作,但不会在插件中工作。
Added 2023年2月8日
正如即将被接受的答案中所提到的,列数组是$sites_columns (复数'sites')。$column_name是很重要的。答案中的代码将起作用。
发布于 2023-02-08 20:28:56
我测试了您的代码,修复了$colum_name问题,它对我来说很好。
add_filter('wpmu_blogs_columns', function ($site_columns) {
$site_columns['expired_Date'] = 'Expires';
return $site_columns;
});
add_action('manage_sites_custom_column', function ($column_name, $blog_id) {
if ( 'expired_Date' === $column_name ){
$current_blog_details = get_blog_details(array('blog_id' => $blog_id));
// do_action( 'qm/debug', ['Details:', $current_blog_details ] );
echo ucwords($current_blog_details->last_updated);
}
}, 10, 2);您必须检查$column_name,否则echo将在所有自定义列中打印。
过滤器和操作都是非常具体的,它们将只在页面/wp-admin/network/sites.php上运行,而在其他地方运行。我尝试了上面的代码,使用了代码片段插件,也作为一个mu,两者工作相同,还没有尝试作为一个插件(也许你可以把所有的东西都包装在一个add_action('plugins_loaded', function(){});钩子中)。
qm/debug是针对插件查询监视器的,WP必须拥有:)
https://wordpress.stackexchange.com/questions/413584
复制相似问题