Support » Plugin: TablePress - Tables in WordPress made easy » Using Tablepress with ACF in page templates

  • Resolved jlego

    (@jlego)


    Hello.
    I’m trying to use TablePress in conjunction with the Advanced Custom Fields plugin. ACF has the ability to add a select dropdown to the post edit page where you can select a Page/Post/any custom post type and it will save a post object in the database for that custom field, allowing access to that post’s id, content and post meta when writing out a template.
    TablePress tables are a custom post type, so I have set up a Custom Field where you can select a TablePress Table post object when editing a post in wordpress.
    However, tablepress’s functions always take a table id (not a post id) to pull the table’s content onto a page whether you are using shortcodes or template tags.

    My question is how can I get the table id of a tablepress table if I only have the post id?

    I can’t quite seem to find how the table id is connected to the post content through searching my database.

    http://wordpress.org/extend/plugins/tablepress/

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Author TobiasBg

    (@tobiasbg)

    Hi,

    thanks for your question.

    The connection between table ID and post ID is stored in the option tablepress_tables in the wp_options table in the database, which is a JSONified array.

    Regards,
    Tobias

    Nice question and answer. I want to share how it worked for me 🙂

    <?php
    // get ACF saved data.
    $post_obj = get_field( 'my_table' );
    
    // get the post-table pair json data
    $table_json = get_option( 'tablepress_tables' );
    
    // json decode to array
    $json_dec = json_decode( $table_json, true );
    
    // get the pair data
    $post_table = $json_dec['table_post'];
    
    // flip the key/value of the array
    $flip = array_flip( $post_table );
    
    // you get the table id from postID by $flip[$post_obj->ID]
    $shortcode = '[table id=' . $flip[$post_obj->ID] . ' /]';
    
    // paste this in your template file :)
    echo do_shortcode( $shortcode );
    Plugin Author TobiasBg

    (@tobiasbg)

    Hi,

    thanks for sharing this! Very nice solution!

    Best wishes,
    Tobias

    P.S.: In case you haven’t, please rate TablePress here in the plugin directory. Thanks!

    Thanks for the reply Tobias!

    I rated, thank you for this plugin.

    And about this topic, I felt it’s easier to let clients to put the ID of the table.
    You can put not only numbers but also texts like ‘Bangkok_tour_price_1’.

    Plugin Author TobiasBg

    (@tobiasbg)

    Hi,

    thanks, I really appreciate that! 🙂

    Best wishes,
    Tobias

    @shinichin, thanks for the snippet!

    @tobiasbg, awesome plugin! Just rated it 5 starts.

    Here’s an update of the version that I’ve decided to use.

    I typically try to avoid do_shortcode for reasons explained here: http://kovshenin.com/2013/dont-do_shortcode/

    So I rewrote @shinichin’s function to use @tobiasbg’s recommended template tag.

    The code below includes my ACF post object field but this can be used without as-well.

    Hope it helps!

    With ACF Post Object:

    <?php // Init Post Object
          $postobject = get_sub_field('table');
          $post = $postobject;
          setup_postdata( $post );
    
            // tablepress plugin query / args
            // get ACF saved data.
            $post_obj = get_sub_field( 'table' );
    
            // get the post-table pair json data
            $table_json = get_option( 'tablepress_tables' );
    
            // json decode to array
            $json_dec = json_decode( $table_json, true );
    
            // get the pair data
            $post_table = $json_dec['table_post'];
    
            // flip the key/value of the array
            $flip = array_flip( $post_table );
    
            // table args
            $args = array(
              'id'                => $flip[$post_obj->ID],
              'use_datatables'    => true,
              'print_name'        => false
            );
    
            tablepress_print_table( $args); ?>
    
          <?php // Reset data from Post Object
          wp_reset_postdata(); ?>

    Without ACF Post Object:

    <?php
    
            // tablepress plugin query / args
            // get ACF saved data.
            $post_obj = get_sub_field( 'table' );
    
            // get the post-table pair json data
            $table_json = get_option( 'tablepress_tables' );
    
            // json decode to array
            $json_dec = json_decode( $table_json, true );
    
            // get the pair data
            $post_table = $json_dec['table_post'];
    
            // flip the key/value of the array
            $flip = array_flip( $post_table );
    
            // table args
            $args = array(
              'id'                => $flip[$post_obj->ID],
              'use_datatables'    => true,
              'print_name'        => false
            );
    
            tablepress_print_table( $args); ?>

    http://kovshenin.com/2013/dont-do_shortcode/

    This is interesting and I check tablepress_print_table function too 🙂

    Plugin Author TobiasBg

    (@tobiasbg)

    Hi,

    very nice! Yes, using the template tag functions instead of do_shortcode() is much better and faster here 🙂

    Best wishes,
    Tobias

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Using Tablepress with ACF in page templates’ is closed to new replies.