Display CPT in page

Support MB Custom Post Type Display CPT in pageResolved

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • #11595
    dhuydhuy
    Participant

    Hi,
    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();
                      }
    #11604
    Anh TranAnh Tran
    Keymaster

    Hi 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?

    #11627
    dhuydhuy
    Participant

    Yes, the ultimate goal is getting meta boxes of the post object.

    #11629
    Anh TranAnh Tran
    Keymaster

    Hi 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?

    #11630
    dhuydhuy
    Participant

    Below 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;
    }
    #11637
    Anh TranAnh Tran
    Keymaster

    I 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 of rwmb_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;
        }
      }
    }
    #11640
    dhuydhuy
    Participant

    Thanks for your swift respond.
    Strangely, it still doesn't work.

    #11641
    dhuydhuy
    Participant

    At last, it's OK now.

    #11642
    Anh TranAnh Tran
    Keymaster

    Have you resolved this? Do you need any further help?

    #11645
    dhuydhuy
    Participant

    It 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.
    Image

    #11656
    Anh TranAnh Tran
    Keymaster

    For 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.

    #11670
    dhuydhuy
    Participant

    I 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() }
        }
      }
    }
    #11685
    Anh TranAnh Tran
    Keymaster

    Hi 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 );
      }
    }
    #11750
    dhuydhuy
    Participant

    Everything is OK now.
    Smooth migration from ACF.

Viewing 14 posts - 1 through 14 (of 14 total)
  • You must be logged in to reply to this topic.