Posted on

Reading wpDataTables imported tables

The wpDataTables table plugin has several ways to handle tables. Some of them work with Relevanssi without problems; some don’t. You may notice that Relevanssi doesn’t index the entire table contents for wpDataTables tables (mainly imported tables). This is because the wpDataTables shortcode does not always expand to the entire table; it only features part of the table. The rest of the table is fetched using Javascript, and Relevanssi does not see that.

If you have this problem, there’s a solution. You can add this function to your site:

add_filter( 'relevanssi_post_content', 'rlv_wpdatatable' );
function rlv_wpdatatable( $content ) {
    $m = preg_match_all( '/\[wpdatatable id=(\d*)\s?.*\]/', $content, $matches );
    if ( ! $m ) {
        return $content;
    }
    global $wpdb;
    foreach ( $matches[1] as $table_id ) {
        $table_query   = $wpdb->prepare( 'SELECT * FROM `' . $wpdb->prefix . 'wpdatatables` WHERE id=%d', intval( $table_id ) );
        $table_config  = $wpdb->get_row( $table_query, OBJECT );
	    $table_content = $wpdb->get_results( $table_config->content, ARRAY_A );
        $table_value = relevanssi_flatten_array( $table_content );
        $content    .= ' ' . $table_value;
    }
    return $content;
}

This function hooks onto relevanssi_post_content and looks for [wpdatatable] shortcodes, and if it finds one, it fetches all the table contents from the database and adds them to the post content.

Leave a Reply

Are you a Relevanssi Premium customer looking for support? Please use the Premium support form.

Your email address will not be published. Required fields are marked *