• Resolved kokojambo

    (@kokojambo)


    Hi and thanks for an amazing plugin!

    I’m using a theme where the developer registered CPT fields in a php file,

    Any call to show “ts-speaker” post type looks like this:

    <?php
    // speaker details
    $exhibs_designation = exhibz_meta_option(get_the_id(), 'exhibs_designation');
    $exhibs_photo       = exhibz_meta_option(get_the_id(), 'exhibs_photo');
    $exhibs_logo        = exhibz_meta_option(get_the_id(), 'exhibs_logo');
    $exhibs_summery     = exhibz_meta_option(get_the_id(), 'exhibs_summery');
    $socials            = exhibz_meta_option(get_the_id(), 'social');
    
    ?>

    found this on global.php,

    // return the specific value from metabox
    
    // ----------------------------------------------------------------------------------------
    function exhibz_meta_option($postid, $key, $default_value = '')
    {
    	if (defined('FW')) {
    		$value = fw_get_db_post_option($postid, $key, $default_value);
    	}
    	return (!isset($value) || $value == '') ? $default_value :  $value;
    }

    found this on a separate plugin comes with the theme:

    <?php
    
    /**
     *
     * Custom Post Type And Taxonomies Class
     *
     */
    
    namespace ExhibzCustomPost;
    
    if ( ! defined( 'ABSPATH' ) ) exit;
    
    class Exhibz_CustomPost {
    
      private $textdomain;
      private $xs_posts;
    
        public function __construct( $textdomain){
            $this->textdomain = $textdomain;
            $this->xs_posts = array();
            add_action('init', array($this, 'register_custom_post'));
        }
    
        public function xs_init( $type, $singular_label, $plural_label, $settings = array() ){
            
            $default_settings = array(
                'labels' => array(
                    'name' => __($plural_label, $this->textdomain),
                    'singular_name' => __($singular_label, $this->textdomain),
                    'add_new_item' => __('Add New '.$singular_label, $this->textdomain),
                    'edit_item'=> __('Edit '.$singular_label, $this->textdomain),
                    'new_item'=>__('New '.$singular_label, $this->textdomain),
                    'view_item'=>__('View '.$singular_label, $this->textdomain),
                    'search_items'=>__('Search '.$plural_label, $this->textdomain),
                    'not_found'=>__('No '.$plural_label.' found', $this->textdomain),
                    'not_found_in_trash'=>__('No '.$plural_label.' found in trash', $this->textdomain),
                    'parent_item_colon'=>__('Parent '.$singular_label, $this->textdomain),
                    'menu_name' => __($plural_label,$this->textdomain)
                ),
                'public'=>true,
                'has_archive' => true,
                'menu_icon' => '',
                'menu_position'=>20,
                'supports'=>array(
                    'title',
                    'editor',
                    'thumbnail'
                ),
                'rewrite' => array(
                    'slug' => sanitize_title_with_dashes($plural_label)
                )
            );
            $this->xs_posts[$type] = array_merge($default_settings, $settings);
        }
    
        public function register_custom_post(){
            foreach($this->xs_posts as $key=>$value) {
                register_post_type($key, $value);
                flush_rewrite_rules( false );
            }
        }
        
    }
    
    class Exhibz_Taxonomies {
        protected $textdomain;
        protected $taxonomies;
    
        public function __construct ( $textdomain ){
            $this->textdomain = $textdomain;
            $this->taxonomies = array();
            add_action('init', array($this, 'register_taxonomy'));
        }
    
        public function xs_init( $type, $singular_label, $plural_label, $post_types, $settings = array() ){
            $default_settings = array(
                'labels' => array(
                    'name' => __($plural_label, $this->textdomain),
                    'singular_name' => __($singular_label, $this->textdomain),
                    'add_new_item' => __('New '.$singular_label.' Name', $this->textdomain),
                    'new_item_name' => __('Add New '.$singular_label, $this->textdomain),
                    'edit_item'=> __('Edit '.$singular_label, $this->textdomain),
                    'update_item'=> __('Update '.$singular_label, $this->textdomain),
                    'add_or_remove_items'=> __('Add or remove '.strtolower($plural_label), $this->textdomain),
                    'search_items'=>__('Search '.$plural_label, $this->textdomain),
                    'popular_items'=>__('Popular '.$plural_label, $this->textdomain),
                    'all_items'=>__('All '.$plural_label, $this->textdomain),
                    'parent_item'=>__('Parent '.$singular_label, $this->textdomain),
                    'choose_from_most_used'=> __('Choose from the most used '.strtolower($plural_label), $this->textdomain),
                    'parent_item_colon'=>__('Parent '.$singular_label, $this->textdomain),
                    'menu_name'=>__($singular_label, $this->textdomain),
                ),
    
                'public'            => true,
                'show_in_nav_menus' => true,
                'show_admin_column' => true,
                'hierarchical'      => true,
                'show_tagcloud'     => false,
                'show_ui'           => true,
                'show_in_rest'      => true,
                'query_var'         => true,
                'rewrite' => array(
                    'slug' => sanitize_title_with_dashes($plural_label)
                )
            );
    
            $this->taxonomies[$type]['post_types'] = $post_types;
            $this->taxonomies[$type]['args'] = array_merge($default_settings, $settings);       
        }
    
        public function register_taxonomy(){
            foreach($this->taxonomies as $key => $value) {
                register_taxonomy($key, $value['post_types'], $value['args']);
            }
        }
    
    }

    Can I still use the plugin? I tried in a few ways like meta fields but it doesn’t really work with meta box fields.

    • This topic was modified 1 year, 10 months ago by kokojambo.
    • This topic was modified 1 year, 10 months ago by kokojambo.
    • This topic was modified 1 year, 10 months ago by kokojambo.
