)->find(), with all of the magic tags in the row * expanded for the corresponding record. * * The expansion can be controlled by the following "pseudo-shortcodes" which * must occur at the beginning of the first column of the row (you may want to * dedicate a hidden column just for this purpose if you are making use of these) * [once] -- this row expands only into a single row (corresponding to the * first record returned by the find() call), with magic * tags expanded * [literal] -- do not expand this row, except for removing the [literal] * designation, even though it contains magic tags; hence, the * magic tags will appear in the result. * * [table id=1 pod_name="mypod" pod_dump=true pod_where="t.myfield = 3" /] * * *Ignores* the contents of the table altogether, and replaces it with a * simple dump of the ID, date, title, author, permalink, and all custom * Pods fields for each record in a Pods custom post type. Note that the * taxonomies, if any, of the post type will not be shown. Useful mainly for * seeing what is present in your Pod; for any presentation tables you will * most likely want to use the first form. * */ add_filter( 'tablepress_shortcode_table_default_shortcode_atts', 'playground_add_shortcode_parameter_pods' ); add_filter( 'tablepress_table_raw_render_data', 'playground_expand_pod', 10, 2 ); function playground_add_shortcode_parameter_pods( $default_atts ) { $default_atts['pod_name'] = ''; $default_atts['pod_dump'] = ''; $default_atts['pod_where'] = ''; return $default_atts; } function playground_expand_pod( $table, $render_options) { if (empty($render_options['pod_name'])) return $table; $pod_params = array('limit'=>-1); if (!empty($render_options['pod_where'])) { $pod_params['where'] = $render_options['pod_where']; } $pod = pods($render_options['pod_name'], $pod_params); $ndata = array(); $rvis = array(); $cvis = array(); if (empty($render_options['pod_dump'])) { # Standard case: expand rows with magic tags into multiple rows, # one for each record in $pod, controlled by the pseudo-shortcodes $cvis = $table['visibility']['columns']; $orig_rvis = $table['visibility']['rows']; foreach ($table['data'] as $row_idx => $row) { # First, check for the [literal] code since nothing much to do then if (0 === strpos($row[0], '[literal]')) { $row[0] = substr($row[0], 9); $ndata[] = $row; $rvis[] = $orig_rvis[$row_idx]; continue; } # Similarly, if no magic tags, just copy the row. $wholerow = implode('',$row); if (!preg_match('/{@.*}/', $wholerow)) { $ndata[] = $row; $rvis[] = $orig_rvis[$row_idx]; continue; } # OK, we need to expand magic tags in the row. First check for # the [once] pseudo-shortcode: $one_timer = FALSE; if (0 === strpos($row[0], '[once]')) { $row[0] = substr($row[0], 6); $one_timer = TRUE; } # Here's the expansion loop $pod->reset(); while ($pod->fetch()) { $ndata[] = array_map(function($c) use($pod) { return $pod->do_magic_tags($c); }, $row); $rvis[] = $orig_rvis[$row_idx]; if ($one_timer) { break; } } } # for each row of the original table } else { # pod_dump is specified. $flds = $pod->fields(); $hrow = array('ID','Date','Title','Author','Permalink'); $cvis = array(TRUE, TRUE, TRUE, TRUE, TRUE); $frow = array(); foreach ($flds as $fkey => $finfo) { $hrow[] = $finfo['label']; $cvis[] = TRUE; $frow[] = $fkey; } $ndata[] = $hrow; $rvis = array(TRUE); while ($pod->fetch()) { $nrow = array(); $nrow[] = $pod->field('id'); $nrow[] = $pod->field('post_date'); $nrow[] = $pod->field('title'); $nrow[] = get_the_author_meta('display_name', $pod->field('author')); $nrow[] = $pod->field('permalink'); foreach ($frow as $field_slug) { $nrow[] = $pod->display($field_slug); } $ndata[] = $nrow; $rvis[] = TRUE; } } # do a pod dump # OK, install the new table information $table['data'] = $ndata; $table['visibility']['rows'] = $rvis; $table['visibility']['columns'] = $cvis; return $table; }