在过去的几年里,我一直在开发自定义主题和各种插件,为 WPBakery Page Builder 元素添加选项并创建新的自定义元素等。
在 Page Builder v5.7 之前,一切都完美无缺。但是当 v6.0.x 出来时,突然我添加到每个元素的每个 Checkbox 选项,无论是自定义元素还是 Page Builder 的标准元素之一,都有一个问题:只要我在页面编辑器中单击该元素要打开它的设置,所有复选框都会清除并取消选中,无论它们的默认值或保存值如何。
如果我勾选一个复选框并保存设置,当我查看网站的前端时,该选项确实已保存并且正在正常工作;但是当我再次打开元素的设置窗口时,它们都清除了。
我查看了我的所有代码并将其与其他插件的代码和所有 WPBakery 的文档等进行了比较,但我在任何地方都看不到问题。我认为这可能是 Page Builder v6.0.x 的错误,我已向他们发送了支持票,但他们无法给我答复。不过,其他人的插件以及 Page Builder 自己的所有内置元素似乎都在工作,这让我相信这一定与我的代码有关。
这是一个例子:
// After VC Init
add_action( 'vc_after_init', 'gd_after_init_actions' );
// ADD OPTIONS TO VISUAL COMPOSER ELEMENTS //
function gd_after_init_actions() {
// ADD FULL WIDTH CHECKBOX TO SINGLE IMAGE ELEMENTS //
$single_image_attributes = array(
'type' => 'checkbox',
'class' => 'full_width_image',
'param_name' => 'full_width_image',
'value' => array('Force Full Width' => true),
'weight' => 1
);
vc_add_param('vc_single_image', $single_image_attributes);
}
这将“强制全宽”复选框添加到 Page Builder 的标准“单个图像”元素。该复选框完美显示,如果我选中它,保存然后查看网站的前端,该复选框确实有效;复选框值已保存,图像被拉伸到全宽。但是,如果我回到后端并单击 Single Image 元素再次编辑它的设置,则该复选框将变为未选中状态,并且它保存的值将丢失。
同样,对于我使用 vc_map() 添加选项的插件,这里有一个示例:
function vc_before_init_actions(){
// Stop all if VC is not enabled
if ( !defined( 'WPB_VC_VERSION' ) ) {
return;
}
// ELEMENT CLASS //
class vcResponsiveYouTubeVideo extends WPBakeryShortCode {
// ELEMENT INIT //
function __construct() {
add_action( 'init', array( $this, 'vc_youtube_video_mapping' ) );
add_shortcode( 'vc_youtube', array( $this, 'vc_youtube_video_html' ) );
}
// ELEMENT MAPPING //
public function vc_youtube_video_mapping() {
// Map the block with vc_map()
$youtubeIcon = plugins_url('responsive-youtube-icon.png',__FILE__ );
vc_map(
array(
'name' => __('Responsive YouTube Video', 'text-domain'),
'base' => 'vc_youtube',
'category' => __('Custom Elements', 'text-domain'),
'icon' => $youtubeIcon,
'params' => array(
array(
'type' => 'checkbox',
'param_name' => 'lightbox',
'value' => array('Pop up video in lightbox' => true),
'admin_label' => false,
'weight' => 0,
'group' => 'Custom Group'
),
)
)
);
}
[etc...]
}
这只是代码的一个片段,还有更多内容,但这只是与我在这个特定插件中拥有的复选框选项之一有关的部分。就像前面的例子一样,如果我检查它并保存选项,它可以工作,但是如果我回到元素的设置,它就会清除。
甚至设置为默认选中的复选框:
array(
'type' => 'checkbox',
'param_name' => 'branding',
'value' => array('Keep YouTube Branding in Control Bar' => true),
'std' => true,
'admin_label' => false,
'weight' => 0,
'group' => 'Custom Group'
),
单击打开设置窗口后,此复选框仍会清除。
我已经进行了相当多的测试,看来这个问题(到目前为止)只存在于复选框中。我创建的所有其他输入,例如文本字段、颜色选择器、下拉列表等,在我重新打开设置窗口时都可以正常保存并保留它们的值。
有人对此有任何想法吗?