User Dashboard - Include Custom Fields as Columns
Support › MB Frontend Submission › User Dashboard - Include Custom Fields as ColumnsResolved
- This topic has 3 replies, 2 voices, and was last updated 1 year, 10 months ago by
Peter.
-
AuthorPosts
-
June 15, 2023 at 8:43 PM #42224
[email protected]
ParticipantIs it possible to have the User Dashboard display data from custom fields? Currently I have the user dashboard working OK but I want to include custom field data in the dashboard.
June 16, 2023 at 7:50 PM #42243Peter
ModeratorHello,
If you are familiar with coding, you can follow this topic to create a custom frontend dashboard on your own https://support.metabox.io/topic/duplicate-dashboard-shortcode
the post list in the dashboard is just created by a WP query.June 19, 2023 at 1:51 PM #42269[email protected]
ParticipantThanks for this. I'm not much of a coder but I've changed the code you supplied as follows but it doesn't work for me:
use MetaBox\Support\Arr; class My_Dashboard { private $query; private $edit_page_atts; public function __construct() { add_shortcode( 'custom_frontend_dashboard', [ $this, 'shortcode' ] ); } public function shortcode( $atts ) { /* * Do not render the shortcode in the admin. * Prevent errors with enqueue assets in Gutenberg where requests are made via REST to preload the post content. */ if ( is_admin() ) { return ''; } if ( ! is_user_logged_in() ) { return esc_html__( 'Please login to view the dashboard.', 'mb-frontend-submission' ); } $this->edit_page_atts = $this->get_edit_page_attrs( $atts['edit_page'] ); if ( is_wp_error( $this->edit_page_atts ) ) { return '<div class="rwmb-error">' . $this->edit_page_atts->get_error_message() . '</div>'; } $atts = shortcode_atts( [ // Meta box id. 'id' => $this->edit_page_atts['exam'], // Edit page id. 'edit_page' => '42', // Add new post button text 'add_new' => __( 'Add New', 'mb-frontend-submission' ), // Delete permanently. 'force_delete' => 'false', // Columns to display. 'columns' => 'title,date,status', // Column header labels. 'label_title' => __( 'Title', 'mb-frontend-submission' ), 'label_date' => __( 'Date', 'mb-frontend-submission' ), 'label_status' => __( 'Status', 'mb-frontend-submission' ), 'label_actions' => __( 'Actions', 'mb-frontend-submission' ), // Link action for post title (view|edit). 'title_link' => '', // Flag to hide/show welcome message. 'show_welcome_message' => 'true', ], $atts ); ob_start(); $this->query_posts(); if ( $atts['show_welcome_message'] === 'true' ) { $this->show_welcome_message(); } $this->show_user_posts( $atts ); return ob_get_clean(); } private function query_posts() { $this->query = new WP_Query( [ 'author' => get_current_user_id(), 'post_type' => $this->edit_page_atts['post_type'], 'posts_per_page' => -1, 'post_status' => 'any', 'fields' => 'exam_name','post_duzf91pjqvb','start_date','start_time','end_date','end_time', 'no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false, ] ); } private function show_welcome_message() { $post_type = $this->edit_page_atts['post_type']; $post_type_object = get_post_type_object( $post_type ); $user = wp_get_current_user(); $query = $this->query; $message = '<h3>'. esc_html( sprintf( __( 'Howdie, %s!', 'mb-frontend-submission' ), $user->display_name ) ).'</h3>'; $message .= '<p>'. esc_html( sprintf( __( 'You have %d %s.', 'mb-frontend-submission' ), $query->post_count, strtolower( $post_type_object->labels->name ) ) ).'</p>'; $output = apply_filters( 'mbfs_welcome_message', $message, $user, $query ); echo $output; } private function get_edit_page_attrs( $edit_page_id ) { $edit_page = get_post( $edit_page_id ); $pattern = get_shortcode_regex( ['mb_frontend_form'] ); if ( ! preg_match_all( '/' . $pattern . '/s', $edit_page->post_content, $matches ) || empty( $matches[2] ) || ! in_array( 'mb_frontend_form', $matches[2] ) ) { return new WP_Error( 'mbfs-no-edit-page', __( 'Something is not right with the shortcode on page ID: ', $edit_page_id ) ); } // Get shortcode attributes. $key = array_search( 'mb_frontend_form', $matches[2] ); $shortcode_atts = explode( ' ', $matches[3][ $key ] ); // Get only 'id' and 'post_type' attributes. $attributes = [ 'id' => '42', 'post_type' => 'exam', 'url' => get_permalink( $edit_page ), ]; foreach ( $shortcode_atts as $attribute ) { $attribute = explode( '=', $attribute ); if ( in_array( $attribute[0], ['id', 'post_type'] ) ) { $attributes[ $attribute[0] ] = str_replace( ['"', "'"], '', $attribute[1] ); } } return $attributes; } private function show_user_posts( $atts ) { $this->enqueue(); ?> <a class="mbfs-add-new-post" href="<?= esc_url( $this->edit_page_atts['url'] ) ?>"> <?= esc_html( $atts['add_new'] ) ?> </a> <?php if ( ! $this->query->have_posts() ) { return; } ?> <table class="mbfs-posts"> <tr> <?php $columns = Arr::from_csv( $atts['columns'] ); if ( in_array( 'title', $columns ) ) { echo '<th>', esc_html( $atts['label_title'] ), '</th>'; } if ( in_array( 'date', $columns ) ) { echo '<th>', esc_html( $atts['label_date'] ), '</th>'; } if ( in_array( 'status', $columns ) ) { echo '<th>', esc_html( $atts['label_status'] ), '</th>'; } ?> <th><?= esc_html( $atts['label_actions'] ) ?></th> </tr> <?php while( $this->query->have_posts() ) : $this->query->the_post(); ?> <tr> <?php if ( in_array( 'title', $columns ) ) : ?> <?php if ( $atts['title_link'] === 'edit' ) { $title_link = add_query_arg( 'rwmb_frontend_field_post_id', get_the_ID(), $this->edit_page_atts['url'] ); } else { $title_link = get_the_permalink(); } ?> <td><a href="<?= esc_url( $title_link ) ?>"><?php the_title(); ?></a></td> <?php endif; ?> <?php if ( in_array( 'date', $columns ) ) : ?> <td align="center"><?php the_time( get_option( 'date_format' ) ) ?></td> <?php endif; ?> <?php if ( in_array( 'status', $columns ) ) : ?> <td align="center"><?= get_post_status() ?></td> <?php endif; ?> <td align="center" class="mbfs-actions"> <a href="<?= esc_url( add_query_arg( 'rwmb_frontend_field_post_id', get_the_ID(), $this->edit_page_atts['url'] ) ) ?>" title="<?php esc_html_e( 'Edit', 'mb-frontend-submission' ) ?>"> <img src="<?= MBFS_URL . 'assets/pencil.svg' ?>"> </a> <?= do_shortcode( '[mb_frontend_form id="' . $this->edit_page_atts['id'] . '" post_id="' . get_the_ID() . '" ajax="true" allow_delete="true" force_delete="' . $atts['force_delete'] . '" only_delete="true" delete_button="<img src=\'' . MBFS_URL . 'assets/trash.svg' . '\'>"]' ); ?> </td> </tr> <?php endwhile ?> </table> <?php wp_reset_postdata(); } private function enqueue() { wp_enqueue_style( 'mbfs-dashboard', MBFS_URL . 'assets/dashboard.css', '', MBFS_VER ); wp_enqueue_script( 'mbfs', MBFS_URL . 'assets/frontend-submission.js', array( 'jquery' ), MBFS_VER, true ); } } new My_Dashboard();
Where an I going wrong?
Thanks
June 19, 2023 at 9:13 PM #42277Peter
ModeratorHello,
It is beyond our scope of support. If you are not able to complete the task, please contact us here https://metabox.io/contact/
Our development team will help you with an extra fee. -
AuthorPosts
- You must be logged in to reply to this topic.