WordPress.org

Plugin Directory

Changeset 509712


Ignore:
Timestamp:
02/24/12 09:54:02 (2 years ago)
Author:
sorich87
Message:

Added loops of users

Location:
the-loops/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • the-loops/trunk/css/style.css

    r506234 r509712  
    1 .loop-date{width:75px}div.tagsinput{border:1px solid #CCC;background:#FFF;padding:6px;overflow-y:auto}div.tagsinput span.tag{border:1px solid #f1f1f1;-moz-border-radius:2px;-webkit-border-radius:2px;display:block;float:left;padding:1px 5px;text-decoration:none;background:#f1f1f1;color:#333;margin-right:5px;margin-bottom:5px}div.tagsinput span.tag a{font-weight:bold;color:#21759b;text-decoration:none;font-size:11px}div.tagsinput input{width:80px;margin:0;border:1px solid transparent;padding:1px 5px;background:transparent;color:#000;outline:0;margin-right:2px;margin-bottom:0}div.tagsinput div{display:block;float:left}.tags_clear{clear:both;width:100%;height:0}.not_valid{background:#F00!important;color:#FFF!important} 
     1.loop-date{width:75px}#poststuff h3.nav-tab-wrapper{padding:0;margin:0 0 20px}#poststuff h3.nav-tab-wrapper span{margin:0 20px 0 0}#poststuff h3 .nav-tab{font-size:16px;line-height:20px}div.tagsinput{border:1px solid #CCC;background:#FFF;padding:6px;overflow-y:auto}div.tagsinput span.tag{border:1px solid #f1f1f1;-moz-border-radius:2px;-webkit-border-radius:2px;display:block;float:left;padding:1px 5px;text-decoration:none;background:#f1f1f1;color:#333;margin-right:5px;margin-bottom:5px}div.tagsinput span.tag a{font-weight:bold;color:#21759b;text-decoration:none;font-size:11px}div.tagsinput input{width:80px;margin:0;border:1px solid transparent;padding:1px 5px;background:transparent;color:#000;outline:0;margin-right:2px;margin-bottom:0}div.tagsinput div{display:block;float:left}.tags_clear{clear:both;width:100%;height:0}.not_valid{background:#F00!important;color:#FFF!important} 
  • the-loops/trunk/css/style.dev.css

    r506234 r509712  
    22.loop-date { 
    33    width: 75px; 
     4} 
     5 
     6#poststuff h3.nav-tab-wrapper { 
     7    padding: 0; 
     8    margin: 0 0 20px; 
     9} 
     10#poststuff h3.nav-tab-wrapper span { 
     11    margin: 0 20px 0 0; 
     12} 
     13#poststuff h3 .nav-tab { 
     14    font-size: 16px; 
     15    line-height: 20px; 
    416} 
    517 
  • the-loops/trunk/readme.txt

    r506859 r509712  
    11=== Plugin Name === 
    22Contributors: sorich87 
    3 Tags: loop, loops, The Loop, shortcode, widget, post, posts, page, pages 
     3Tags: loop, loops, the loop, shortcode, widget, posts, pages, custom 
     4post types, users 
    45Requires at least: 3.3 
    56Tested up to: 3.4 
    6 Stable tag: 0.3.1 
     7Stable tag: 0.4 
    78 
    89Like Drupal Views but for WordPress, The Loops allows you to query the 
     
    1314 
    1415The Loops plugin offers you great flexibility for displaying your site 
    15 content. It provides a graphical user interface in your WordPress site 
    16 admin that allows you to query the database for content without having 
    17 to write any PHP code or SQL queries. 
     16content and users list. It provides a graphical user interface in your 
     17WordPress site admin that allows you to query the database for content 
     18without having to write any PHP code or SQL queries. 
    1819 
    1920With this plugin, you can display the queried content in a page or post 
     
    2728* Works with any theme without modification 
    2829* Works with any 'custom post types' plugin 
     30* Display list of posts and users with all the possibilities offered by 
     31WordPress 
    2932* Custom templates 
    30 * Support all the WordPress post query possibilities 
    31 * Display the loops anywhere with a shortcode 
    32 * Display the loops in a widget 
     33* Display the loops anywhere with a shortcode or a widget 
    3334 
    3435= Contributors = 
     
    104105== Changelog == 
    105106 
    106 = 0.3.1 = 
    107 * Fixed broken packaging on wordpress.org 
     107= 0.4 = 
     108* Lists of users. 
    108109 
    109110= 0.3 = 
     
    120121== Upgrade Notice == 
    121122 
    122 = 0.3.1 = 
    123 * Fixed broken packaging on wordpress.org 
     123= 0.4 = 
     124New feature: loops of users. 
    124125 
    125126= 0.3 = 
  • the-loops/trunk/the-loops.php

    r506859 r509712  
    1313 * Author: PubPoet 
    1414 * Author URI: http://pubpoet.com/ 
    15  * Version: 0.3.1 
     15 * Version: 0.4 
    1616 * License: GPL2 
    1717 */ 
     
    7979    private function includes() { 
    8080        require( $this->plugin_dir . 'tl-functions.php' ); 
     81        require( $this->plugin_dir . 'tl-template-tags.php' ); 
    8182        require( $this->plugin_dir . 'tl-widget.php' ); 
    8283 
  • the-loops/trunk/tl-admin.php

    r506227 r509712  
    2828        add_action( 'dbx_post_sidebar', array( __CLASS__, 'loop_save_button' ) ); 
    2929        add_action( 'save_post', array( __CLASS__, 'save_loop' ), 10, 2 ); 
     30        add_action( 'submitpost_box', array( __CLASS__, 'loop_type_tabs' ) ); 
    3031 
    3132        add_filter( 'bulk_actions-edit-tl_loop', array( __CLASS__, 'remove_bulk_edit' ) ); 
     
    113114 
    114115    /** 
     116     * Display tabs to choose the loop type 
     117     * @package The_Loops 
     118     * @since 0.4 
     119     */ 
     120    public static function loop_type_tabs() { 
     121        global $post_ID; 
     122 
     123        if ( 'tl_loop' != get_current_screen()->id ) 
     124            return; 
     125 
     126        $objects = isset( $_GET['tl_objects'] ) ? $_GET['tl_objects'] : tl_get_loop_object_type( $post_ID ); 
     127?> 
     128<h3 class="nav-tab-wrapper"> 
     129    <span><?php _e( 'Objects:' ); ?></span> 
     130 
     131    <?php $active_class = 'posts' == $objects ? ' nav-tab-active' : ''; ?> 
     132    <a href="<?php echo add_query_arg( 'tl_objects', 'posts' ); ?>" class="nav-tab<?php echo $active_class; ?>"><?php _e( 'Posts' ); ?></a> 
     133 
     134    <?php $active_class = 'users' == $objects ? ' nav-tab-active' : ''; ?> 
     135    <a href="<?php echo add_query_arg( 'tl_objects', 'users' ); ?>" class="nav-tab<?php echo $active_class; ?>"><?php _e( 'Users' ); ?></a> 
     136</h3> 
     137<input type="hidden" name="tl_objects" id="tl_objects" value="<?php echo $objects; ?>" /> 
     138<?php 
     139 
     140        wp_nonce_field( 'tl_edit_loop', '_tlnonce' ); 
     141    } 
     142 
     143    /** 
    115144     * Add loop content metabox 
    116145     * 
     
    133162     */ 
    134163    public static function closed_meta_boxes( $closed ) { 
    135         if ( false === $closed ) 
    136             $closed = array( 'tl_otherdiv', 'tl_customfielddiv', 'tl_datediv', 'tl_orderpaginationdiv', 'tl_taxonomydiv' ); 
     164        if ( false === $closed ) { 
     165            $closed = array( 
     166                'tl_postsotherdiv', 'tl_postsdatediv', 'tl_postsorderpaginationdiv', 
     167                'tl_usersotherdiv', 'tl_usersorderpaginationdiv', 
     168                'tl_customfielddiv', 'tl_taxonomydiv' 
     169            ); 
     170        } 
    137171 
    138172        return $closed; 
     
    171205 
    172206        // remove data added by template tables 
    173         array_pop( $data['taxonomies'] ); 
    174         array_pop( $data['custom_fields'] ); 
     207        if ( ! empty( $data['taxonomies'] ) ) 
     208            array_pop( $data['taxonomies'] ); 
     209 
     210        if ( ! empty( $data['custom_fields'] ) ) 
     211            array_pop( $data['custom_fields'] ); 
    175212 
    176213        update_post_meta( $post_id, '_tl_loop_parameters', $data ); 
     214        update_post_meta( $post_id, '_tl_loop_object_type', $_POST['tl_objects'] ); 
    177215    } 
    178216 
  • the-loops/trunk/tl-functions.php

    r506227 r509712  
    160160    } 
    161161 
    162     // custom field 
    163     if ( ! empty( $content['custom_fields'] ) ) { 
    164         $meta_query = array(); 
    165  
    166         foreach ( $content['custom_fields'] as $custom_field ) { 
    167             if ( empty( $custom_field['key'] ) ) 
    168                 continue; 
    169  
    170             $values = _tl_csv_to_array( $custom_field['values'], "\t" ); 
    171  
    172             if ( in_array( $custom_field['compare'], array( 'LIKE', 'NOT LIKE' ) ) ) 
    173                 $values = $values[0]; 
    174  
    175             $meta_query[] = array( 
    176                 'key'     => trim( $custom_field['key'] ), 
    177                 'value'   => $values, 
    178                 'compare' => $custom_field['compare'], 
    179                 'type'    => $custom_field['type'] 
    180             ); 
    181         } 
    182  
    183         if ( $meta_query ) { 
    184             $meta_query['relation'] = 'AND'; 
    185             $args['meta_query'] = $meta_query; 
    186         } 
    187     } 
     162    // custom fields 
     163    $args['meta_query'] = _tl_build_meta_query( $content['custom_fields'] ); 
    188164 
    189165    // pagination 
     
    280256 
    281257/** 
     258 * Returns a WP_User_Query based on a loop details. 
     259 * 
     260 * @package The_Loops 
     261 * @since 0.4 
     262 * 
     263 * @param int $id Loop ID. 
     264 * @param string|array $query URL query string or array. 
     265 * @return WP_User_Query 
     266 */ 
     267function tl_user_query( $id, $query = '' ) { 
     268    global $the_loop_context, $post_ID; 
     269 
     270    $content = tl_get_loop_parameters( $id ); 
     271 
     272    $args = array(); 
     273 
     274    // order and orderby 
     275    $args['order'] = $content['order']; 
     276    $args['orderby'] = $content['orderby']; 
     277 
     278    // offset and pagination 
     279    if ( 'none' == $content['pagination'] ) { 
     280        $args['offset'] = $content['offset'] + ( $content['paged'] - 1 ) * $content['number']; 
     281    } else { 
     282        $paged = max( 1, get_query_var( 'paged' ) ); 
     283 
     284        $args['offset'] = ( $paged - 1 ) * $content['number']; 
     285    } 
     286    $args['number'] = absint( $content['number'] ); 
     287 
     288    // search 
     289    $args['search'] = $content['search']; 
     290 
     291    // role 
     292    $args['role'] = $content['role']; 
     293 
     294    // user ids 
     295    $users = trim( $content['users'] ); 
     296    if ( ! empty( $users ) ) { 
     297        if ( empty( $content['exclude_users'] ) ) { 
     298            $args['include'] = $users; 
     299        } else { 
     300            $args['exclude'] = $users; 
     301        } 
     302    } 
     303 
     304    // custom fields 
     305    $args['meta_query'] = _tl_build_meta_query( $content['custom_fields'] ); 
     306 
     307    $args = wp_parse_args( $query, $args ); 
     308 
     309    // if pagination is hidden, turn off SQL_CALC_FOUND_ROWS 
     310    if ( 'none' == $content['pagination'] ) 
     311        $args['count_total'] = false; 
     312 
     313    $args['fields'] = 'all_with_meta'; 
     314 
     315    return new WP_User_Query( $args ); 
     316} 
     317 
     318/** 
    282319 * Convert a string of comma-separated values to an array 
    283320 * 
     
    293330    $array = explode( $delimiter, $string ); 
    294331    return array_unique( array_map( 'trim', $array ) ); 
     332} 
     333 
     334/** 
     335 * Build a meta query array based on form data 
     336 * 
     337 * @package The_Loops 
     338 * @since 0.4 
     339 * @param array $custom_fields Form data 
     340 * @return array Meta query 
     341 */ 
     342function _tl_build_meta_query( $custom_fields ) { 
     343    if ( empty( $custom_fields ) ) 
     344        return; 
     345 
     346    $meta_query = array(); 
     347 
     348    foreach ( $custom_fields as $custom_field ) { 
     349        if ( empty( $custom_field['key'] ) ) 
     350            continue; 
     351 
     352        $values = _tl_csv_to_array( $custom_field['values'], "\t" ); 
     353 
     354        if ( in_array( $custom_field['compare'], array( 'LIKE', 'NOT LIKE' ) ) ) 
     355            $values = $values[0]; 
     356 
     357        $meta_query[] = array( 
     358            'key'     => trim( $custom_field['key'] ), 
     359            'value'   => $values, 
     360            'compare' => $custom_field['compare'], 
     361            'type'    => $custom_field['type'] 
     362        ); 
     363    } 
     364 
     365    return $meta_query; 
    295366} 
    296367 
     
    319390 */ 
    320391function tl_setup_globals( $loop_id, $args, $context ) { 
    321     global $wp_query, $orig_query, $the_loop_id, $the_loop_context; 
     392    global $wp_query, $orig_query, $the_loop_id, $the_loop_context, $tl_user_query; 
    322393 
    323394    $the_loop_id      = $loop_id; 
    324395    $the_loop_context = $context; 
    325396 
    326     $tl_query = tl_query( $loop_id, $args ); 
    327     $orig_query = clone $wp_query; 
    328     $wp_query   = clone $tl_query; 
     397    $type = tl_get_loop_object_type( $loop_id ); 
     398 
     399    switch ( $type ) { 
     400        case 'posts' : 
     401            $tl_query = tl_query( $loop_id, $args ); 
     402            $orig_query = clone $wp_query; 
     403            $wp_query   = clone $tl_query; 
     404            break; 
     405 
     406        case 'users' : 
     407            $tl_user_query = tl_user_query( $loop_id, $args ); 
     408            break; 
     409    } 
    329410} 
    330411 
     
    336417 */ 
    337418function tl_clear_globals() { 
    338     global $wp_query, $orig_query, $the_loop_id, $the_loop_context; 
    339  
    340     $wp_query = clone $orig_query; 
    341     wp_reset_query(); 
    342  
    343     unset( $orig_query, $the_loop_id, $the_loop_context ); 
     419    global $wp_query, $orig_query, $the_loop_id, $the_loop_context, $tl_user_query; 
     420 
     421    if ( 'posts' == tl_get_loop_object_type( $the_loop_id ) ) { 
     422        $wp_query = clone $orig_query; 
     423        wp_reset_query(); 
     424    } 
     425 
     426    unset( $orig_query, $the_loop_id, $the_loop_context, $tl_user_query ); 
    344427} 
    345428 
     
    358441    global $the_loops; 
    359442 
    360     $loop_templates = tl_get_loop_templates(); 
    361     $loop_template = $loop_templates[$template_name]; 
     443    $type = tl_get_loop_object_type( $loop_id ); 
     444 
     445    $loop_templates = tl_get_loop_templates( $type ); 
     446    $loop_template = isset( $loop_templates[$template_name] ) ? $loop_templates[$template_name] : ''; 
    362447 
    363448    tl_setup_globals( $loop_id, $args, $context ); 
    364449 
    365450    ob_start(); 
    366  
    367     include( "{$the_loops->plugin_dir}tl-template-tags.php" ); 
    368451 
    369452    tl_locate_template( $loop_template, true ); 
     
    395478 
    396479/** 
    397  * Get the default Loop Templates 
     480 * Check if a template file is a loop template and corresponds to the specified object type 
     481 * 
     482 * @package The_Loops 
     483 * @since 0.4 
     484 * 
     485 * @param string $file Template file name 
     486 * @param string $objects Template objects type 
     487 * @return string Template name 
     488 */ 
     489function tl_is_loop_template( $file, $objects = 'posts' ) { 
     490    $data = get_file_data( $file, array( 
     491        'name'    => 'The Loops Template', 
     492        'objects' => 'The Loops Objects' 
     493    ) ); 
     494 
     495    $template_name    = trim( $data['name'] ); 
     496    $template_objects = trim( $data['objects'] ); 
     497 
     498    if ( empty( $template_name ) ) 
     499        return; 
     500 
     501    if ( 'all' == $objects || ( empty( $template_objects ) && 'posts' == $objects ) 
     502        || ( 'posts' != $template_objects && $objects == $template_objects ) ) 
     503        return $template_name; 
     504} 
     505 
     506/** 
     507 * Get the default Loop Templates corresponding to the specified objects type 
    398508 * 
    399509 * @package The_Loops 
    400510 * @since 0.2 
    401  */ 
    402 function tl_get_default_loop_templates() { 
     511 * 
     512 * @param string $objects Loop objects type 
     513 * @return array Default templates 
     514 */ 
     515function tl_get_default_loop_templates( $objects = 'posts' ) { 
    403516    global $the_loops; 
    404517 
    405518    $templates_files = scandir( $the_loops->templates_dir ); 
    406519 
     520    $loop_templates = array(); 
    407521    foreach ( $templates_files as $template ) { 
    408522        if ( ! is_file( $the_loops->templates_dir . $template ) ) 
    409523            continue; 
    410524 
    411         // don't allow template files in subdirectories 
    412         if ( false !== strpos( $template, '/' ) ) 
    413             continue; 
    414  
    415         $data = get_file_data( $the_loops->templates_dir. $template, array( 'name' => 'The Loops Template' ) ); 
    416  
    417         if ( ! empty( $data['name'] ) ) 
    418             $loop_templates[trim( $data['name'] )] = $template; 
     525        $template_name = tl_is_loop_template( $the_loops->templates_dir. $template, $objects ); 
     526 
     527        if ( $template_name ) 
     528            $loop_templates[$template_name] = $template; 
    419529    } 
    420530 
     
    423533 
    424534/** 
    425  * Get the Loop Templates available in the current theme or the default ones 
     535 * Get all the available Loop Templates corresponding to the specified objects type 
    426536 * 
    427537 * @package The_Loops 
    428538 * @since 0.2 
    429  */ 
    430 function tl_get_loop_templates() { 
     539 * 
     540 * @param string $objects Loop objects type 
     541 * @return array Loop templates 
     542 */ 
     543function tl_get_loop_templates( $objects = 'posts' ) { 
    431544    $themes = get_themes(); 
    432545    $theme = get_current_theme(); 
    433546    $templates = $themes[$theme]['Template Files']; 
    434     $loop_templates = tl_get_default_loop_templates(); 
    435  
    436     if ( is_array( $templates ) ) { 
    437         $base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) ); 
    438  
    439         foreach ( $templates as $template ) { 
    440             $basename = str_replace( $base, '', $template ); 
    441  
    442             // don't allow template files in subdirectories 
    443             if ( false !== strpos( $basename, '/' ) ) 
    444                 continue; 
    445  
    446             if ( 'functions.php' == $basename ) 
    447                 continue; 
    448  
    449             $data = get_file_data( $template, array( 'name' => 'The Loops Template' ) ); 
    450  
    451             if ( !empty( $data['name'] ) ) 
    452                 $loop_templates[trim( $data['name'] )] = $basename; 
    453         } 
     547    $loop_templates = tl_get_default_loop_templates( $objects ); 
     548 
     549    $base = array( trailingslashit( get_template_directory() ), trailingslashit( get_stylesheet_directory() ) ); 
     550 
     551    foreach ( (array) $templates as $template ) { 
     552        $basename = str_replace( $base, '', $template ); 
     553 
     554        // don't allow template files in subdirectories 
     555        if ( false !== strpos( $basename, '/' ) ) 
     556            continue; 
     557 
     558        if ( 'functions.php' == $basename ) 
     559            continue; 
     560 
     561        $template_name = tl_is_loop_template( $template, $objects ); 
     562 
     563        if ( $template_name ) 
     564            $loop_templates[$template_name] = $basename; 
    454565    } 
    455566 
     
    509620} 
    510621 
     622/** 
     623 * Get loop object type 
     624 * 
     625 * @package The_Loops 
     626 * @since 0.4 
     627 * 
     628 * @param int $loop_id Loop ID 
     629 * @return string Object type 
     630 */ 
     631function tl_get_loop_object_type( $loop_id ) { 
     632    $type = get_post_meta( $loop_id, '_tl_loop_object_type', true ); 
     633 
     634    if ( empty( $type ) ) 
     635        $type = 'posts'; 
     636 
     637    return $type; 
     638} 
     639 
  • the-loops/trunk/tl-meta-boxes.php

    r506227 r509712  
    2222     */ 
    2323    public static function init() { 
    24         add_meta_box( 'tl_generaldiv', __( 'General Parameters' ), array( __CLASS__, 'meta_box_general' ), 'tl_loop', 'normal' ); 
    25         add_meta_box( 'tl_taxonomydiv', __( 'Taxonomy Parameters' ), array( __CLASS__, 'meta_box_taxonomy' ), 'tl_loop', 'normal' ); 
    26         add_meta_box( 'tl_orderpaginationdiv', __( 'Order & Pagination Parameters' ), array( __CLASS__, 'meta_box_order_pagination' ), 'tl_loop', 'normal' ); 
    27         add_meta_box( 'tl_datediv', __( 'Date Parameters' ), array( __CLASS__, 'meta_box_date' ), 'tl_loop', 'normal' ); 
    28         add_meta_box( 'tl_customfielddiv', __( 'Custom Field Parameters' ), array( __CLASS__, 'meta_box_custom_field' ), 'tl_loop', 'normal' ); 
    29         add_meta_box( 'tl_otherdiv', __( 'Other Parameters' ), array( __CLASS__, 'meta_box_other' ), 'tl_loop', 'normal' ); 
     24        global $post_ID; 
     25 
     26        $objects = isset( $_GET['tl_objects'] ) ? $_GET['tl_objects'] : tl_get_loop_object_type( $post_ID ); 
     27 
     28        switch ( $objects ) { 
     29            case 'users' : 
     30                add_meta_box( 'tl_usersgeneraldiv', __( 'General Parameters' ), array( __CLASS__, 'meta_box_users_general' ), 'tl_loop', 'normal' ); 
     31                add_meta_box( 'tl_usersorderpaginationdiv', __( 'Order & Pagination Parameters' ), array( __CLASS__, 'meta_box_users_order_pagination' ), 'tl_loop', 'normal' ); 
     32                add_meta_box( 'tl_customfielddiv', __( 'Custom Field Parameters' ), array( __CLASS__, 'meta_box_custom_field' ), 'tl_loop', 'normal' ); 
     33                add_meta_box( 'tl_usersotherdiv', __( 'Other Parameters' ), array( __CLASS__, 'meta_box_users_other' ), 'tl_loop', 'normal' ); 
     34                break; 
     35 
     36            default : 
     37                add_meta_box( 'tl_postsgeneraldiv', __( 'General Parameters' ), array( __CLASS__, 'meta_box_posts_general' ), 'tl_loop', 'normal' ); 
     38                add_meta_box( 'tl_taxonomydiv', __( 'Taxonomy Parameters' ), array( __CLASS__, 'meta_box_taxonomy' ), 'tl_loop', 'normal' ); 
     39                add_meta_box( 'tl_postsorderpaginationdiv', __( 'Order & Pagination Parameters' ), array( __CLASS__, 'meta_box_posts_order_pagination' ), 'tl_loop', 'normal' ); 
     40                add_meta_box( 'tl_postsdatediv', __( 'Date Parameters' ), array( __CLASS__, 'meta_box_posts_date' ), 'tl_loop', 'normal' ); 
     41                add_meta_box( 'tl_customfielddiv', __( 'Custom Field Parameters' ), array( __CLASS__, 'meta_box_custom_field' ), 'tl_loop', 'normal' ); 
     42                add_meta_box( 'tl_postsotherdiv', __( 'Other Parameters' ), array( __CLASS__, 'meta_box_posts_other' ), 'tl_loop', 'normal' ); 
     43                break; 
     44        } 
    3045    } 
    3146 
     
    3651     * @since 0.3 
    3752     */ 
    38     public static function meta_box_general() { 
     53    public static function meta_box_posts_general() { 
    3954        global $post_ID; 
    40  
    41         wp_nonce_field( 'tl_edit_loop', '_tlnonce' ); 
    4255 
    4356        $content = tl_get_loop_parameters( $post_ID ); 
     
    127140     * @since 0.3 
    128141     */ 
    129     public static function meta_box_other() { 
     142    public static function meta_box_posts_other() { 
    130143        global $post_ID; 
    131144 
     
    242255     * @since 0.3 
    243256     */ 
    244     public static function meta_box_date() { 
     257    public static function meta_box_posts_date() { 
    245258        global $post_ID; 
    246259 
     
    591604     * @since 0.3 
    592605     */ 
    593     public static function meta_box_order_pagination() { 
     606    public static function meta_box_posts_order_pagination() { 
    594607        global $post_ID; 
    595608 
     
    676689    } 
    677690 
     691    /** 
     692     * Display metabox for setting the content of a users loop 
     693     * 
     694     * @package The_Loops 
     695     * @since 0.4 
     696     */ 
     697    public static function meta_box_users_general() { 
     698        global $post_ID, $wp_roles; 
     699 
     700        $content = tl_get_loop_parameters( $post_ID ); 
     701 
     702        $defaults = array( 
     703            'not_found' => '<p>' . __( 'Nothing found!' ) . '</p>', 
     704            'role'      => 'subscriber', 
     705            'template'  => 'List of user bios' 
     706        ); 
     707        $content = wp_parse_args( $content, $defaults ); 
     708        extract( $content ); 
     709?> 
     710<table class="form-table"> 
     711    <tr valign="top"> 
     712        <th scope="row"><label for="loop_role"><?php _e( 'Role' ); ?></label></th> 
     713        <td> 
     714            <select id="loop_role" name="loop[role]"> 
     715                <?php 
     716                $available_roles = $wp_roles->get_names(); 
     717                foreach ( $available_roles as $key => $name ) { 
     718                    $selected = selected( $key, $role, false ); 
     719                    echo "<option value='$key'$selected>$name</option>"; 
     720                } 
     721                ?> 
     722            </select> 
     723        </td> 
     724    </tr> 
     725    <tr valign="top"> 
     726        <th scope="row"><label for="loop_template"><?php _e( 'Template' ); ?></label></th> 
     727        <td> 
     728            <select id="loop_template" name="loop[template]"> 
     729                <?php 
     730                $loop_templates = tl_get_loop_templates( 'users' ); 
     731                foreach ( $loop_templates as $name => $file ) { 
     732                    $selected = selected( $name, $template ); 
     733                    echo "<option value='" . esc_attr( $name ) . "'$selected>{$name}</option>"; 
     734                } 
     735                ?> 
     736            </select> 
     737        </td> 
     738    </tr> 
     739    <tr valign="top"> 
     740        <th scope="row"><label for="loop_not_found"><?php _e( 'Not found text' ); ?></label></th> 
     741        <td> 
     742            <input type="text" id="loop_not_found" name="loop[not_found]" value="<?php echo esc_attr( $not_found ); ?>" class="regular-text" /> 
     743            <span class="description"><?php _e( 'Text to display when nothing found' ); ?></span> 
     744        </td> 
     745    </tr> 
     746    <tr valign="top"> 
     747        <th scope="row"><?php _e( 'Shortcode' ); ?></th> 
     748        <td> 
     749            <code><?php echo '[the-loop id="' . $post_ID . '"]'; ?></code> 
     750            <span class="description"><?php _e( 'To use the shortcode, copy/paste it in the post or page where you want to display the loop' ); ?></span> 
     751        </td> 
     752    </tr> 
     753    <tr valign="top"> 
     754        <th scope="row"><?php _e( 'Widget' ); ?></th> 
     755        <td> 
     756            <span class="description"><?php printf( __( 'To use the widget, <a href="%s">go to the widgets management screen</a> and assign The Loops widget to a sidebar' ), site_url( 'wp-admin/widgets.php' ) ) ?></span> 
     757        </td> 
     758    </tr> 
     759</table> 
     760<?php 
     761    } 
     762 
     763    /** 
     764     * Display metabox for a users loop display settings 
     765     * 
     766     * @package The_Loops 
     767     * @since 0.4 
     768     */ 
     769    public static function meta_box_users_order_pagination() { 
     770        global $post_ID; 
     771 
     772        $content = tl_get_loop_parameters( $post_ID ); 
     773 
     774        $defaults = array( 
     775            'number'         => get_option( 'posts_per_page' ), 
     776            'offset'         => 0, 
     777            'orderby'        => 'display_name', 
     778            'order'          => 'ASC', 
     779            'paged'          => 1, 
     780            'pagination'     => 'previous_next' 
     781        ); 
     782        $content = wp_parse_args( $content, $defaults ); 
     783        extract( $content ); 
     784?> 
     785<table class="form-table"> 
     786    <tr valign="top"> 
     787        <th scope="row"><label for="loop_number"><?php _e( 'Items per page' ); ?></label></th> 
     788        <td> 
     789            <input type="text" id="loop_number" name="loop[number]" value="<?php echo esc_attr( $number ); ?>" class="small-text" /> 
     790            <span class="description"><?php _e( 'If this is left empty, all the items will be displayed' ); ?></span> 
     791        </td> 
     792    </tr> 
     793    <tr valign="top"> 
     794        <th scope="row"><label for="loop_orderby"><?php _e( 'Sorted by' ); ?></label></th> 
     795        <td> 
     796            <select id="loop_orderby" name="loop[orderby]"> 
     797                <?php 
     798                $orderby_params = array( 
     799                    'ID' => __( 'ID' ), 'user_login' => __( 'Username' ), 'display_name' => __( 'Display name' ), 
     800                    'user_nicename' => __( 'Nicename' ), 'user_email' => __( 'E-mail' ), 'user_url' => __( 'Website' ), 
     801                    'user_registered' => __( 'Registration date' ), 'post_count' => __( 'Number of posts' ), 'rand' => __( 'Random order' ) 
     802                ); 
     803                foreach ( $orderby_params as $key => $label ) { 
     804                    $selected = selected( $key, $orderby ); 
     805                    echo "<option value='" . esc_attr( $key ) . "'$selected>{$label}</option>"; 
     806                } 
     807                ?> 
     808            </select> 
     809            <select id="loop_order" name="loop[order]"> 
     810                <option value="DESC"<?php selected( 'DESC', $order, true ); ?>><?php _e( 'DESC' ); ?></option> 
     811                <option value="ASC"<?php selected( 'ASC', $order, true ); ?>><?php _e( 'ASC' ); ?></option> 
     812            </select> 
     813        </td> 
     814    </tr> 
     815    <tr valign="top"> 
     816        <th scope="row"><label for="loop_pagination"><?php _e( 'Pagination format' ); ?></label></th> 
     817        <td> 
     818            <select id="loop_pagination" name="loop[pagination]"> 
     819                <option<?php selected( $pagination, 'previous_next' ); ?> value="previous_next"><?php _e( 'previous and next links only' ); ?></option> 
     820                <option<?php selected( $pagination, 'numeric' ); ?> value="numeric"><?php _e( 'numeric' ); ?></option> 
     821                <option<?php selected( $pagination, 'none' ); ?> value="none"><?php _e( 'none' ); ?></option> 
     822            </select> 
     823        </td> 
     824    </tr> 
     825    <?php $maybe_hide = 'none' == $pagination ? '' : ' hide-if-js'; ?> 
     826    <tr valign="top" class="tl_offset<?php echo $maybe_hide; ?>"> 
     827        <th scope="row"><label for="loop_offset"><?php _e( 'Offset' ); ?></label></th> 
     828        <td> 
     829            <input type="text" id="loop_offset" name="loop[offset]" value="<?php echo esc_attr( $offset ); ?>" class="small-text" /> 
     830            <span class="description"><?php _e( 'Number of items to displace or pass over' ); ?></span> 
     831        </td> 
     832    </tr> 
     833    <?php $maybe_hide = 'none' == $pagination ? '' : ' hide-if-js'; ?> 
     834    <tr valign="top" class="tl_paged<?php echo $maybe_hide; ?>"> 
     835        <th scope="row"><label for="loop_paged"><?php _e( 'Page' ); ?></label></th> 
     836        <td> 
     837            <input type="text" id="loop_paged" name="loop[paged]" value="<?php echo esc_attr( $paged ); ?>" class="small-text" /> 
     838            <span class="description"><?php _e( 'Show the items that would normally show up just on this page number when using a pagination' ); ?></span> 
     839        </td> 
     840    </tr> 
     841</table> 
     842<?php 
     843    } 
     844 
     845    /** 
     846     * Display metabox for setting a users loop other parameters 
     847     * 
     848     * @package The_Loops 
     849     * @since 0.4 
     850     */ 
     851    public static function meta_box_users_other() { 
     852        global $post_ID; 
     853 
     854        $content = tl_get_loop_parameters( $post_ID ); 
     855 
     856        $defaults = array( 
     857            'exact'         => 1, 
     858            'exclude_users' => 0, 
     859            'users'         => '', 
     860            'search'        => '', 
     861            'sentence'      => 0, 
     862        ); 
     863        $content = wp_parse_args( $content, $defaults ); 
     864        extract( $content ); 
     865?> 
     866<table class="form-table"> 
     867    <tr valign="top"> 
     868        <th scope="row"><label for="loop_users"><?php _e( 'Users' ); ?></label></th> 
     869        <td> 
     870            <input type="text" id="loop_users" name="loop[users]" value="<?php echo esc_attr( $users ); ?>" class="regular-text" /> 
     871            <span class="description"><?php _e( "Comma-separated list of user ids to retrieve." ); ?></span> 
     872        </td> 
     873    </tr> 
     874    <tr valign="top" class="tl_exclude_users"> 
     875        <th scope="row"><label for="loop_exclude_users"><?php _e( 'Exclude users' ); ?></label></th> 
     876        <td> 
     877            <input<?php checked( $exclude_users, 1 ); ?> id="loop_exclude_users" name="loop[exclude_users]" value="1" type="checkbox" /> 
     878            <span class="description"><?php _e( 'Exclude the user ids defined above instead of including them' ); ?></span> 
     879        </td> 
     880    </tr> 
     881    <tr valign="top"> 
     882        <th scope="row"><label for="loop_search"><?php _e( 'Search term' ); ?></label></th> 
     883        <td> 
     884            <input type="text" id="loop_search" name="loop[search]" value="<?php echo esc_attr( $search ); ?>" class="regular-text" /> 
     885            <span class="description"><?php _e( 'Display only the users that match the ID, username, email, website, or nicename set here.' ); ?></span> 
     886            <br /><span class="description"><?php _e( 'You can include * (wildcards) before and/or after the search term.' ); ?></span> 
     887        </td> 
     888    </tr> 
     889</table> 
     890<?php 
     891    } 
     892 
    678893} 
    679894endif; 
  • the-loops/trunk/tl-template-tags.php

    r506227 r509712  
    3030 */ 
    3131function tl_pagination( $the_loop_id = 0, $echo = true ) { 
    32     global $wp_query; 
     32    global $wp_query, $tl_user_query; 
    3333 
    3434    if ( empty( $the_loop_id ) ) 
     
    3838 
    3939    $content = tl_get_loop_parameters( $the_loop_id ); 
     40    $type    = tl_get_loop_object_type( $the_loop_id ); 
    4041 
    41     if ( 'widget' != tl_get_loop_context() && ! empty( $content['pagination'] ) ) { 
     42    if ( ! tl_in_widget() && ! empty( $content['pagination'] ) ) { 
     43        $paged = max( 1, get_query_var('paged') ); 
     44 
     45        if ( 'users' == $type ) 
     46            $total = ceil( $tl_user_query->get_total() / $content['number'] ); 
     47        else 
     48            $total = $wp_query->max_num_pages; 
     49 
    4250        switch ( $content['pagination'] ) { 
    4351            case 'numeric' : 
     
    4553                    'base'    => str_replace( 999999999, '%#%', get_pagenum_link( 999999999 ) ), 
    4654                    'format'  => '?paged=%#%', 
    47                     'current' => max( 1, get_query_var('paged') ), 
    48                     'total'   => $wp_query->max_num_pages 
     55                    'current' => $paged, 
     56                    'total'   => $total 
    4957                ) ); 
    5058                break; 
    5159 
    5260            case 'previous_next' : 
    53                 $pagination = get_posts_nav_link(); 
     61                if ( 'users' == $type ) { 
     62                    $links = array(); 
     63                    if ( 1 < $total ) { 
     64                        if ( 1 < $paged ) { 
     65                            $link = get_pagenum_link( $paged - 1 ); 
     66                            $links[] = '<a class="prev" href="' . esc_url( $link ) . '">' . __( '&laquo; Previous Page' ) . '</a>'; 
     67                        } 
     68 
     69                        if ( $paged < $total ) { 
     70                            $link = get_pagenum_link( $paged + 1 ); 
     71                            $links[] = '<a class="next" href="' . esc_url( $link ) . '">' . __( 'Next Page &raquo;' ) . '</a>'; 
     72                        } 
     73 
     74                        $pagination = implode( ' &#8212; ', $links ); 
     75                    } 
     76                } else { 
     77                    $pagination = get_posts_nav_link(); 
     78                } 
    5479                break; 
    5580 
     
    6691 
    6792/** 
    68  * Return loop context. 'widget' or 'shortcode' 
    69  * 
    70  * @package The_Loops 
    71  * @since 0.3 
    72  */ 
    73 function tl_get_loop_context() { 
    74     global $the_loop_context; 
    75     return $the_loop_context; 
    76 } 
    77  
    78 /** 
    7993 * Check if current loop is in a widget 
    8094 * 
     
    87101} 
    88102 
     103/** 
     104 * Whether there are more users available in the loop. 
     105 * 
     106 * @package The_Loops 
     107 * @since 0.4 
     108 * 
     109 * @return bool True if users are available, false if end of loop. 
     110 */ 
     111function tl_have_users() { 
     112    global $tl_user_query, $tl_index, $tl_count; 
     113 
     114    if ( null === $tl_index ) { 
     115        $tl_index               = -1; 
     116        $tl_user_query->results = array_values( $tl_user_query->results ); 
     117        $tl_count               = count( $tl_user_query->results ); 
     118    } 
     119 
     120    if ( $tl_index + 1 < $tl_count ) 
     121        return true; 
     122    elseif ( $tl_index + 1 == $tl_count && $tl_count > 0 ) 
     123        tl_rewind_users(); 
     124 
     125    return false; 
     126} 
     127 
     128/** 
     129 * Reset user index. 
     130 * 
     131 * 
     132 * @package The_Loops 
     133 * @since 0.4 
     134 */ 
     135function tl_rewind_users() { 
     136    global $tl_user_query, $tl_index, $tl_count; 
     137 
     138    unset( $tl_index, $tl_count ); 
     139} 
     140 
     141/** 
     142 * Sets up the current user. 
     143 * 
     144 * Retrieves the next user, sets up the user 
     145 * 
     146 * @package The_Loops 
     147 * @since 0.4 
     148 */ 
     149function tl_the_user() { 
     150    $user = tl_next_user(); 
     151    wp_set_current_user( $user->ID ); 
     152} 
     153 
     154/** 
     155 * Set up the next user and iterate current user index. 
     156 * 
     157 * @package The_Loops 
     158 * @since 0.4 
     159 * 
     160 * @return object Next user. 
     161 */ 
     162function tl_next_user() { 
     163    global $tl_user_query, $tl_index; 
     164 
     165    $tl_index++; 
     166 
     167    return $tl_user_query->results[$tl_index]; 
     168} 
     169 
Note: See TracChangeset for help on using the changeset viewer.