编写检测事件的函数

时间:2019-06-14 作者:Sam

我正在使用The Events Calendar 处理我正在创建的站点上的事件。

如果用户位于事件页面(归档、单张等),我希望启用include。我的include有一些自定义挂钩,用于处理入队、出队和插入自定义HTML。

以下是我测试的内容:

/**
 * 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\' );

}
如果用户正在存档(日历)或单个事件中,此功能可以完美地工作,并将文本添加到页面顶部。

根据我的测试,我写了以下内容:

/**
 * 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\' );

}
我不认为wp_head 是这里合适的钩子,因为我想用一些自定义PHP加载一个include。我是否应该为这种功能使用挂钩?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

我的include有一些自定义挂钩,用于处理入队、出队和插入自定义HTML。

我仍然不能百分之百确定你的意思,但如果这段代码是普通的WordPress代码,它的函数和add_action(), 您只希望这些挂钩在这些事件页面上运行,那么正确的方法是将该文件包含到主题的函数文件或插件的主插件文件中,然后在这些挂钩中使用您的条件。

因此,在函数文件中,只需包含其他文件(我使用了get_theme_file_path() 而不是get_template_directory(), 目前首选哪种方法):

require get_theme_file_path( \'inc/tribe-events.php\' );
然后在该文件中,您将有如下挂钩:

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\' );
或者,为了减少代码量,您可以定义自己可以重用的条件函数:

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\' );

相关推荐

static array on functions.php

在函数中。php中,我想访问数据库一次,以获取一个ACF对象,然后在本地“保存”它,以防止对数据库的进一步请求。我想首先在“init”钩子中调用以下函数。然后,假设,当我在以后的挂钩上调用它时,由于使用了“static”关键字,$current\\u store var已经设置好了,函数将在第一个“if”返回已经保存的静态var时停止。它不起作用-当访问稍后挂钩上的函数时,“isset($current\\u store)”返回false。我做错了什么?function get_current_store