WordPress.org

Plugin Directory

Changeset 485582


Ignore:
Timestamp:
01/06/12 10:32:27 (2 years ago)
Author:
sorich87
Message:

Added custom templates and query by author

Location:
the-loops/trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • the-loops/trunk/readme.txt

    r482220 r485582  
    44Requires at least: 3.3 
    55Tested up to: 3.4 
    6 Stable tag: 0.1 
     6Stable tag: 0.2 
    77 
    88Like Drupal Views but for WordPress, The Loops allows you to query the 
     
    2020(using shortcodes) or a widget. 
    2121 
     22**Works with any theme and any 'custom post types' plugin!** 
     23 
    2224= Features = 
    2325 
     26* Custom templates 
    2427* Query by post type 
    2528* Query by categories, tags or custom taxonomies 
     29* Query by author 
    2630* Sort by ID, author, title, publication date, last modified date, 
    2731parent ID, number of comments, page order or randomly 
     
    2933* Display the loops in a widget 
    3034 
    31 ** This plugin is in its earlier stages but stable and can be used in a 
     35**This plugin is in its earlier stages but stable and can be used in a 
    3236production environnement. Please be indulgent if it does not have some 
    33 features you need. ** 
     37features you need.** 
    3438 
    3539For feature request and bug reports, [please use the 
     
    8690to add the loop to a sidebar. 
    8791 
     92= How to add custom templates? = 
     93 
     94Copy a default template file from the directory 'tl-templates' in the 
     95plugin directory to your theme directory. Then feel free to modify it to 
     96your liking! 
     97 
    8898== Screenshots == 
    8999 
     
    92102== Changelog == 
    93103 
     104= 0.2 = 
     105* Custom templates. 
     106* Query by author. 
     107 
    94108= 0.1 = 
    95109* First release. 
     
    97111== Upgrade Notice == 
    98112 
     113= 0.2 = 
     114New features: custom templates & query by author. 
     115 
    99116= 0.1 = 
    100117First release. 
  • the-loops/trunk/the-loops.php

    r482220 r485582  
    77 * @package The Loops 
    88 */ 
    9  
    109/** 
    1110 * Plugin Name: The Loops 
     
    1413 * Author: PubPoet 
    1514 * Author URI: http://pubpoet.com/ 
    16  * Version: 0.1 
     15 * Version: 0.2 
    1716 * License: GPL2 
    1817 */ 
     
    6564     */ 
    6665    private function setup_globals() { 
    67         $this->file       = __FILE__; 
    68         $this->basename   = plugin_basename( $this->file ); 
    69         $this->plugin_dir = plugin_dir_path( $this->file ); 
    70         $this->plugin_url = plugin_dir_url( $this->file ); 
     66        $this->file          = __FILE__; 
     67        $this->basename      = plugin_basename( $this->file ); 
     68        $this->plugin_dir    = plugin_dir_path( $this->file ); 
     69        $this->plugin_url    = plugin_dir_url( $this->file ); 
     70        $this->templates_dir = $this->plugin_dir . 'tl-templates/'; 
    7171    } 
    7272 
  • the-loops/trunk/tl-admin.php

    r482220 r485582  
    9393            'post_type' => 'post', 'orderby' => 'title', 'order' => 'ASC', 
    9494            'not_found' => '<p>' . __( 'Nothing found!' ) . '</p>', 
     95            'authors' => '', 
    9596            'shortcode' => array( 
    9697                'id'             => 0, 
    9798                'posts_per_page' => get_option( 'posts_per_page' ), 
    98                 'format'         => 'full' 
     99                'template'       => 'List of full posts' 
    99100            ), 
    100101            'widget' => array( 
    101102                'expose'         => 0, 
    102103                'posts_per_page' => get_option( 'posts_per_page' ), 
    103                 'format'         => 'titles' 
     104                'template'       => 'List of titles' 
    104105            ) 
    105106        ); 
     
    108109 
    109110        $content = wp_parse_args( $content, $defaults ); 
     111 
     112        $loop_templates = tl_get_loop_templates(); 
    110113?> 
    111114<table class="form-table"> 
     
    147150        </td> 
    148151    </tr> 
     152    <tr valign="top"> 
     153        <th scope="row"><label for="loop_authors"><?php _e( 'Authors' ); ?></label></th> 
     154        <td> 
     155            <input type="text" id="loop_authors" name="loop[authors]" value="<?php echo isset( $content['authors'] ) ? $content['authors'] : ''; ?>" class="regular-text" /> 
     156            <span class="description"><?php _e( 'Comma-separated list of authors usernames' ); ?></span> 
     157        </td> 
     158    </tr> 
    149159    <?php $taxs = get_taxonomies( array( 'public' => true ), 'objects' ); ?> 
    150160    <?php foreach ( $taxs as $tax ) : ?> 
     
    152162        <th scope="row"><label for="loop_<?php echo $tax->name; ?>"><?php printf( __( 'Limit to %s' ), $tax->labels->name ); ?></label></th> 
    153163        <td> 
    154             <input type="text" id="loop_<?php echo $tax->name; ?>" name="loop[<?php echo $tax->name; ?>]" value="<?php echo isset( $content[$tax->name] ) ? $content[$tax->name] : ''; ?>" class="regular-text" autocomplete="off" /> 
     164            <input type="text" id="loop_<?php echo $tax->name; ?>" name="loop[<?php echo $tax->name; ?>]" value="<?php echo isset( $content[$tax->name] ) ? $content[$tax->name] : ''; ?>" class="regular-text" /> 
    155165            <span class="description"><?php _e( 'Comma-separated list of slugs' ); ?></span> 
    156166        </td> 
     
    183193    </tr> 
    184194    <tr valign="top"> 
    185         <th scope="row"><label for="loop_shortcode_format"><?php _e( 'As a' ); ?></label></th> 
    186         <td> 
    187             <select id="loop_shortcode_format" name="loop[shortcode][format]"> 
     195        <th scope="row"><label for="loop_shortcode_template"><?php _e( 'Template' ); ?></label></th> 
     196        <td> 
     197            <select id="loop_shortcode_template" name="loop[shortcode][template]"> 
    188198                <?php 
    189                 $format_params = array( 
    190                     'full'     => __( 'List of full posts' ), 
    191                     'excerpts' => __( 'List of excerpts '), 
    192                     'titles'   => __( 'List of titles' ), 
    193                 ); 
    194                 foreach ( $format_params as $key => $label ) { 
    195                     $selected = selected( $key, $content['shortcode']['format'] ); 
    196                     echo "<option value='$key'$selected>{$label}</option>"; 
     199                foreach ( $loop_templates as $name => $file ) { 
     200                    $selected = selected( $name, $content['shortcode']['template'] ); 
     201                    echo "<option value='$name'$selected>{$name}</option>"; 
    197202                } 
    198203                ?> 
     
    218223    </tr> 
    219224    <tr valign="top"> 
    220     <th scope="row"><label for="loop_widget_format"><?php _e( 'As a' ); ?></label></th> 
    221         <td> 
    222             <select id="loop_widget_format" name="loop[widget][format]"> 
     225    <th scope="row"><label for="loop_widget_template"><?php _e( 'Template' ); ?></label></th> 
     226        <td> 
     227            <select id="loop_widget_template" name="loop[widget][template]"> 
    223228                <?php 
    224                 $format_params = array( 
    225                     'full'     => __( 'List of full posts' ), 
    226                     'excerpts' => __( 'List of excerpts '), 
    227                     'titles'   => __( 'List of titles' ), 
    228                 ); 
    229                 foreach ( $format_params as $key => $label ) { 
    230                     $selected = selected( $key, $content['widget']['format'] ); 
    231                     echo "<option value='$key'$selected>{$label}</option>"; 
     229                foreach ( $loop_templates as $name => $file ) { 
     230                    $selected = selected( $name, $content['widget']['template'] ); 
     231                    echo "<option value='$name'$selected>{$name}</option>"; 
    232232                } 
    233233                ?> 
  • the-loops/trunk/tl-functions.php

    r482220 r485582  
    2828 
    2929    $content = get_post_meta( $loop_id, 'tl_loop_content', true ); 
     30 
    3031    $posts_per_page = $content[$type]['posts_per_page']; 
    3132 
     
    3738    ); 
    3839 
     40    $authors_logins = _tl_csv_to_array( $content['authors'] ); 
     41    if ( $authors_logins ) { 
     42        $authors_ids = array(); 
     43 
     44        foreach ( $authors_logins as $author_login ) { 
     45            $authors_ids[] = get_user_by( 'login', $author_login )->ID; 
     46        } 
     47 
     48        if ( $authors_ids ) 
     49            $authors_ids = implode( ',', $authors_ids ); 
     50 
     51        $args['author'] = $authors_ids; 
     52    } 
     53 
    3954    $taxs = get_taxonomies( array( 'public' => true ), 'names' ); 
    4055    if ( $taxs ) { 
     
    4459                continue; 
    4560 
    46             $terms = str_replace( array( ' , ', ', ', ' ,' ), ',', $content[$tax] ); 
    47             $terms = explode( ',', $terms ); 
     61            $terms = _tl_csv_to_array( $content[$tax] ); 
    4862 
    4963            $tax_query[] = array( 
     
    6781 
    6882/** 
     83 * Convert a string of comma-separated values to an array 
     84 * 
     85 * @package The_Loops 
     86 * @since 0.2 
     87 * @params string $string String of comma-separated values 
     88 * @return array Values 
     89 */ 
     90function _tl_csv_to_array( $string ) { 
     91    if ( ! $string ) 
     92        return; 
     93 
     94    $string = str_replace( array( ' , ', ', ', ' ,' ), ',', $string ); 
     95    return explode( ',', $string ); 
     96} 
     97 
     98/** 
    6999 * Wrapper function for get_posts to get the loops. 
    70100 * 
     
    129159function tl_display_post( $loop_id, $type ) { 
    130160    $content = get_post_meta( $loop_id, 'tl_loop_content', true ); 
    131     $format = $content[$type]['format']; 
    132  
    133     if ( 'widget' == $type ) 
    134         $heading_tag = 'h4'; 
    135     else 
    136         $heading_tag = 'h2'; 
     161    $loop_template_name = $content[$type]['template']; 
     162 
     163    $loop_templates = tl_get_loop_templates(); 
     164    $loop_template_file = $loop_templates[$loop_template_name]; 
    137165 
    138166    ob_start(); 
    139167 
    140     switch ( $format ) { 
    141         case 'titles': 
    142 ?> 
    143     <p><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></p> 
    144 <?php 
    145         break; 
    146     case 'excerpts' : 
    147 ?> 
    148     <<?php echo $heading_tag; ?>><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></<?php echo $heading_tag; ?>> 
    149     <?php the_excerpt(); ?> 
    150 <?php 
    151             break; 
    152         case 'full' : 
    153         default : 
    154 ?> 
    155     <<?php echo $heading_tag; ?>><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyeleven' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></<?php echo $heading_tag; ?>> 
    156     <?php the_content(); ?> 
    157 <?php 
    158             break; 
    159     } 
     168    global $tl_loop_context; 
     169    $tl_loop_context = $type; 
     170 
     171    tl_locate_template( $loop_template_file, true ); 
    160172 
    161173    $content = ob_get_contents(); 
     174    $loop_context = null; 
    162175    ob_end_clean(); 
    163176 
     
    201214add_shortcode( 'the-loop', 'tl_shortcode' ); 
    202215 
     216/** 
     217 * Get the default Loop Templates 
     218 * 
     219 * @package The Loops 
     220 * @since 0.2 
     221 */ 
     222function tl_get_default_loop_templates() { 
     223    global $tl; 
     224    $templates_files = scandir( $tl->templates_dir ); 
     225 
     226    foreach ( $templates_files as $template ) { 
     227        if ( ! is_file( $tl->templates_dir . $template ) ) 
     228            continue; 
     229 
     230        // don't allow template files in subdirectories 
     231        if ( false !== strpos( $template, '/' ) ) 
     232            continue; 
     233 
     234        $data = get_file_data( $tl->templates_dir. $template, array( 'name' => 'The Loops Template' ) ); 
     235 
     236        if ( ! empty( $data['name'] ) ) 
     237            $loop_templates[trim( $data['name'] )] = $template; 
     238    } 
     239 
     240    return $loop_templates; 
     241} 
     242 
     243/** 
     244 * Get the Loop Templates available in the current theme or the default ones 
     245 * 
     246 * @package The Loops 
     247 * @since 0.2 
     248 */ 
     249function tl_get_loop_templates() { 
     250    $themes = get_themes(); 
     251    $theme = get_current_theme(); 
     252    $templates = $themes[$theme]['Template Files']; 
     253    $loop_templates = tl_get_default_loop_templates(); 
     254 
     255    if ( is_array( $templates ) ) { 
     256        $base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) ); 
     257 
     258        foreach ( $templates as $template ) { 
     259            $basename = str_replace( $base, '', $template ); 
     260 
     261            // don't allow template files in subdirectories 
     262            if ( false !== strpos( $basename, '/' ) ) 
     263                continue; 
     264 
     265            if ( 'functions.php' == $basename ) 
     266                continue; 
     267 
     268            $data = get_file_data( $template, array( 'name' => 'The Loops Template' ) ); 
     269 
     270            if ( !empty( $data['name'] ) ) 
     271                $loop_templates[trim( $data['name'] )] = $basename; 
     272        } 
     273    } 
     274 
     275    return $loop_templates; 
     276} 
     277 
     278/** 
     279 * Retrieve the name of the highest priority template file that exists. 
     280 * 
     281 * Searches in the plugin templates dir, then STYLESHEETPATH and TEMPLATEPATH. 
     282 * 
     283 * @package The Loops 
     284 * @since 0.2 
     285 * 
     286 * @param string|array $template_names Template file(s) to search for, in order. 
     287 * @param bool $load If true the template file will be loaded if it is found. 
     288 * @param bool $require_once Whether to require_once or require. Default true. Has no effect if $load is false. 
     289 * @return string The template filename if one is located. 
     290 */ 
     291function tl_locate_template( $template_names, $load = false, $require_once = true ) { 
     292    global $tl; 
     293 
     294    $located = ''; 
     295    foreach ( (array) $template_names as $template_name ) { 
     296        if ( ! $template_name ) 
     297            continue; 
     298 
     299        if ( file_exists($tl->templates_dir . $template_name) ) { 
     300            $located = $tl->templates_dir . $template_name; 
     301            break; 
     302        } else if ( file_exists(STYLESHEETPATH . '/' . $template_name) ) { 
     303            $located = STYLESHEETPATH . '/' . $template_name; 
     304            break; 
     305        } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) { 
     306            $located = TEMPLATEPATH . '/' . $template_name; 
     307            break; 
     308        } 
     309    } 
     310 
     311    if ( $load && '' != $located ) 
     312        load_template( $located, $require_once ); 
     313 
     314    return $located; 
     315} 
     316 
     317/** 
     318 * Return loop context. 'widget' or 'shortcode' 
     319 * 
     320 * @package The Loops 
     321 * @since 0.2 
     322 */ 
     323function tl_loop_context() { 
     324    global $tl_loop_context; 
     325    return $tl_loop_context; 
     326} 
     327 
  • the-loops/trunk/tl-widget.php

    r482220 r485582  
    5959} 
    6060 
     61/** 
     62 * Register widget 
     63 * 
     64 * @package The Loops 
     65 * @since 0.1 
     66 */ 
    6167function tl_widget_init() { 
    6268    register_widget('TL_Widget'); 
Note: See TracChangeset for help on using the changeset viewer.