我在这里看到了一些问题。
1)您正在对$results
(即$results .=
应该是$results =
)
2)你假设$webinar_code
将始终可用。如果重定向到的页面不完全相同,则情况不会如此,或者如果重定向到的页面具有短代码但属性不同,则会更新错误的页面。
我会这样做:
add_shortcode( \'enroll_form_button\', \'enroll_form_button_function\' );
function enroll_form_button_function( $atts ) {
$atts = shortcode_atts( array( \'redirect\' => \'#\', \'webinar\' => \'\', ), $atts );
$redirect_to = $atts[\'redirect\'];
$webinar_code = $atts[\'webinar\'];
$results = "<form id=\\"form-{$webinar_code}\\" method=\\"post\\" action=\\"{$redirect_to}\\"><input type=\\"submit\\" value=\\"{$webinar_code}\\" name=\\"webinar_code\\" /></form>";
return $results;
}
add_action( \'wp\', \'check_enroll_form_submit\' );
function check_enroll_form_submit(){
if( ! isset( $_POST[\'webinar_code\'], $_POST[\'webinar_nonce\'] ) ){
return;
}
$webinar_code = sanitize_text_field( $_POST[\'webinar_code\'] );
update_user_meta( get_current_user_id(), $webinar_code, \'true\' );
}
我在这里做了几件事:
移动检查以将用户的元更新到wp
操作已清理发送的值$_POST
(即使你知道它是安全的,但保持对任何类型的$_POST
$_GET
或$_REQUEST
数据)
不要在名称中传递值,只需在值中传递它(我认为您对该部分考虑过多)