Skip to content

Instantly share code, notes, and snippets.

@salcode
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save salcode/26695ceba0f63be1e6a6 to your computer and use it in GitHub Desktop.
Save salcode/26695ceba0f63be1e6a6 to your computer and use it in GitHub Desktop.
Example Shortcode that displays query results and caches with transient
<?php
// Shortcode to display query results of CPT query
// with transient caching
add_shortcode( 'query_results', 'fe_query_results' );
add_action( 'save_post', 'fe_query_results_delete_transient' );
function fe_query_results( $atts ) {
global $post;
$transient_key = 'fe_query_results_transient_key';
$transient_time = 24 * HOUR_IN_SECONDS;
// return transient if it exists
if ( false !== ( $output = get_transient( $transient_key ) ) ) {
return $output;
}
$output = '';
$args = array(
'post_type' => 'post',
'order' => 'ASC',
'orderby' => 'menu_order',
'posts_per_page' => 200,
// re-enable if you need pagination
'no_found_rows' => true,
// re-enable if you use post meta in your output
'update_post_meta_cache'=> false,
// re-enable if you use terms in your output
'update_post_term_cache'=> false,
);
$fe_query= new WP_Query( $args );
if ( $fe_query->have_posts() ) {
$output .= '<ul class="fe-query-results-shortcode-output">';
while ( $fe_query->have_posts() ) {
$fe_query->the_post();
$title = get_the_title();
$link = get_the_permalink();
$output .= "<li><a href=\"{$link}\">{$title}</a></li>";
}
$output .= '</ul>';
} else {
$output .= '<div class="fe-query-results-shortcode-output-none">No results were found</div>';
}
wp_reset_postdata();
set_transient( $transient_key, $output, $transient_time );
return $output;
}
function fe_query_results_delete_transient() {
global $post;
if ( $post && 'post' === $post->post_type ) {
delete_transient( 'fe_query_results_transient_key' );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment