'', // Unused. Messages start at index 1. 1 => $this->post_created_message(), // Updated. 2 => $this->post_created_message(), 3 => __( 'Form deleted.', 'advanced-members' ), 4 => __( 'Form updated.', 'advanced-members' ), 5 => false, // Post type does not support revisions. 6 => $this->post_created_message( true ), // Created. 7 => __( 'Form saved.', 'advanced-members' ), 8 => __( 'Form submitted.', 'advanced-members' ), 9 => __( 'Form scheduled for.', 'advanced-members' ), 10 => __( 'Form draft updated.', 'advanced-members' ), ); return $messages; } /** * Renders the post type created message. * * @since 1.0.0 * * @param boolean $created True if the post was just created. * @return string */ public function post_created_message( $created = false ) { global $post_id; $title = get_the_title( $post_id ); /* translators: %s post type name */ $item_saved_text = sprintf( __( '%s form updated', 'advanced-members' ), $title ); if ( $created ) { /* translators: %s post type name */ $item_saved_text = sprintf( __( '%s form created', 'advanced-members' ), $title ); } $add_fields_link = wp_nonce_url( admin_url( 'post-new.php?post_type=acf-field-group&use_post_type=' . $post_id ), 'add-fields-' . $post_id ); $create_form_link = admin_url( 'post-new.php?post_type=amem-form' ); $duplicate_form_link = wp_nonce_url( admin_url( 'post-new.php?post_type=amem-form&use_post_type=' . $post_id ), 'acfduplicate-' . $post_id ); ob_start(); ?>

