好吧,对于任何在这里寻求解决方案的人来说。
以下是对我有用的步骤。请注意,这是一个黑客,但它的工作。它是使用CF7和ACF完成的。
在主站点上创建表单在函数中创建函数。php打印(使用do\\u shortcode)表单的通用快捷码(由CF7给出)
function get_general_field($variable) {
if (get_current_blog_id() != 1) {
switch_to_blog(1);
}
$custom_fields = do_shortcode(get_field($variable, 17284));
if (ms_is_switched()) {
restore_current_blog();
}
return $custom_fields;
}
现在为您的主站点创建一个通用ACF字段组(例如,仅在站点1上显示,其中包含一个用于“通用表单”的文本字段
您将在主站点上创建一个私人页面,称之为“常规字段”,您将在其中粘贴CF7中的短代码。
现在,在主题文件中,只需调用get\\u general\\u字段(“field\\u NAME”)。
此时,将显示表单,但您需要添加css和js以进行ajax验证。
if( class_exists( \'WPCF7\' ) ) {
function yuna_design_manually_enqueue_wpcf7_scripts() {
global $post;
if( is_single() || strpos( $post->post_name, \'group\' ) ) {
if( function_exists( \'wpcf7_enqueue_scripts\' ) )
wpcf7_enqueue_scripts();
if( function_exists( \'wpcf7_enqueue_styles\' ) )
wpcf7_enqueue_styles();
}
}
add_filter( \'wpcf7_load_js\', \'__return_false\' ); // Disable CF7 Js
add_filter( \'wpcf7_load_css\', \'__return_false\' ); // Disable CF7 CSS
add_action( \'wp_enqueue_scripts\', \'yuna_design_manually_enqueue_wpcf7_scripts\' );
}
现在,一切都正常了,但你的控制台中有两个错误,还有一个循环表单,它从不回叫子网站(主站点1除外)。这是因为它正在调用子网站进行验证,并且由于您没有具有正确id的表单,它将返回并出错。
(经过一些思考和测试,我认为这可能是可选的)您需要修改CF7中的两个文件(我使用的是版本5.1.7)。第一个是:contact-form-7/includes/restapi。在打开wpcf7\\u rest\\u api\\u init(){之后添加以下代码:
if (get_current_blog_id() != 1) {
switch_to_blog(1);
}
。。。其中1是我的主站点id。。。
另外,不要忘记在该函数的末尾(在结束“}”之前)添加以下代码:
if (ms_is_switched()) {
restore_current_blog();
}
您需要在contact-form-7/includes/js/scripts中查找“wpcf7.getId($form)”的两个实例。js。您将发现一个动态链接验证,您需要将其设置为静态并指向主站点url。基本上:
url:wpcf7。apiSettings。getRoute(“/联系表单/”+wpcf7.getId($表单)+“/反馈”),
需要如下所示:
url: \'HTTPS://YOURWEBSITEURL.COM/wp-json/contact-form-7/v1/contact-forms/\' + wpcf7.getId( $form ) + \'/feedback\',
瞧,在子网站中测试表单,ajax错误应该可以正常工作。在wordpress设置中,您现在有了一个可用于多个站点的表单。
请注意,这是一个非常临时的解决方案,是为我的一个项目所做的一次黑客攻击,如果能有一个对CF7的多站点支持,那就太好了,因为这并不是插件作者要做的一个大调整。
请随时评论并添加此解决方案。我在网上看了很长时间,没有发现任何东西工作正常。
干杯
Maxime Bellefluer(Maxime Bellefluer)
小型企业Wordpress积分器www。yunadesign。com公司