Custom Query for Featured Events

Developers can make custom queries to the MusicIDB Calendar.

First check to see if you are connect to the MusicIDB API

<?php

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

use MusicIDB\Client\Api_Exception;
use MusicIDB\Client\MusicIDB_API;

$settings = get_option('musicidb_options');
$connected = !empty( $settings['musicidb_api_connected'] ) ? $settings['musicidb_api_connected'] : 0;

if ($connected) {

}

 

This next block of code gets the instance of the MusicIDB plugin, sends $args through the MusicIDB_API event filter_query and catches any API errors.

The venue key takes an array of strings as the venue ID.

$musicidb_plugin = MusicIDBIntegration::get_instance();

try {

    $args = array(
        'is_published' => true,
        'limit' => $limit,
        'is_delete' => false,
        'is_featured' => true,
        'venues' => $venue_ids,
        'start_date_after' => current_time( 'Y-m-d' ),
        'order_direction' => 'ASC'
    );

    $response = MusicIDB_API::request( 'event', 'filter_query', $args );

    $events = array();
    if( 200 === $response->get_status() ) { 
        $events = $response->get_events();
    }

} catch( Api_Exception $e ) {

    error_log( $e->getMessage() ); ?>

    <li>
        <p>Sorry we're having trouble loading the events right now...
            <?php if( defined( 'WP_DEBUG' ) && WP_DEBUG ): ?><br />Encountered an error: <?php esc_html_e( $e->getMessage() ); ?><?php endif; ?>
        </p>
    </li>

<?php
}

 

This block of code checks to see if the number of events returned is less than the limit set, and if so grabs the next non-featured events while avoiding duplicates. This is optional and can be added to the Try statement from above

if( count($events) < $limit ) {

    // Handle remainder when there aren't enough
    // featured events. This uses filter_query 
    // to avoid dupes
    $remainder = $limit - count($events);

    $args = array(
        'is_published' => true,
        'limit' => $remainder,
        'is_delete' => false,
        'is_featured' => false,
        'venues' => $venue_ids,
        'start_date_after' => current_time( 'Y-m-d' ),
        'order_direction' => 'ASC'
    );

    $upcoming_response = MusicIDB_API::request( 'event', 'filter_query', $args );

    if( 404 === $upcoming_response->get_status() ) { 
        $upcoming = array();
    } else {
        $upcoming = $upcoming_response->get_events();
    }

    $events = array_merge( $events, $upcoming );

}

 

If no events are found display the no events message, else use a foreach loop to iterate through each event

if( empty($events) ){ ?>
    <p><?php echo $settings['musicidb_no_event_msg']; ?></p>
<?php } else {
    foreach( $events as $event ){

    }
}

 
Here are some examples of the functions available to get information about the event

get_subtitle();
get_thumbnail();
get_poster();
get_ticket_link();
get_ticket_price();
get_door_cover();
get_more_info();
get_age_restriction();
get_date();
get_is_featured();
get_name();
get_venue();

 
Here is an example of how to retrieve the event venue information

foreach( $events as $event ){
    $venue = $event->get_venue();
    $venue_address = $venue->get_address();
    $venue_street = $venue_address->get_address();
    $venue_city = $venue_address->get_city();
    $venue_state = $venue_address->get_state();
}