如何在WPBakery自定义查询中使用变量且不修改插件源码?
替代修改WPBakery源码实现自定义变量查询的方案
直接修改WPBakery核心文件js_composer/include/classes/shortcodes/vc-basic-grid.php确实不是长久之计——插件一更新,你的修改就会被覆盖掉。下面给你两个更稳妥的替代方案,以及关于子主题覆盖的说明:
方案1:使用WPBakery专用过滤器修改查询
WPBakery提供了专门的钩子来修改Basic Grid的查询逻辑,你只需要在子主题的functions.php中添加以下代码即可:
add_filter( 'vc_basic_grid_query', 'custom_vc_grid_replace_date_variable', 10, 2 ); function custom_vc_grid_replace_date_variable( $query_string, $shortcode_atts ) { // 生成今日日期的格式化字符串 $today_date = date('Ymd'); // 替换查询字符串中的自定义标记为实际日期 $modified_query = str_replace('TODAY_DATE_CUSTOM', $today_date, $query_string); return $modified_query; }
这个过滤器会在WPBakery准备Basic Grid的查询之前触发,你可以在这里安全地修改查询字符串,完全不需要触碰插件核心文件,后续插件更新也不会影响你的自定义逻辑。
方案2:使用pre_get_posts钩子调整查询
如果你的需求更复杂(比如不想用字符串替换,而是直接修改WP_Query参数),可以用WordPress原生的pre_get_posts钩子,记得加上条件判断避免影响其他查询:
add_action( 'pre_get_posts', 'custom_vc_grid_pre_get_posts' ); function custom_vc_grid_pre_get_posts( $wp_query ) { // 只针对前台的WPBakery Basic Grid查询生效 if ( ! is_admin() && $wp_query->is_main_query() && isset( $wp_query->query_vars['vc_grid'] ) ) { $today_date = date('Ymd'); // 这里可以直接设置查询参数,比如日期相关的meta查询 $wp_query->set( 'meta_query', array( array( 'key' => 'your_custom_date_field', // 替换成你的自定义字段名 'value' => $today_date, 'compare' => '=', 'type' => 'DATE' ) ) ); } }
关于子主题覆盖插件文件的说明
很遗憾,子主题无法直接覆盖WPBakery的核心文件。子主题的覆盖机制只适用于主题目录下的文件,插件文件的加载逻辑不受子主题控制,强行尝试覆盖可能会导致插件报错或功能异常。所以优先用上面的钩子方案是最可靠的。
内容的提问来源于stack exchange,提问作者user3325749
相关产品推荐
相关产品推荐

