WP Grid Builder如何为卡片正确添加对应post type类名
WP Grid Builder卡片添加文章类型类名实现方案
原有代码的问题
最初编写的代码存在3个明显问题:
- 没有从钩子传入的
$card对象中获取当前卡片对应的内容ID,直接调用$post->ID拿到的是主查询的当前页面ID,也就是放置WP Grid Builder短代码的页面ID,自然只能获取到page类型 - 直接给
$atts['class']赋值会覆盖卡片原有的所有默认类名,会破坏插件自带的卡片样式 - 硬编码调用
wpgb_get_grid_settings(1)属于无效冗余逻辑,还会导致代码只在ID为1的网格下生效,通用性差
正确实现代码
将原有代码替换为以下内容即可,支持所有网格,自动给每个卡片追加对应文章类型的类名,不会覆盖原有类:
function wpgb_add_post_type_card_class( $atts, $card ) { // 跳过非文章类型的卡片(比如分类项、用户项等) if ( ! isset( $card->object_type, $card->object_id ) || 'post' !== $card->object_type ) { return $atts; } $post_type = get_post_type( $card->object_id ); if ( $post_type ) { // 追加类名,同时做安全转义避免非法字符 $atts['class'] .= ' ' . sanitize_html_class( $post_type ); } return $atts; } add_filter( 'wp_grid_builder/card/attributes', 'wpgb_add_post_type_card_class', 10, 2 );
内容的提问来源于stack exchange,提问作者Armoic
相关产品推荐
相关产品推荐

