Display CPT in page
Support › MB Custom Post Type › Display CPT in pageResolved
- This topic has 13 replies, 2 voices, and was last updated 6 years, 6 months ago by
dhuy.
-
AuthorPosts
-
October 11, 2018 at 11:31 AM #11595
dhuy
ParticipantHi,
I've created a CPT for pricing tables and I want to show it in a page using the post field.
Currently, I'm stuck at how to get the CPT id to display the pricing table.$table = isset( $pricing['pricing_table_id'] ) ? $pricing['pricing_table_id'] : ''; if( $table ) { setup_postdata( $GLOBALS['post'] =& $table ); $plans = rwmb_meta( 'plan' ); if( ! empty( $plans ) ) { foreach ($plans as $plan) { $name = isset( $plan['plan_name'] ) ? $plan['plan_name'] : ''; echo $name; } } wp_reset_postdata(); }
October 12, 2018 at 11:13 AM #11604Anh Tran
KeymasterHi Huy,
Do you mean getting the post object or getting the items in the pricing table?
Can you also share the code of the meta box?
October 16, 2018 at 11:07 AM #11627dhuy
ParticipantYes, the ultimate goal is getting meta boxes of the post object.
October 16, 2018 at 2:48 PM #11629Anh Tran
KeymasterHi Huy,
To the the current post object, please use:
$post = get_post();
To get fields, just use
rwmb_meta()
. But I think you already know that.I'm not sure what your problem is. Can you provide more details and the setup code of meta box, so I can give more useful instruction?
October 16, 2018 at 4:30 PM #11630dhuy
ParticipantBelow is the meta box of the page builder. I can select the Pricing table (CPT) via the post field. I'm stuck at pulling the meta boxes from the selected CPT.
add_filter( 'rwmb_meta_boxes', 'your_prefix_register_meta_boxes' ); function your_prefix_register_meta_boxes( $meta_boxes ) { $meta_boxes[] = array ( 'title' => 'Page', 'id' => 'page', 'post_types' => array( 'page', ), 'context' => 'after_title', 'priority' => 'high', 'fields' => array( array ( 'id' => 'section', 'type' => 'group', 'name' => 'Section builder', 'fields' => array ( 0 => array ( 'id' => 'section_pricing', 'type' => 'group', 'name' => 'Pricing', 'fields' => array ( 0 => array ( 'id' => 'pricing_table_id', 'type' => 'post', 'name' => 'Post', 'post_type' => array ( 0 => 'prices', ), 'field_type' => 'select_advanced', ), ), 'default_state' => 'collapsed', 'groupfield' => 'text', 'collapsible' => true, 'visible' => true ), ), 'clone' => 1, 'sort_clone' => 1, 'default_state' => 'collapsed', 'collapsible' => true, 'save_state' => true, 'add_button' => 'Add section', ), ), 'style' => 'seamless', ); return $meta_boxes; }
Meta boxes of CPT:
add_filter( 'rwmb_meta_boxes', 'your_prefix_register_meta_boxes' ); function your_prefix_register_meta_boxes( $meta_boxes ) { $meta_boxes[] = array ( 'title' => 'Pricing table', 'id' => 'pricing-table', 'post_types' => array( 'prices', ), 'context' => 'after_title', 'priority' => 'high', 'fields' => array( array ( 'id' => 'plan', 'type' => 'group', 'name' => 'Group', 'fields' => array ( 0 => array ( 'id' => 'plan_class', 'type' => 'text', 'name' => 'Class', ), 1 => array ( 'id' => 'plan_name', 'type' => 'text', 'name' => 'Name', ), ), 'clone' => 1, 'default_state' => 'collapsed', 'collapsible' => true, 'add_button' => 'Add table', 'group_title' => 'Table', ), ), 'style' => 'seamless', ); return $meta_boxes; }
October 17, 2018 at 8:52 AM #11637Anh Tran
KeymasterI see, it's much clearer now.
To get the field values from your table CPT, please pass the post ID (value of the field
pricing_table_id
) to the 3rd parameter ofrwmb_meta
function. Here is a modified version of your initial code:$table = isset( $pricing['pricing_table_id'] ) ? $pricing['pricing_table_id'] : ''; if ( $table ) { $plans = rwmb_meta( 'plan', '', $table ); // THIS if ( ! empty( $plans ) ) { foreach ($plans as $plan) { $name = isset( $plan['plan_name'] ) ? $plan['plan_name'] : ''; echo $name; } } }
October 17, 2018 at 11:17 AM #11640dhuy
ParticipantThanks for your swift respond.
Strangely, it still doesn't work.October 17, 2018 at 11:43 AM #11641dhuy
ParticipantAt last, it's OK now.
October 17, 2018 at 11:55 AM #11642Anh Tran
KeymasterHave you resolved this? Do you need any further help?
October 17, 2018 at 2:40 PM #11645dhuy
ParticipantIt works like a charm!
Another question, I'm working with template page.php, in which there are many modules such as pricing tables, FAQs, features,... For better organization, I put each module in separate files which are located in different folder. Then, in the page.php, I just call the function for respective module.
Problem is value in fields cannot be retrieved, all none whilst html output is OK. Please correct me if missed anything.
October 18, 2018 at 4:27 PM #11656Anh Tran
KeymasterFor better organization, I put each module in separate files which are located in different folder.
This is great and is a recommended way to organizing fields. I also wrote about this.
Problem is value in fields cannot be retrieved, all none whilst html output is OK.
Can you provide more details on how you retrieve values? Code is appreciated.
October 19, 2018 at 12:08 PM #11670dhuy
ParticipantI put all the code in a function outside the main function, then call it, yet nothing happens.
// Sub function function pt() { $table = isset( $pricing['pricing_table_id'] ) ? $pricing['pricing_table_id'] : ''; if ( $table ) { $plans = rwmb_meta( 'plan', '', $table ); if ( ! empty( $plans ) ) { foreach ($plans as $plan) { $name = isset( $plan['plan_name'] ) ? $plan['plan_name'] : ''; echo $name; } } } } //Main function function page_section() { $sections = rwmb_meta( 'section' ); if( ! empty( $sections ) ) { foreach ( $sections as $section ) { if($section == 'pricing') { pt() } } } }
October 20, 2018 at 8:27 AM #11685Anh Tran
KeymasterHi Huy,
Your code has a PHP error and can't work. The function
pt
doesn't understand the variable$pricing
.I have rewritten your code as follows, please try it:
// Sub function function pt( $pricing ) { $table = isset( $pricing['pricing_table_id'] ) ? $pricing['pricing_table_id'] : ''; if ( ! $table ) { return; } $plans = rwmb_meta( 'plan', '', $table ); if ( empty( $plans ) ) { return; } foreach ($plans as $plan) { $name = isset( $plan['plan_name'] ) ? $plan['plan_name'] : ''; echo $name; } } //Main function function page_section() { $sections = rwmb_meta( 'section' ); if ( ! empty( $sections ) ) { return; } foreach ( $sections as $section ) { if ( empty( $section['section_pricing'] ) { continue; } $pricing = $section['section_pricing']; pt( $pricing ); } }
October 25, 2018 at 4:25 PM #11750dhuy
ParticipantEverything is OK now.
Smooth migration from ACF. -
AuthorPosts
- You must be logged in to reply to this topic.