post_type ) ) { return; } add_filter( 'acf/prepare_field/name=amem_form_shortcode_message', array( $this, 'display_form_shortcode' ), 10, 1 ); add_filter( 'add_post_metadata', array( $this, 'should_add_form_key_meta' ), 10, 3 ); add_action( 'acf/add_meta_boxes', array( $this, 'add_fields_meta_box' ), 10, 0 ); parent::current_screen(); } /** * Settings Fields * * @since 1.0.0 */ public function register_fields() { global $post, $amem_current_post; static $registered; if ( isset($registered) ) return; $amem_current_post = $post; $form_ajax = amem()->options->get('ajax_submit'); $post_id = $amem_current_post->ID; $active = $this->is_active( $amem_current_post ); $general_fields = [ // General Tab array ( 'label' => __( 'General', 'advanced-members' ), 'prefix' => 'amem_form', 'key' => 'general_tab', 'name' => '', 'type' => 'tab', 'instructions' => '', 'required' => 0, 'conditional_logic' => 0, 'wrapper' => array ( 'width' => '', 'class' => '', 'id' => '', ), 'placement' => 'top', 'endpoint' => 0, ), array( 'prefix' => 'amem_form', 'key' => 'shortcode_message', 'name' => 'amem_form_shortcode_message', 'label' => __( 'Shortcode', 'advanced-members' ), 'type' => 'message', ), array( 'prefix' => 'amem_form', 'key' => 'select_type', 'name' => 'select_type', // 'type' => 'button_group', 'type' => 'radio', 'layout' => 'horizontal', 'label' => __( 'Form Type', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'select_type', true ), 'default' => 'registration', 'choices' => array( 'registration' => __( 'Registration', 'advanced-members' ), 'login' => __( 'Login', 'advanced-members' ), 'account' => __( 'Account', 'advanced-members' ), ), ), array( 'prefix' => 'amem_form', 'key' => 'ajax_override', 'name' => 'ajax_override', 'type' => 'true_false', 'label' => __( 'Override Global AJAX setting', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'ajax_override', true ), 'default' => 0, 'default_value' => 0, 'instructions' => __( 'Override the Global AJAX option and force the Form AJAX setting', 'advanced-members' ), // 'message' => __( 'Enable/disable AJAX form submit instead of page load.', 'advanced-members' ), 'ui' => 1, ), array( 'prefix' => 'amem_form', 'key' => 'ajax', 'name' => 'ajax', 'type' => 'true_false', 'label' => __( 'AJAX Submit', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'ajax', true ), 'default' => 0, 'default_value' => 0, 'instructions' => __( 'Enable/disable AJAX form submit instead of page load. This overrides the global option and is overridden by the shortcode attribute ajax="0"', 'advanced-members' ), // 'message' => __( 'Enable/disable AJAX form submit instead of page load.', 'advanced-members' ), 'ui' => 1, 'conditions' => array( 'field' => 'ajax_override', 'operator' => '==', 'value' => '1', ), ), ]; if ( amem()->options->getmodule('_use_recaptcha') ) { if ( !amem()->recaptcha->is_ready() ) { $general_fields[] = array( 'label' => __( 'reCAPTCHA disabled', 'advanced-members' ), 'type' => 'message', 'name' => 'recaptcha_disabled', 'key' => 'recaptcha_disabled', 'prefix' => 'amem_form', /* translators: 1: Settings URL, 2: reCAPTCHA console URL */ 'message' => '
' . sprintf( __( 'Valid Google reCAPTCHA site key and secret key should be set before applying reCAPTCHA to the form. reCAPTCHA API Admin', 'advanced-members' ), '/wp-admin/edit.php?post_type=acf-field-group&page=amem_settings', 'https://www.google.com/recaptcha/admin' ) . '
', ); } else { // $general_fields[] = array( // 'prefix' => 'amem_form', // 'key' => 'recaptcha_override', // 'name' => 'recaptcha_override', // 'type' => 'true_false', // 'label' => __( 'Override Global reCAPTCHA setting', 'advanced-members' ), // 'default' => 0, // 'default_value' => 0, // 'ui' => 1, // ); $general_fields[] = array( 'prefix' => 'amem_form', 'key' => 'recaptcha', 'name' => 'recaptcha', 'type' => 'true_false', 'label' => __( 'Use reCAPTCHA', 'advanced-members' ), 'default' => 0, 'default_value' => 0, 'instructions' => __( 'Check form submission with reCAPTCHA.', 'advanced-members' ), 'ui' => 1, // 'conditions' => array( // 'field' => 'recaptcha_override', // 'operator' => '==', // 'value' => '1', // ), ); } } $login_fields = [ // show rememberme array( 'type' => 'true_false', 'key' => 'login_rememberme', 'name' => 'login_rememberme', 'prefix' => 'amem_form', 'label' => __( 'Show "Remember Me"', 'advanced-members' ), 'instructions' => __( 'Allow users to choose If they want to stay signed in even after closing the browser.', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'login_rememberme', true ), // 'default_value' => 1, 'ui' => 1, 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'login', ), ), ), // show forgot password array( 'type' => 'true_false', 'key' => 'login_password_reset', 'name' => 'login_password_reset', 'prefix' => 'amem_form', 'label' => __( 'Forgot Password Link', 'advanced-members' ), 'instructions' => __( 'Show the forgot password link in the login form', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'login_password_reset', true ), 'ui' => 1, // 'default_value' => 1, 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'login', ), ), ), array( 'type' => 'true_false', 'key' => 'login_extra_button', 'name' => 'login_extra_button', 'prefix' => 'amem_form', 'label' => __( 'Extra Button', 'advanced-members' ), 'instructions' => __( 'Use a secondary button on the login form.', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'login_extra_button', true ), 'ui' => 1, 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'login', ), ), ), // extra button text array( 'type' => 'text', 'name' => 'login_extra_text', 'key' => 'login_extra_text', 'prefix' => 'amem_form', 'label' => __( 'Secondary Button Text', 'advanced-members' ), 'instructions' => __( 'Secondary button text on the login form. Leave empty for "Register"', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'login_extra_text', true ), 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'login', ), array( 'field' => 'login_extra_button', 'operator' => '==', 'value' => '1', ), ), ), // extra button url array( 'type' => 'text', 'name' => 'login_extra_url', 'key' => 'login_extra_url', 'prefix' => 'amem_form', 'label' => __( 'Secondary Button URL', 'advanced-members' ), 'instructions' => __( 'Secondary button URL. Leave empty to use the Registration page URL', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'login_extra_url', true ), 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'login', ), array( 'field' => 'login_extra_button', 'operator' => '==', 'value' => '1', ), ), ), ]; $registration_fields = [ array( 'type' => 'select', 'name' => 'regist_role', 'key' => 'regist_role', 'prefix' => 'amem_form', 'label' => __( 'Registration Role', 'advanced-members' ), 'instructions' => __( 'The role assigned upon registration through this sign-up form.', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'regist_role', true ), 'multiple' => false, 'default' => 'subscriber', 'allow_null' => 1, 'ui' => 0, 'multiple' => 0, // 'hide_search' => true, 'choices' => $this->get_user_role_choice( array('administrator')), 'conditions' => [ [ 'field' => 'select_type', 'operator' => '==', 'value' => 'registration', ], ], ), array( 'type' => 'select', 'name' => 'regist_status', 'key' => 'regist_status', 'prefix' => 'amem_form', 'label' => __( 'Registration Status', 'advanced-members' ), 'instructions' => __( 'Select what action is taken after a person registers on your site. Depending on the status you can redirect them to their profile, a custom url or show a custom message', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'regist_status', true ), 'default' => 1, 'default_value' => 'mailcheck', 'choices' => array( 'approve' => __( 'Auto Approve', 'advanced-members' ), 'mailcheck' => __( 'Requires Email Activation', 'advanced-members' ), ), 'conditions' => array( 'field' => 'select_type', 'operator' => '==', 'value' => 'registration', ), ), array( 'type' => 'true_false', 'name' => 'regist_force_show_message', 'key' => 'regist_force_show_message', 'prefix' => 'amem_form', 'label' => __( 'Force show success message', 'advanced-members' ), 'instructions' => __( 'Do not redirect after registration and show a message instead of the form. Useful when "Requires Email Activation" is selected above.', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'regist_status', true ), 'default' => 0, 'default_value' => 0, 'ui' => 1, 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'registration', ), array( 'field' => 'regist_status', 'operator' => '==', 'value' => 'mailcheck', ), ), ), array( 'type' => 'textarea', 'name' => 'registration_show_message', 'key' => 'registration_show_message', 'prefix' => 'amem_form', 'label' => __( 'The custom message', 'advanced-members' ), 'value' => get_post_meta( $post_id, 'registration_show_message', true ), 'default_value' => __('Thank you for registering. Before you can login we need you to activate your account by clicking the activation link in the email we just sent you.', 'advanced-members'), 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'registration', ), array( 'field' => 'regist_force_show_message', 'operator' => '==', 'value' => '1', ), ), ), ]; $account_fields = []; $account_fields[] = array( 'type' => 'message', 'name' => 'account_unset_fields', 'key' => 'account_unset_fields', 'prefix' => 'amem_form', 'disabled' => true, 'readonly' => true, 'label' => __( 'Unset Fields', 'advanced-members' ), 'message' => __( 'Advanced Members will unset username, user email, and user password fields and show them with core fields.', 'advanced-members' ), 'conditions' => array( array( 'field' => 'select_type', 'operator' => '==', 'value' => 'account', ), ), ); $submit_text = __( 'Submit', 'advanced-members' ); if ( !empty($_GET['post'])) { $submit_text = amem_submit_text_default( $post_id ); // $form_type = get_field( 'select_type', (int) $_GET['post'] ); // $form_type = get_post_meta( $post_id, 'select_type', true ); // switch ( $form_type ) { // case 'login': // $submit_text = __( 'Login', 'advanced-members' ); // break; // case 'registration': // $submit_text = __( 'Register', 'advanced-members' ); // break; // case 'account': // $submit_text = __( 'Update Account', 'advanced-members' ); // break; // default: // $submit_text = apply_filters( 'amem/form/submit_text_default/type=' . $form_type, $submit_text ); // break; // } } $general_fields_more = [ // array ( // 'key' => 'description', // 'label' => __( 'Description', 'advanced-members' ), // 'name' => 'description', // 'type' => 'textarea', // 'instructions' => '', // 'required' => 0, // 'conditional_logic' => 0, // 'wrapper' => array ( // 'width' => '', // 'class' => '', // 'id' => '', // ), // 'default_value' => '', // 'tabs' => 'all', // 'toolbar' => 'full', // 'media_upload' => 1, // ), array( 'type' => 'text', 'name' => 'submit_text', 'key' => 'submit_text', 'prefix' => 'amem_form', 'label' => __( 'Submit Button Text', 'advanced-members' ), 'instructions' => __( 'Submit button text. Leave empty to use the default text.', 'advanced-members' ), // 'value' => get_post_meta( $post_id, 'submit_text', true ), 'placeholder' => $submit_text, // 'conditions' => array( // 'field' => 'select_type', // 'operator' => '!=', // 'value' => 'account', // ), ), ]; $general_tab = array_merge( $general_fields, $login_fields, $registration_fields, $account_fields, $general_fields_more ); /* 차후 탭 확장용 $visibility_tab = [ // Visivility Tab array ( 'key' => 'visibility_tab', 'label' => __( 'Visibility', 'advanced-members' ), 'name' => '', 'type' => 'tab', 'instructions' => '', 'required' => 0, 'conditional_logic' => 0, 'wrapper' => array ( 'width' => '', 'class' => '', 'id' => '', ), 'placement' => 'left', 'endpoint' => 0, ), array ( 'key' => 'num_of_submissions', 'label' => __( 'Number of submissions', 'advanced-members' ), 'name' => 'num_of_submissions', 'type' => 'number', 'instructions' => '', 'required' => 0, 'conditional_logic' => 0, 'wrapper' => array ( 'width' => '50', 'class' => '', 'id' => '', ), 'default_value' => 0, 'placeholder' => '', 'prepend' => '', 'append' => '', 'min' => '', 'max' => '', 'step' => '', 'readonly' => true, ), array ( 'key' => 'field_form_num_of_views', 'label' => __( 'Number of times viewed', 'advanced-members' ), 'name' => 'form_num_of_views', 'type' => 'number', 'instructions' => '', 'required' => 0, 'conditional_logic' => 0, 'wrapper' => array ( 'width' => '50', 'class' => '', 'id' => '', ), 'default_value' => 0, 'placeholder' => '', 'prepend' => '', 'append' => '', 'min' => '', 'max' => '', 'step' => '', 'readonly' => true, ), ]; $fields = array_merge($general_tab, $visibility_tab); */ $fields = $general_tab;//array_merge($general_tab); $fields[] = array( 'prefix' => 'amem_form', 'key' => 'active', 'name' => 'active', 'label' => __( 'Active', 'advanced-members' ), 'instructions' => __( 'Enable or disable this form.', 'advanced-members' ), 'type' => 'true_false', 'value' => $active, 'default_value'=> 1, 'default' => 1, 'ui' => 1, ); $settings_field_group = array ( 'key' => 'amem-form-admin-settings', 'title' => __( 'Form settings', 'advanced-members' ), 'location' => array ( array ( array ( 'param' => 'post_type', 'operator' => '==', 'value' => 'amem-form', ), ), ), 'menu_order' => 0, 'position' => 'normal', 'style' => 'default', 'label_placement' => 'top', 'instruction_placement' => 'field', 'hide_on_screen' => '', 'active' => 1, 'description' => '', 'fields' => $fields ); $settings_field_group = apply_filters( 'amem/member_form/settings_fields', $settings_field_group ); acf_add_local_field_group( $settings_field_group ); $registered = true; } /** * User Role 목록을 반환 * * @since 1.0.0 * @param array $unset role 목록에서 unset 할 role 목록 * @return array $roles */ function get_user_role_choice( $unset = array() ) { global $wp_roles; $all_roles = $wp_roles->roles; $roles = array(); foreach ($all_roles as $key => $role) { $roles[$key] = translate_user_role($role['name']); } foreach ($unset as $unsetkey) { unset($roles[$unsetkey]); } return $roles; } function render_settings_meta_box( $post, $metabox ) { // Render fields. // $this->register_fields(); $field_group = acf_get_local_field_group( 'amem-form-admin-settings' ); $fields = acf_get_fields( 'amem-form-admin-settings' ); acf_render_fields( $fields, $post->ID, 'div', $field_group['instruction_placement'] ); } /** * amem-form post type 에 메타박스를 추가 * * @since 1.0.0 * */ function add_fields_meta_box() { // add_meta_box( 'acf-amem-form-settings', 'Settings', array( $this, 'render_settings_meta_box' ), 'amem-form', 'normal', 'default' ); // Connected Field Groups add_meta_box( 'amem-field-group-fields', __( 'Field Groups', 'advanced-members' ), array( $this, 'fields_meta_box_callback' ), 'amem-form', 'normal', 'default', null ); // Connected Pages add_meta_box( 'amem-connected-pages', __( 'Form Pages', 'advanced-members' ), array( $this, 'pages_meta_box_callback' ), 'amem-form', 'normal', 'default', null ); } /** * FORM metabox callback * 현재 폼 과 연결된 필드 그룹 과 필드 리스트 * * @since 1.0.0 * */ function fields_meta_box_callback() { global $post; $form = amem_get_form( $post->ID ); // Get field groups for the current form $field_groups = amem_get_form_field_groups( $form['key'] ); $create_form = add_query_arg( 'amem_form', $form['key'], admin_url( 'post-new.php?post_type=acf-field-group' ) ); if ( $post->post_title ) { $create_form = add_query_arg( 'post_title', $this->get_field_group_title($post->post_title), $create_form ); } $all_fg_url = admin_url( 'edit.php?post_type=acf-field-group&amem_form=' . sanitize_key($form['key']) ); ?>

See all field groups for this form »

$field_group ) : // Get all fields for this field group $fields = acf_get_fields( $field_group ); ?>

post_content, '[advanced-members') === false ) return; $regex = '!\[advanced-members([^\]]+)form=("|\')?([0-9a-z_]+)([^\]]+)\]!'; if ( preg_match_all( $regex, $post->post_content, $m ) && is_array($m[3]) ) { foreach( $m[3] as $match ) { add_post_meta( $post_id, '_amem_form_inserted', trim($match) ); } } if ( preg_match_all( '!\[advanced-members-([^ ]+)\]!', $post->post_content, $m ) ) { foreach ( $m[1] as $match ) { add_post_meta( $post_id, '_amem_form_inserted', trim($match) ); } } } function pages_meta_box_callback() { global $post, $wpdb; $form = amem_get_form( $post->ID ); $needs_page = apply_filters( 'amem/admin/form/needs_page_connection', true, $form ); if ( false === $needs_page ) return; if ( true !== $needs_page ) { echo wp_kses_post($needs_page); return; } $post_id = $post->ID; $form_key = $form['key']; if ( $form['type'] == 'account' ) { $meta_values = ['account']; } else { $meta_values = [$post_id, $form_key]; } $args = [ 'post_type' => 'page', 'post_status' => 'any', 'nopaging' => 1, 'meta_query' => [ [ 'key' => '_amem_form_inserted', 'value' => $meta_values, 'compare' => 'IN' ] ] ]; esc_html_e( 'Below are the pages where this form is embedded. You can view each Page on the frontend or edit it in the admin screen.', 'advanced-members' ); $pages = new \WP_Query($args); $allPages = false; if ( $pages->have_posts() ) { $allPages = $pages->posts; } else { $allPages = $this->_hard_search_pages($form); } echo ''; } protected function _hard_search_pages($form) { global $wpdb; if ( get_post_meta( $form['post_id'], '_hard_search_pages_done', true ) ) return false; if ( $form['type'] == 'account' ) { $where = "post_content LIKE '%%[advanced-members-account]%%'"; } else { $where = "( post_content LIKE '%%[advanced-members form=\"{$form['post_id']}\"%%' OR post_content LIKE '%%[advanced-members form=\"{$form['key']}\"%%' )"; } $sql = "SELECT * FROM $wpdb->posts WHERE $where AND post_status NOT LIKE 'trashed' AND post_type LIKE 'page'"; if ( $pages = $wpdb->get_results($sql) ) { foreach( $pages as $page ) { $this->save_form_for_page($page->ID, $page); } } update_post_meta( $form['post_id'], '_hard_search_pages_done', true ); } function get_field_group_title($title) { global $wpdb; $i = 1; while( true ) { $exists = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type LIKE 'acf-field-group' AND post_title LIKE %s LIMIT 1", $title ) ); if ( $exists ) { $title = $title . ' ' . zeroise( $i, 3 ); } else { break; } } return $title; } /** * Set status, Save default form key and meta data outside ACF * * @since 1.0.0 * @param number $post_id * @param object $post */ function save_post( $post_id, $post ) { $do_save = parent::save_post( $post_id, $post ); if ( true !== $do_save ) return; if( ! get_post_meta( $post->ID, 'form_key', true ) ) { $form_key = 'form_' . uniqid(); update_post_meta( $post->ID, 'form_key', $form_key ); } if ( isset($_POST['amem_field_group_sort']) && is_array($_POST['amem_field_group_sort']) ) {// phpcs:ignore WordPress.Security.NonceVerification.Missing -- Validated in verify_save_post $sorted = array_map( 'intval', $_POST['amem_field_group_sort'] ); update_post_meta( $post_id, 'amem_field_group_sort', $sorted ); } } /** * amem_form_shortcode_message 필드에서 보여줄 숏코드 를 반환 * * @since 1.0.0 * @param array $field The columns array. * @return array $field */ function display_form_shortcode( $field ) { global $post; if ( $post ) { $code = sprintf( '[advanced-members form="%s"]', $post->ID ); $message = '' . $code . ''; $field['message'] = $message; } return $field; } /** * Stops new form keys from being saved to a form post if a key already exists. * Some plugins that duplicate posts will cause trouble as forms will end up with multiple form keys. * * @since 1.0.0 * @param bool $check * @param int $object_id * @param string $meta_key * @return bool $check */ function should_add_form_key_meta( $check, $object_id, $meta_key ) { if ( 'form_key' !== $meta_key ) { return $check; } // If a form key already exists, we don't want to save another one if ( metadata_exists( 'post', $object_id, $meta_key ) ) { return false; } return $check; } } Form::getInstance(); endif; // Class exists check. ?>