Making WordPress.org


Ignore:
Timestamp:
11/01/2016 08:58:38 PM (7 years ago)
Author:
iandunn
Message:

CampTix Badge Generator: Acesss post meta through WP_Post's magic getter

This is much cleaner and more readable than manually calling get_post_meta().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/camptix-badge-generator/includes/html-badges.php

    r3015 r4315  
    1212add_action( 'wp_enqueue_scripts',    __NAMESPACE__ . '\enqueue_previewer_scripts',   999 );  // after remove_all_previewer_styles()
    1313add_filter( 'template_include',      __NAMESPACE__ . '\use_badges_template'              );
     14add_filter( 'get_post_metadata',     __NAMESPACE__ . '\add_dynamic_post_meta', 10, 3     );
    1415
    1516/**
     
    176177 */
    177178function is_badges_preview() {
     179    /** @global \WP_Customize_Manager $wp_customize */
    178180    global $wp_customize;
    179181
     
    204206 */
    205207function render_badges_template() {
    206     /** @var $camptix \CampTix_Plugin */
     208    /** @global \CampTix_Plugin $camptix */
    207209    global $camptix;
    208    
     210
    209211    $allowed_html = array(
    210212        'span' => array(
     
    212214        ),
    213215    );
    214    
     216
    215217    $attendees = get_posts( array(
    216218        'post_type'      => 'tix_attendee',
     
    223225
    224226/**
    225  * Get all the data required to render an attendee badge
     227 * Add dynamically-generated "post meta" to `\WP_Post` objects
     228 *
     229 * This makes it possible to access dynamic data related to a post object by simply referencing `$post->foo`.
     230 * That keeps the calling code much cleaner than if it were to have to do something like
     231 * `$foo = some_custom_logic( get_post_meta( $post->ID, 'bar', true ) ); echo esc_html( $foo )`.
     232 *
     233 * @param mixed  $value
     234 * @param int    $post_id
     235 * @param string $meta_key
     236 *
     237 * @return mixed
     238 *      `null` to instruct `get_metadata()` to pull the value from the database
     239 *      Any non-null value will be returned as if it were pulled from the database
     240 */
     241function add_dynamic_post_meta( $value, $post_id, $meta_key ) {
     242    /** @global \CampTix_Plugin $camptix */
     243    global $camptix;
     244
     245    $attendee = get_post( $post_id );
     246
     247    if ( 'tix_attendee' != $attendee->post_type ) {
     248        return $value;
     249    }
     250
     251    switch ( $meta_key ) {
     252        case 'avatar_url':
     253            $value = get_avatar_url( $attendee->tix_email, array( 'size' => 600 ) );
     254            break;
     255
     256        case 'css_classes':
     257            $value = get_css_classes( $attendee );
     258            break;
     259
     260        case 'formatted_name':
     261            $value = $camptix->format_name_string(
     262                '<span class="first-name">%first%</span>
     263                 <span class="last-name">%last%</span>',
     264                $attendee->tix_first_name,
     265                $attendee->tix_last_name
     266            );
     267            break;
     268    }
     269
     270    return $value;
     271}
     272
     273/**
     274 * Get the CSS classes for an attendee element
    226275 *
    227276 * @param \WP_Post $attendee
    228277 *
    229  * @return array
    230  */
    231 function get_attendee_data( $attendee ) {
    232     /** @var $camptix \CampTix_Plugin */
    233     global $camptix;
    234     $css_classes = array( 'attendee-' . $attendee->post_name );
    235 
    236     $first_name     = get_post_meta( $attendee->ID, 'tix_first_name', true );
    237     $last_name      = get_post_meta( $attendee->ID, 'tix_last_name',  true );
    238     $formatted_name = $camptix->format_name_string(
    239         '<span class="first-name">%first%</span>
    240          <span class="last-name">%last%</span>',
    241         $first_name,
    242         $last_name
    243     );
    244 
    245     $email_address = get_post_meta( $attendee->ID, 'tix_email', true );
    246     $avatar_url    = get_avatar_url( $email_address, array( 'size' => 600 ) );
    247 
    248     $ticket        = get_post( get_post_meta( $attendee->ID, 'tix_ticket_id', true ) );
    249     $css_classes[] = 'ticket-' . $ticket->post_name;
    250 
    251     $coupon_id = get_post_meta( $attendee->ID, 'tix_coupon_id', true );
    252     if ( $coupon_id ) {
    253         $coupon        = get_post( $coupon_id );
    254         $css_classes[] = 'coupon-' . $coupon->post_name;
    255     }
    256 
    257     $css_classes = implode( ' ', $css_classes );
    258 
    259     return compact( 'formatted_name', 'email_address', 'avatar_url', 'css_classes' );
     278 * @return string
     279 */
     280function get_css_classes( $attendee ) {
     281    // Name
     282    $classes = array( 'attendee-' . $attendee->post_name );
     283
     284    // Ticket
     285    $ticket    = get_post( $attendee->tix_ticket_id );
     286    $classes[] = 'ticket-' . $ticket->post_name;
     287
     288    // Coupon
     289    if ( $attendee->tix_coupon_id ) {
     290        $coupon    = get_post( $attendee->tix_coupon_id );
     291        $classes[] = 'coupon-' . $coupon->post_name;
     292    }
     293
     294    return implode( ' ', $classes );
    260295}
    261296
Note: See TracChangeset for help on using the changeset viewer.