Viewing 7 replies - 1 through 7 (of 7 total)
  • Thread Starter kokojambo

    (@kokojambo)

    after some investigations

    I found the associated “category” taxonomy works fine some times, and disappears from the mapping page some times.

    In addition, there is a problem with the other post type meta box fields that do not reach the post at all; some of them are missing in the mapping page.

    Plugin Author Aurovrata Venet

    (@aurovrata)

    Can I still use the plugin? I tried in a few ways like meta fields but it doesn’t really work with meta box fields.

    Difficult to say given it isn’t clear how your plugin stores its meta fields. If it uses WP std procedures to do then it’s easy to get the plugin to map your form to your post. Post My CF7 Form is designed to extend WP core functionality.

    You need to find out how the CPT fields are stored and then map your form to those fields

    Thread Starter kokojambo

    (@kokojambo)

    Hi dear Aurovrata and thanks for your response,

    On your advice, I dug deep into the template files to understand how the fields and post type are configured.

    1. setting up custom post type:
    <?php
    
    /**
     *
     * Custom Post Type And Taxonomies Class
     *
     */
    
    namespace ExhibzCustomPost;
    
    if ( ! defined( 'ABSPATH' ) ) exit;
    
    class Exhibz_CustomPost {
    
      private $textdomain;
      private $xs_posts;
    
        public function __construct( $textdomain){
            $this->textdomain = $textdomain;
            $this->xs_posts = array();
            add_action('init', array($this, 'register_custom_post'));
        }
    
        public function xs_init( $type, $singular_label, $plural_label, $settings = array() ){
            
            $default_settings = array(
                'labels' => array(
                    'name' => __($plural_label, $this->textdomain),
                    'singular_name' => __($singular_label, $this->textdomain),
                    'add_new_item' => __('Add New '.$singular_label, $this->textdomain),
                    'edit_item'=> __('Edit '.$singular_label, $this->textdomain),
                    'new_item'=>__('New '.$singular_label, $this->textdomain),
                    'view_item'=>__('View '.$singular_label, $this->textdomain),
                    'search_items'=>__('Search '.$plural_label, $this->textdomain),
                    'not_found'=>__('No '.$plural_label.' found', $this->textdomain),
                    'not_found_in_trash'=>__('No '.$plural_label.' found in trash', $this->textdomain),
                    'parent_item_colon'=>__('Parent '.$singular_label, $this->textdomain),
                    'menu_name' => __($plural_label,$this->textdomain)
                ),
                'public'=>true,
                'has_archive' => true,
                'menu_icon' => '',
                'menu_position'=>20,
                'supports'=>array(
                    'title',
                    'editor',
                    'thumbnail'
                ),
                'rewrite' => array(
                    'slug' => sanitize_title_with_dashes($plural_label)
                )
            );
            $this->xs_posts[$type] = array_merge($default_settings, $settings);
        }
    
        public function register_custom_post(){
            foreach($this->xs_posts as $key=>$value) {
                register_post_type($key, $value);
                flush_rewrite_rules( false );
            }
        }
        
    }
    
    class Exhibz_Taxonomies {
        protected $textdomain;
        protected $taxonomies;
    
        public function __construct ( $textdomain ){
            $this->textdomain = $textdomain;
            $this->taxonomies = array();
            add_action('init', array($this, 'register_taxonomy'));
        }
    
        public function xs_init( $type, $singular_label, $plural_label, $post_types, $settings = array() ){
            $default_settings = array(
                'labels' => array(
                    'name' => __($plural_label, $this->textdomain),
                    'singular_name' => __($singular_label, $this->textdomain),
                    'add_new_item' => __('New '.$singular_label.' Name', $this->textdomain),
                    'new_item_name' => __('Add New '.$singular_label, $this->textdomain),
                    'edit_item'=> __('Edit '.$singular_label, $this->textdomain),
                    'update_item'=> __('Update '.$singular_label, $this->textdomain),
                    'add_or_remove_items'=> __('Add or remove '.strtolower($plural_label), $this->textdomain),
                    'search_items'=>__('Search '.$plural_label, $this->textdomain),
                    'popular_items'=>__('Popular '.$plural_label, $this->textdomain),
                    'all_items'=>__('All '.$plural_label, $this->textdomain),
                    'parent_item'=>__('Parent '.$singular_label, $this->textdomain),
                    'choose_from_most_used'=> __('Choose from the most used '.strtolower($plural_label), $this->textdomain),
                    'parent_item_colon'=>__('Parent '.$singular_label, $this->textdomain),
                    'menu_name'=>__($singular_label, $this->textdomain),
                ),
    
                'public'            => true,
                'show_in_nav_menus' => true,
                'show_admin_column' => true,
                'hierarchical'      => true,
                'show_tagcloud'     => false,
                'show_ui'           => true,
                'show_in_rest'      => true,
                'query_var'         => true,
                'rewrite' => array(
                    'slug' => sanitize_title_with_dashes($plural_label)
                )
            );
    
            $this->taxonomies[$type]['post_types'] = $post_types;
            $this->taxonomies[$type]['args'] = array_merge($default_settings, $settings);       
        }
    
        public function register_taxonomy(){
            foreach($this->taxonomies as $key => $value) {
                register_taxonomy($key, $value['post_types'], $value['args']);
            }
        }
    
    }

    2. setting up meta fields:

    <?php if (!defined('FW')) {
        die('Forbidden');
    }
    
    
    $options = array(
    
    
        'exhibs_speaker_id'     => array(
            'type'    => 'tab',
            'options' => array(
                array(
                    'type'    => 'tab',
                    'options' => array(
                        'exhibs_designation' => array(
                            'label' => esc_html__('Designation', 'exhibz'),
                            'type'  => 'text',
                            'value' => '',
    
                        ),
                        'exhibs_photo'       => array(
                            'label'       => esc_html__('Profile Photo', 'exhibz'),
                            'type'        => 'upload',
                            'value'       => array(),
                            'images_only' => true,
                            'files_ext'   => array('jpg', 'jpeg', 'png'),
    
                        ),
                        'exhibs_logo'        => array(
                            'label'       => esc_html__('Logo', 'exhibz'),
                            'type'        => 'upload',
                            'value'       => array(),
                            'images_only' => true,
                            'files_ext'   => array('jpg', 'jpeg', 'png'),
    
                        ),
    
                        'exhibs_summery' => array(
                            'label' => esc_html__('Summary', 'exhibz'),
                            'type'  => 'wp-editor',
                            'value' => '',
    
                        ),
    
    
                    ),
    
                )
            ),
            'title'   => esc_html__('Speaker Details', 'exhibz'),
    
    
        ),
        "social"                => array(
            'type'            => 'addable-popup',
            'label'           => esc_html__('Social Link', 'exhibz'),
            'template'        => '{{- option_site_name }}',
            'popup-title'     => 'Social Media Link',
            'size'            => 'small', // small, medium, large
            'limit'           => 0, // limit the number of popup`s that can be added
            'add-button-text' => esc_html__('Add ', 'exhibz'),
            'sortable'        => true,
            'popup-options'   => array(
                'option_site_name' => array(
                    'label' => esc_html__('Website Name', 'exhibz'),
                    'type'  => 'text',
                    'value' => ''
    
                ),
                'option_site_link' => array(
                    'label' => esc_html__('Website Link', 'exhibz'),
                    'type'  => 'text',
                    'value' => ''
    
                ),
                'option_site_icon' => array(
                    'label' => esc_html__('Icon', 'exhibz'),
                    'type'  => 'new-icon',
                    'value' => ''
    
                ),
    
            ),
        ),
        'speaker_speaker_style' => array(
            'type'    => 'tab',
            'options' => array(
                array(
                    'type'    => 'tab',
                    'options' => array(
                        'speaker_color' => array(
                            'type'     => 'color-picker',
                            'value'    => '#25CD44',
                            'palettes' => array('#8000FF', '#00C1B4', '#00B4FF', '#002BFF', '#9A8D17' . '#FF2661'),
                            'label'    => __('Color', 'exhibz'),
                        )
                    ),
                )
            ),
            'title'   => esc_html__('Speaker Style Square Alter', 'exhibz'),
        )
    );

    The fields that “Post My CF7 Form” manages to locate on its own, do not end up in the post itself and it is created with title only (e.g. designation, photo):

    Additional fields do not appear at all under the meta fields dropdown (e.g. logo):

    What would you recommend to do? How can I proceed with the mapping?

    • This reply was modified 1 year, 10 months ago by kokojambo.
    Plugin Author Aurovrata Venet

    (@aurovrata)

    Indeed so the fields are stored as post meta-fields which the plugin recognises, however, it is still not clear how the values are stored in the DB. If you want your CPT to be properly filled-in with the form mapping, you need to make sure that the submitted data is stored in the format that your theme CPT expects it to be. This will require custom programmatic storage, which you can achieve using the filter hooks available in the plugin. For example, images can be stored multiple ways in the DB, it can be a direct URL to the image on the server (this is the plugin default), it can also be a file path value, or it can be an attachment post ID value, whereby the image is first stored as an attachment post (like those you upload in the media section of the dashboard), but which takes up much more space.

    Thread Starter kokojambo

    (@kokojambo)

    Thank you very much! I will learn more about the plugin related filter hooks.

    Plugin Author Aurovrata Venet

    (@aurovrata)

    You will need to use a tool like PhpMyAdmin to inspect your DB and see how the default mapping saves values compared to a post created directily in the dashboard.

    Plugin Author Aurovrata Venet

    (@aurovrata)

    @kokojambo please do leave a review when you have a moment to spare

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Theme matching’ is closed to new replies.