0

I'm using The Events Calendar to handle events on a site I'm building.

I'd like an include to fire if the user is on an events page (archives, single etc etc). My include has a handful of custom hooks which handle enqueuing, dequeuing and inserting custom HTML.

Here's what I've tested:

/**
 * Detect Tribe Events and add text to top of page
 */
if ( class_exists( 'Tribe__Events__Main' ) ) { // Only triggers if plugin is active

    function is_tribe_calendar() {

        if (tribe_is_event() || tribe_is_event_category() || tribe_is_in_main_loop() || tribe_is_view() || 'tribe_events' == get_post_type() || is_singular( 'tribe_events' ))
            echo '<p style="background: red; color: white; padding: 24px; margin: 0;">Tribe Events is active.</p>';
        }

    add_action( 'wp_head' , 'is_tribe_calendar' );

}

This function works perfectly and adds text to the top of the page if the user is on an archive (calendar) or single event.

Based on my test, I then wrote the following:

/**
 * Detect Trive Events and require include
 */
if ( class_exists( 'Tribe__Events__Main' ) ) { // Only triggers if plugin is active

    function is_tribe_calendar() {

        if (tribe_is_event() || tribe_is_event_category() || tribe_is_in_main_loop() || tribe_is_view() || 'tribe_events' == get_post_type() || is_singular( 'tribe_events' ))
            require get_template_directory() . '/inc/tribe-events.php';
        }

    add_action( 'wp_head' , 'is_tribe_calendar' );

}

I don't think the wp_head is the appropriate hook here as I'm wanting to load an include with some custom PHP. Should I even be using a hook for this type of functionality?

2
  • It depends on what exactly you're trying to do, which you haven't really described. What is the PHP include? What does it do? Commented Jun 14, 2019 at 17:09
  • I've updated my question :)
    – Sam
    Commented Jun 14, 2019 at 17:13

1 Answer 1

1

My include has a handful of custom hooks which handle enqueuing, dequeuing and inserting custom HTML.

I'm still not 100% certain what you mean, but if this code is normal WordPress code, with functions and add_action(), and you only want those hooks to run on these events pages, then the proper way to do this would be to include that file into your theme's functions file or plugin's main plugin file, and then use your condition inside those hooks.

So in your functions file, just include your other file (I've used get_theme_file_path() instead of get_template_directory(), which is the preferred method these days):

require get_theme_file_path( 'inc/tribe-events.php' );

Then inside that file you would have your hooks like this:

function my_hooked_function( $arg ) {
    if (
        tribe_is_event() || 
        tribe_is_event_category() || 
        tribe_is_in_main_loop() || 
        tribe_is_view() || 
        'tribe_events' == get_post_type() || 
        is_singular( 'tribe_events' )
    ) {
        // Do thing.
    }
}
add_action( 'hook_name', 'my_hooked_function' );

function my_second_hooked_function( $arg ) {
    if (
        tribe_is_event() || 
        tribe_is_event_category() || 
        tribe_is_in_main_loop() || 
        tribe_is_view() || 
        'tribe_events' == get_post_type() || 
        is_singular( 'tribe_events' )
    ) {
        // Do thing.
    }
}
add_action( 'another_hook_name', 'my_second_hooked_function' );

Or, to reduce the amount of code, you could define your own conditional function that you can re-use:

function is_tribe_calendar() {
    if (
        return tribe_is_event() || 
        tribe_is_event_category() || 
        tribe_is_in_main_loop() || 
        tribe_is_view() || 
        'tribe_events' == get_post_type() || 
        is_singular( 'tribe_events' )
    ) {
        return true;
    } else {
        return false;
    }
}

function my_hooked_function( $arg ) {
    if ( is_tribe_calendar() ) {
        // Do thing.
    }
}
add_action( 'hook_name', 'my_hooked_function' );

function my_second_hooked_function( $arg ) {
    if ( is_tribe_calendar() ) {
        // Do thing.
    }
}
add_action( 'another_hook_name', 'my_second_hooked_function' );
1
  • Yep, it's normal WP code. That answer makes perfect sense, thank you. You are a WP Jedi. This is like the 10th question you've helped me on, thank you.
    – Sam
    Commented Jun 14, 2019 at 17:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.