Forum Replies Created

Viewing 10 replies - 1 through 10 (of 10 total)
  • Thread Starter Jamie

    (@rabillion)

    the serialized values has been overwritten after update post meta

    i’ve solved it by saving the additional fields without splitting them

    It’s probably not the best solution, but it works me

        /**
         * @param $override_value
         * @param $value
         * @param $object_id
         * @param $field_args
         *
         * @return mixed
         */
        public function cmb2_sanitize_date_select_field_callback( $override_value, $value, $object_id, $field_args ) {
    
            $date_select_keys = array( 'day', 'month', 'year', 'datetime' );
            
            foreach ( $date_select_keys as $key ) {
            
                if ( !empty( $value[ $key ] ) ) {
                
                    $date = strtotime( $value['day'] . '-' . $value['month'] . '-' . $value['year'] );
                    // save datetimestamp
                    // split values
                    update_post_meta( $object_id, $field_args['id'] . '_datetime', $date );
                    update_post_meta( $object_id, $field_args['id'] . '_' . $key, $value[ $key ] );
                    
                    // if only select the start date
                    // then save only the datetimestamp for end date
                    if ( $field_args['id'] != 'copa_date_end' ) {
                        update_post_meta( $object_id, 'copa_date_end' . '_datetime', $date );
                    }
                }
                
            }
            
            // in the addres-field example return was true
            return $value;
        }
    • This reply was modified 7 years, 6 months ago by Jamie.
    Thread Starter Jamie

    (@rabillion)

    it’s now working with this address field example and split_values true
    But the saved option is not selected

    • This reply was modified 7 years, 6 months ago by Jamie.
    Thread Starter Jamie

    (@rabillion)

    <?php
    
    namespace Copa\CustomFields;
    
    use Copa;
    
    /**
     * Class EventFields
     *
     * @package Copa\EventFields
     *
     */
    class EventFields {
    
        private static $prefix = Copa\PREFIX;
    
        /**
         * Initiate our hooks.
         */
        public static function init() {
    
            // Split seaialized String and saves meta for the object.
            add_filter( 'cmb2_override_meta_save', array( MetaSplit::instance(), 'meta_save' ), 100, 3 );
            add_action( 'cmb2_init', array( __CLASS__, '_register_events_formfields_metabox' ) );
            add_filter( 'cmb2_render_date_select', array( __CLASS__, 'cmb2_render_date_select_field_callback' ), 10, 5 );
    
            add_filter( 'cmb2_sanitize_date_select', array(
                __CLASS__,
                'cmb2_sanitize_date_select_field_callback',
            ), 10, 4 );
    
        }
    
        /**
         * events field
         * Hook in and add a metabox to select templates
         */
        public function _register_events_formfields_metabox() {
            $metabox = new_cmb2_box( array(
                'id'           => self::$prefix . 'eventform',
                'title'        => __( 'Termine', 'copa' ),
                'object_types' => array( 'events_posts', ),
                'classes'      => 'event-form',
                'show_names'   => true,
                'cmb_styles'   => false,
                'fields'       => array(
                    array(
                        'name'       => __( 'Ragulary Event', 'copa' ),
                        'id'         => self::$prefix . 'date_regular',
                        'type'       => 'checkbox',
                        'attributes' => array(
                            'class' => 'checkbox',
                        ),
                    ),
                    array(
                        'name'       => __( 'Email *', 'copa' ),
                        'id'         => self::$prefix . 'email',
                        'type'       => 'text_email',
                        'attributes' => array(
                            'required' => 'required',
                            'class'    => 'form-control',
                        ),
                    ),
                    array(
                        'name'       => __( 'Phone', 'copa' ),
                        'id'         => self::$prefix . 'phone',
                        'type'       => 'text',
                        'attributes' => array(
                            'class' => 'form-control',
                        ),
                    ),
                    array(
                        'name'       => __( 'Website', 'copa' ),
                        'id'         => self::$prefix . 'text_url',
                        'type'       => 'text_url',
                        'protocols'  => array( 'http', 'https' ),
                        'attributes' => array(
                            'class' => 'form-control',
                        ),
                    ),
                    array(
                        'name' => __( 'Date from', 'copa' ),
                        'id'   => self::$prefix . 'date_start',
                        'type' => 'date_select',
                    ),
                    array(
                        'name'    => __( 'Date to', 'copa' ),
                        'id'      => self::$prefix . 'date_end',
                        'type'    => 'date_select',
                        'default' => 'save_timestamp',
                    ),
                    array(
                        'name'         => 'Google Maps *',
                        'id'           => self::$prefix . 'location',
                        'type'         => 'pw_map',
                        'split_values' => true, // Save latitude and longitude as two separate fields
                        'attributes'   => array(
                            'placeholder' => __( 'Please enter your address', 'copa' ),
                            'required'    => 'required',
                        ),
                    ),
                ),
            ) );
            if ( !is_admin() ) {
                $metabox->add_field( array(
                    'name'       => __( 'Titel *', 'copa' ),
                    'id'         => self::$prefix . 'title',
                    'type'       => 'text',
                    'attributes' => array(
                        'autocomplete' => 'off',
                        'required'     => 'required',
                    ),
                ), 1 );
                $metabox->add_field( array(
                    'name'       => __( 'Text *', 'copa' ),
                    'id'         => self::$prefix . 'content',
                    'type'       => 'textarea',
                    'options'    => array(
                        'textarea_rows' => 12,
                    ),
                    'attributes' => array(
                        'maxlength' => '900',
                        'cols'      => '70',
                        'required'  => 'required',
                    ),
                ), 2 );
                $metabox->add_field( array(
                    'id'         => 'form_type',
                    'type'       => 'hidden',
                    'attributes' => array(
                        'value' => 'event',
                    ),
                ), 8 );
            }
        }
    
        /**
         * Returns options markup for a month select field.
         *
         * @param  mixed $value Selected/saved month
         *
         * @return string       html string containing all month options
         */
        public function cmb2_get_month_options( $value ) {
            $month_list = array(
                '01' => __( 'January', 'copa' ),
                '02' => __( 'February', 'copa' ),
                '03' => __( 'March', 'copa' ),
                '04' => __( 'April', 'copa' ),
                '05' => __( 'May', 'copa' ),
                '06' => __( 'June', 'copa' ),
                '07' => __( 'July', 'copa' ),
                '08' => __( 'August', 'copa' ),
                '09' => __( 'September', 'copa' ),
                '10' => __( 'October', 'copa' ),
                '11' => __( 'November', 'copa' ),
                '12' => __( 'December', 'copa' ),
            );
    
            $month_options = '';
            $month_options .= '<option disabled selected>' . __( 'Month', 'copa' ) . '</option>';
            foreach ( $month_list as $key => $month ) {
                $month_options .= '<option value="' . $key . '" ' . selected( $value, $key, false ) . '>' . $month . '</option>';
            }
    
            return $month_options;
        }
    
        /**
         * Returns options markup for a day select field.
         *
         * @param  mixed $value Selected/saved day
         *
         * @return string       html string containing all day options
         */
        public function cmb2_get_day_options( $value ) {
            $day_list    = range( 1, 31 );
            $day_options = '';
    
            $day_options .= '<option disabled selected>' . __( 'Day', 'copa' ) . '</option>';
            foreach ( $day_list as $day ) {
                $day_options .= '<option value="' . $day . '" ' . selected( $value, $day, false ) . '>' . $day . '</option>';
            }
    
            return $day_options;
        }
    
        /**
         * Returns options markup for a year select field.
         *
         * @param  mixed $value Selected/saved year
         *
         * @return string       html string containing all year options
         */
        public function cmb2_get_year_options( $value ) {
    
            $curyear      = date( 'Y' );
            $year_list    = range( $curyear, $curyear + 5 );
            $year_options = '';
    
            $year_options .= '<option disabled selected>' . __( 'Year', 'copa' ) . '</option>';
            foreach ( $year_list as $year ) {
                $year_options .= '<option value="' . $year . '" ' . selected( $value, $year, false ) . '>' . $year . '</option>';
            }
    
            return $year_options;
        }
    
        /**
         * Render Date Field.
         * @see https://github.com/WebDevStudios/CMB2/wiki/Adding-your-own-field-types#example-4-multiple-inputs-one-field-lets-create-an-address-field
         *
         * @param $field
         * @param $value
         * @param $object_id
         * @param $object_type
         * @param $field_type
         */
        public function cmb2_render_date_select_field_callback( $field, $value, $object_id, $object_type, $field_type ) {
    
            // make sure we specify each part of the value we need.
            $value = wp_parse_args( $value, array(
                'day'           => '',
                'month'         => '',
                'year'          => '',
                'datetimestamp' => '',
            ) );
    
            ?>
            <div class="alignleft">
                <?php echo $field_type->select( array(
                    'name'    => $field_type->_name( '[day]' ),
                    'id'      => $field_type->_id( '_day' ),
                    'options' => self::cmb2_get_day_options( $value['day'] ),
                    'desc'    => '',
                    'class'   => 'form-control',
                ) );
                ?>
            </div>
            <div class="alignleft">
                <?php echo $field_type->select( array(
                    'name'    => $field_type->_name( '[month]' ),
                    'id'      => $field_type->_id( '_month' ),
                    'options' => self::cmb2_get_month_options( $value['month'] ),
                    'desc'    => '',
                    'class'   => 'form-control',
                ) );
                ?>
            </div>
            <div class="alignleft">
                <?php echo $field_type->select( array(
                    'name'    => $field_type->_name( '[year]' ),
                    'id'      => $field_type->_id( '_year' ),
                    'options' => self::cmb2_get_year_options( $value['year'] ),
                    'desc'    => '',
                    'class'   => 'form-control',
                ) );
                ?>
            </div>
            <?php
            $day   = isset( $value['day'] ) ? $value['day'] : '';
            $month = isset( $value['month'] ) ? $value['month'] : '';
            $year  = isset( $value['year'] ) ? $value['year'] : '';
            ?>
            <div class="alignleft hidden">
                <?php echo $field_type->input( array(
                    'name'  => $field_type->_name( '[datetimestamp]' ),
                    'id'    => $field_type->_id( '_datetimestamp' ),
                    'value' => strtotime( $day . '-' . $month . '-' . $year ),
                    'type'  => 'hidden',
                ) ); ?>
            </div>
    
            <div class="alignleft">
                <input type="hidden">
            </div>
            <br class="clear">
            <?php
            echo $field_type->_desc( true );
    
        }
    
        /**
         * Save the datetimestap if end date not exist.
         * 
         * @param $override_value
         * @param $value
         * @param $object_id
         * @param $field_args
         *
         * @return mixed
         */
        public function cmb2_sanitize_date_select_field_callback( $override_value, $value, $object_id, $field_args ) {
    
            if ( empty( $field_args['kradblatt_date_regular'] ) && ( isset( $value['datetimestamp'] ) && ( isset( $value['day'] ) && isset( $value['month'] ) && isset( $value['year'] ) ) ) ) {
                $datetimestamp = strtotime( $value['datetimestamp'] );
                update_post_meta( $object_id, 'kradblatt_date_end_datetimestamp', $datetimestamp );
            }
    
            return $value;
        }
    }
    Thread Starter Jamie

    (@rabillion)

    That’s right. Only for not logged people

    /**
         * Initiate our hooks.
         */
        public static function init() {
            add_action( 'cmb2_init', array( __CLASS__, '_register_person_formfields_metabox' ) );
        }
    
        /**
         * person field
         * Hook in and add a metabox to select templates
         */
        public function _register_person_formfields_metabox() {
    
            new_cmb2_box( array(
                'id'           => self::$prefix . 'personform',
                'title'        => __( 'Person', 'cmb2' ),
                'object_types' => array( 'person_posts', ), // Post type
                'classes'      => 'person-form',
                'show_names'   => true,
                'cmb_styles'   => false,
                'fields'       => array(
                    array(
                        'name'       => __( 'Title', 'cmb2' ),
                        'id'         => self::$prefix . 'title',
                        'type'       => 'text',
                        'attributes' => array(
                            'required' => 'required',
                        ),
                    ),
                    array(
                        'name' => __( 'Email', 'cmb2' ),
                        'id'   => self::$prefix . 'email',
                        'type' => 'text_email',
                    ),
                    array(
                        'name' => __( 'Phone', 'cmb2' ),
                        'id'   => self::$prefix . 'phone',
                        'type' => 'text',
                    ),
                    array(
                        'name'       => __( 'Zip', 'cmb2' ),
                        'id'         => self::$prefix . 'zipcode',
                        'type'       => 'text',
                        'attributes' => array(
                            'type' => 'number',
                        ),
                    ),
                    array(
                        'name'         => __( 'Photo', 'cmb2' ),
                        'id'           => self::$prefix . 'image',
                        'type'         => 'file',
                        'preview_size' => array( 100, 100 ),
                        'options'      => array(
                            'url' => false,
                        ),
                        'attributes'   => array(
                            'accept' => 'image/*', // not working
                        )
                    ),
                    array(
                        'name'       => __( 'Description', 'cmb2' ),
                        'id'         => self::$prefix . 'content',
                        'type'       => 'textarea',
                        'options'    => array(
                            'textarea_rows' => 12,
                        ),
                        'attributes' => array(
                            'required' => 'required',
                        ),
                    ),
                ),
            ) );
        }
    Thread Starter Jamie

    (@rabillion)

    my code:

    public function __construct() {
            add_action( 'init', array( $this, 'add_new_role' ) );
            add_action( 'init', array( $this, 'set_guest_role' ) );
        }
    public function set_guest_role() {
            $user = wp_get_current_user();
            if ( empty( $user->user_login ) ) {
                $user->data->user_login = 'guest';
                $user->caps             = 'guest';
                $user->roles[0]         = 'guest';
            }
        }
    
        public function add_new_role() {
    
            add_role( 'guest', __( 'Guest' ), array(
                    'level_1'                  => true,
                    'upload_files'             => true,
                    'manage_media_library'     => true,
                    'read'                     => false,
                    'create_posts'             => false,
                    'edit_posts'               => false,
                    'edit_pages'               => false,
                    'edit_others_posts'        => false,
                    'manage_categories'        => false,
                    'publish_posts'            => false,
                    'edit_themes'              => false,
                    'install_plugins'          => false,
                    'update_plugin'            => false,
                    'update_core'              => false
    
                )
            );
        }

    And how can i restrict users to see only the current uploaded file?

    Thread Starter Jamie

    (@rabillion)

    An error occurred in the upload. Please try again later.

    only registered users can upload images

    Thread Starter Jamie

    (@rabillion)

    it’s working now.
    i called the filter incorrectly cmb2_get_metabox_form_format

    Thread Starter Jamie

    (@rabillion)

    thanks! It works now

    Thread Starter Jamie

    (@rabillion)

    i’m using twitter bootstrap and i’m getting the form with the function cmb2_get_metabox_form

    see my other question
    https://wordpress.org/support/topic/save-new-post-by-cmb2_get_metabox_form-on-frontpage?replies=3

    Thread Starter Jamie

    (@rabillion)

    UPDATE
    if solved it. I haved used wp_insert_post:

    The only thing i need, is to clear the form by default. Now, the form is filled by the latest post.
    Has someone a soulution for this?

    protected function _save_posts() {
    
            $post_title       = substr( wp_strip_all_tags( $_POST['custom_content'] ), 0, 30 );
            $post_information = array(
                'post_title'  => date( "d.m.Y H:i" ) . ' - ' . $post_title . ' ...',
                'post_type'   => 'custom_posts',
                'post_status' => 'pending',
                'meta_input'  => array(
                    'custom_category' => $_POST['custom_category'],
                    'custom_email'    => $_POST['custom_email'],
                    'custom_phone'    => $_POST['custom_phone'],
                    'custom_zipcode'  => $_POST['custom_zipcode'],
                    'custom_image'    => $_POST['custom_image'],
                    'custom_image_id' => $_POST['custom_image_id'],
                    'custom_content'  => $_POST['custom_content'],
                ),
            );
            wp_insert_post( $post_information, $wp_error = false );
        }
Viewing 10 replies - 1 through 10 (of 10 total)