Skip to content

Instantly share code, notes, and snippets.

@panoslyrakis
Created July 25, 2017 11:48
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 panoslyrakis/3ba657a9c1ff1789caf4c57d2a8f6a5c to your computer and use it in GitHub Desktop.
Save panoslyrakis/3ba657a9c1ff1789caf4c57d2a8f6a5c to your computer and use it in GitHub Desktop.
Add PostalAddress metabox to events. Can be used in events schema
<?php
/*
Plugin Name: WPMUDEV - Events PostalAddress
Plugin URI: https://premium.wpmudev.org/
Description: Add PostalAddress metabox to events
Author: Panos Lyrakis @ WPMUDEV
Author URI: https://premium.wpmudev.org/
License: GPLv2 or later
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'WPMUDEV_Events_PostalAddress' ) ) {
class WPMUDEV_Events_PostalAddress {
private static $_instance = null;
public static function get_instance() {
if( is_null( self::$_instance ) ){
self::$_instance = new WPMUDEV_Events_PostalAddress();
}
return self::$_instance;
}
public function __construct() {
add_action( 'add_meta_boxes_incsub_event', array( $this, 'add_address_meta_box' ), 10 );
add_action( 'save_post', array( $this, 'save_address_meta' ), 10, 2 );
}
public function add_address_meta_box( $post ){
add_meta_box(
'wpmudev-PostalAddress_metabox',
__( 'Event Address' ),
array( $this, 'event_address_metabox' ),
$post->post_type,
'side',
'core'
);
}
public function event_address_metabox( $post ){
$address_data = get_post_meta( $post->ID, 'incsub_event_address', true );
$street_address = isset( $address_data[ 'streetAddress' ] ) ? $address_data[ 'streetAddress' ] : '';
$address_locality = isset( $address_data[ 'addressLocality' ] ) ? $address_data[ 'addressLocality' ] : '';
$address_region = isset( $address_data[ 'addressRegion' ] ) ? $address_data[ 'addressRegion' ] : '';
$postal_code = isset( $address_data[ 'postalCode' ] ) ? $address_data[ 'postalCode' ] : '';
$content = '';
$content .= '<div class="eab_meta_box">';
$content .= '<input type="hidden" name="incsub_event_address_meta" value="1" />';
$content .= '<div class="misc-eab-section" >';
$content .= '<div class="eab_meta_column_box top"><label for="incsub_event_address" id="incsub_event_address_label">'.__('Event address').'</label></div>';
$content .= '<div class="misc-eab-section eab-address-section">';
$content .= '<div class="misc-eab-subsection eab-address-subsection">';
$content .= '<label>' . __('Street address') . '</label> ';
$content .= '<input type="text" name="incsub_event_address[streetAddress]" value="' . $street_address . '" />';
$content .= '</div>';
$content .= '<div class="misc-eab-subsection eab-address-subsection"> ';
$content .= '<label>' . __('Locality') . '</label>';
$content .= '<input type="text" name="incsub_event_address[addressLocality]" value="' . $address_locality . '" />';
$content .= '</div>';
$content .= '<div class="misc-eab-subsection eab-address-subsection"> ';
$content .= '<label>' . __('Region') . '</label>';
$content .= '<input type="text" name="incsub_event_address[addressRegion]" value="' . $address_region . '" />';
$content .= '</div>';
$content .= '<div class="misc-eab-subsection eab-address-subsection"> ';
$content .= '<label>' . __('ZIP Code') . '</label>';
$content .= '<input type="text" name="incsub_event_address[postalCode]" value="' . $postal_code . '" />';
$content .= '</div>';
$content .= '</div>';
$content .= '</div>';
$content .= '</div>';
echo $content;
}
public function save_address_meta( $post_id, $post ){
if( !isset( $_POST['incsub_event_address'] ) || !current_user_can( 'edit_post', $post_id ) || $post->post_type != 'incsub_event' ){
return;
}
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ){
return $post_id;
}
update_post_meta($post_id, 'incsub_event_address', array_map('strip_tags', $_POST['incsub_event_address']) );
}
}
add_action( 'plugins_loaded', function(){
$GLOBALS['WPMUDEV_Events_PostalAddress'] = WPMUDEV_Events_PostalAddress::get_instance();
}, 10 );
}
@panoslyrakis
Copy link
Author

Unfortunately currently there is no filter to edit the schema of the event. In order to add the PostalAddress markup in the event you should edit file:
events-and-bookings/lib/class_eab_template.php

and change method get_event_details() to

`public static function get_event_details ($post) {
$content = '';
$data = Eab_Options::get_instance();
$event = ($post instanceof Eab_EventModel) ? $post : new Eab_EventModel($post);

	$content .= '<div class="wpmudevevents-date">' . self::get_event_dates($event) . '</div>';
    
	if ($event->has_venue()) {
		$venue = $event->get_venue_location(Eab_EventModel::VENUE_AS_ADDRESS);
		$address = '';
        
		$content .= "<div class='wpmudevevents-location' itemprop='location' itemscope itemtype='http://schema.org/Place'>
                        <span itemprop='name'>{$venue}</span>";
        
        
        $address_data = get_post_meta( $event->_event_id, 'incsub_event_address', true );

        if( isset( $address_data['streetAddress'] ) && $address_data['streetAddress'] != '' ){
            $address .= "<span itemprop='streetAddress'>{$address_data['streetAddress']}</span><br />";
        }

        if( isset( $address_data['addressLocality'] ) && $address_data['addressLocality'] != '' ){
            $address .= "<span itemprop='addressLocality'>{$address_data['addressLocality']}</span><br />";
        }

        if( isset( $address_data['addressRegion'] ) && $address_data['addressRegion'] != '' ){
            $address .= "<span itemprop='addressRegion'>{$address_data['addressRegion']}</span>, ";
        }

        if( isset( $address_data['postalCode'] ) && $address_data['postalCode'] != '' ){
            $address .= "<span itemprop='postalCode'>{$address_data['postalCode']}</span>";
        }

        $content .= "<div itemprop='address' itemscope itemtype='http://schema.org/PostalAddress'>{$address}</div>";
	}
    
	if ($event->is_premium()) {
		$price = $event->get_price();
		$currency = $data->get_option('currency');
		$amount = is_numeric($price) ? number_format($price, 2) : $price;
		$content .= apply_filters('eab-events-event_details-price', "<div class='wpmudevevents-price'>{$currency} {$amount}</div>", $event->get_id());
	}
	$data = apply_filters('eab-events-after_event_details', '', $event);
	if ($data) {
		$content .= '<div class="wpmudevevents-additional_details">' . $data . '</div>';
	}
	
	return $content;
}`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment