Forum Replies Created

Viewing 2 replies - 1 through 2 (of 2 total)
  • Thread Starter ali56

    (@ali56)

    hi Michael
    i changed This code
    'id' => 'review_criteria',
    to =
    'id' => 'field_group',
    The problem was solved
    Is this correct?
    thanks

    Thread Starter ali56

    (@ali56)

    hi Michael
    Thanks for your support
    plz see, this code worked and submit post
    save title & countent.but not save hotel name & price
    also I know very little php But I need it

    /**
     * Register the form and fields for our front-end submission form
     */
    function wds_frontend_form_register() {
    	$cmb = new_cmb2_box( array(
    		'id'           => 'front-end-post-form',
    		'object_types' => array( 'post' ),
    		'hookup'       => false,
    		'save_fields'  => false,
    	) );
    	$cmb->add_field( array(
    		'name'    => __( 'New Post Title', 'wds-post-submit' ),
    		'id'      => 'submitted_post_title',
    		'type'    => 'text',
    		'default' => __( 'New Post', 'wds-post-submit' ),
    	) );
    	$cmb->add_field( array(
    		'name'    => __( 'New Post Content', 'wds-post-submit' ),
    		'id'      => 'submitted_post_content',
    		'type'    => 'wysiwyg',
    		'options' => array(
    			'textarea_rows' => 12,
    			'media_buttons' => false,
    		),
    	) );
    
    $group_field_id = $cmb->add_field( array(
    'id' => 'review_criteria',
    'type'  => 'group',
    'options'  => array(
    'group_title' => __(' hotel No. {#}', 'cmb'),
    'add_button' => __('insert hotel', 'cmb'),
    'remove_button' => __('remove', 'cmb'),
    'sortable'  => true,
    ),
    ));
    $cmb->add_group_field( $group_field_id, array(
    'name' => 'hotel name',
    'id'   => 'ts_hotel',
    'type' => 'text',
    ));
    $cmb->add_group_field( $group_field_id, array(
    'name'  => 'price',
    'id'  => 'ts_price',
    'type'  => 'text',
    ));
    
    }
    add_action( 'cmb2_init', 'wds_frontend_form_register' );
    /**
     * Gets the front-end-post-form cmb instance
     *
     * @return CMB2 object
     */
    function wds_frontend_cmb2_get() {
    	// Use ID of metabox in wds_frontend_form_register
    	$metabox_id = 'front-end-post-form';
    	// Post/object ID is not applicable since we're using this form for submission
    	$object_id  = 'fake-oject-id';
    	// Get CMB2 metabox object
    	return cmb2_get_metabox( $metabox_id, $object_id );
    }
    /**
     * Handle the cmb-frontend-form shortcode
     *
     * @param  array  $atts Array of shortcode attributes
     * @return string       Form html
     */
    function wds_do_frontend_form_submission_shortcode( $atts = array() ) {
    	// Get CMB2 metabox object
    	$cmb = wds_frontend_cmb2_get();
    	// Get $cmb object_types
    	$post_types = $cmb->prop( 'object_types' );
    	// Current user
    	$user_id = get_current_user_id();
    	// Parse attributes
    	$atts = shortcode_atts( array(
    		'post_author' => $user_id ? $user_id : 1, // Current user, or admin
    		'post_status' => 'pending',
    		'post_type'   => reset( $post_types ), // Only use first object_type in array
    	), $atts, 'cmb-frontend-form' );
    	/*
    	 * Let's add these attributes as hidden fields to our cmb form
    	 * so that they will be passed through to our form submission
    	 */
    	foreach ( $atts as $key => $value ) {
    		$cmb->add_hidden_field( array(
    			'field_args'  => array(
    				'id'    => "atts[$key]",
    				'type'  => 'hidden',
    				'default' => $value,
    			),
    		) );
    	}
    	// Initiate our output variable
    	$output = '';
    	// Get any submission errors
    	if ( ( $error = $cmb->prop( 'submission_error' ) ) && is_wp_error( $error ) ) {
    		// If there was an error with the submission, add it to our ouput.
    		$output .= '<h3>' . sprintf( __( 'There was an error in the submission: %s', 'wds-post-submit' ), '<strong>'. $error->get_error_message() .'</strong>' ) . '</h3>';
    	}
    	// If the post was submitted successfully, notify the user.
    	if ( isset( $_GET['post_submitted'] ) && ( $post = get_post( absint( $_GET['post_submitted'] ) ) ) ) {
    		// Get submitter's name
    		$name = get_post_meta( $post->ID, 'submitted_author_name', 1 );
    		$name = $name ? ' '. $name : '';
    		// Add notice of submission to our output
    		$output .= '<h3>' . sprintf( __( 'Thank you%s, your new post has been submitted and is pending review by a site administrator.', 'wds-post-submit' ), esc_html( $name ) ) . '</h3>';
    	}
    	// Get our form
    	$output .= cmb2_get_metabox_form( $cmb, 'fake-oject-id', array( 'save_button' => __( 'Submit Post', 'wds-post-submit' ) ) );
    	return $output;
    }
    add_shortcode( 'cmb-frontend-form', 'wds_do_frontend_form_submission_shortcode' );
    /**
     * Handles form submission on save. Redirects if save is successful, otherwise sets an error message as a cmb property
     *
     * @return void
     */
    function wds_handle_frontend_new_post_form_submission() {
    	// If no form submission, bail
    	if ( empty( $_POST ) || ! isset( $_POST['submit-cmb'], $_POST['object_id'] ) ) {
    		return false;
    	}
    	// Get CMB2 metabox object
    	$cmb = wds_frontend_cmb2_get();
    	$post_data = array();
    	// Get our shortcode attributes and set them as our initial post_data args
    	if ( isset( $_POST['atts'] ) ) {
    		foreach ( (array) $_POST['atts'] as $key => $value ) {
    			$post_data[ $key ] = sanitize_text_field( $value );
    		}
    		unset( $_POST['atts'] );
    	}
    	// Check security nonce
    	if ( ! isset( $_POST[ $cmb->nonce() ] ) || ! wp_verify_nonce( $_POST[ $cmb->nonce() ], $cmb->nonce() ) ) {
    		return $cmb->prop( 'submission_error', new WP_Error( 'security_fail', __( 'Security check failed.' ) ) );
    	}
    	// Check title submitted
    	if ( empty( $_POST['submitted_post_title'] ) ) {
    		return $cmb->prop( 'submission_error', new WP_Error( 'post_data_missing', __( 'New post requires a title.' ) ) );
    	}
    	// And that the title is not the default title
    	if ( $cmb->get_field( 'submitted_post_title' )->default() == $_POST['submitted_post_title'] ) {
    		return $cmb->prop( 'submission_error', new WP_Error( 'post_data_missing', __( 'Please enter a new title.' ) ) );
    	}
    	/**
    	 * Fetch sanitized values
    	 */
    	$sanitized_values = $cmb->get_sanitized_values( $_POST );
    	// Set our post data arguments
    	$post_data['post_title']   = $sanitized_values['submitted_post_title'];
    	unset( $sanitized_values['submitted_post_title'] );
    	$post_data['post_content'] = $sanitized_values['submitted_post_content'];
    	unset( $sanitized_values['submitted_post_content'] );
    	// Create the new post
    	$new_submission_id = wp_insert_post( $post_data, true );
    	// If we hit a snag, update the user
    	if ( is_wp_error( $new_submission_id ) ) {
    		return $cmb->prop( 'submission_error', $new_submission_id );
    	}
    	/**
    	 * Other than post_type and post_status, we want
    	 * our uploaded attachment post to have the same post-data
    	 */
    	unset( $post_data['post_type'] );
    	unset( $post_data['post_status'] );
    
    	// Loop through remaining (sanitized) data, and save to post-meta
    	foreach ( $sanitized_values as $key => $value ) {
    		if ( is_array( $value ) ) {
    			$value = array_filter( $value );
    			if( ! empty( $value ) ) {
    				update_post_meta( $new_submission_id, $key, $value );
    			}
    		} else {
    			update_post_meta( $new_submission_id, $key, $value );
    		}
    	}
    	/*
    	 * Redirect back to the form page with a query variable with the new post ID.
    	 * This will help double-submissions with browser refreshes
    	 */
    	wp_redirect( esc_url_raw( add_query_arg( 'post_submitted', $new_submission_id ) ) );
    	exit;
    }
    add_action( 'cmb2_after_init', 'wds_handle_frontend_new_post_form_submission' );
Viewing 2 replies - 1 through 2 (of 2 total)