在特定页面和子页面上启用插件

时间:2018-09-28 作者:puk789

为了提高加载速度,我只想在实际使用的页面上启用事件管理器插件。为此,我编写了以下代码:

// deregister unnecessary plugin scripts:
function my_deregister() {
    if ( !is_page(\'events\') ) { 
        wp_deregister_script( \'events-manager\' ); 
    }
}

add_action( \'wp_print_scripts\', \'my_deregister\', 100 );
然而,问题是这个事件插件为每个事件创建一个页面,并且需要在这些子页面上启用它。显然,每个生成的页面都有不同的名称。例如,www.mysite.com/events/EventNameEventDate.

因此,我希望在所有页面上禁用插件,但“事件”及其子页面除外(显然,我并不总是知道其中的计数和名称)。这个is_page() 对于事件页面来说效果很好,但是我如何修改它,以便它识别其子页面并在其上启用插件脚本呢?

这只是一个特定于插件的示例,便于理解问题,但问题是通用的,与插件无关的

2 个回复
SO网友:Pratik Patel

您可以获取父页面slug并进行如下检查

global $post;
$post_data = get_post($post->post_parent);
$parent_slug = $post_data->post_name;
//echo $parent_slug;
if ( !is_page(\'events\') || $parent_slug != \'events\') {
如果有任何疑问,请尝试让我知道

SO网友:Jory Hogeveen

正如普拉蒂克·帕特尔在一篇评论中所说的那样。您可以使用is_singular( \'custom_post_type_name\' ) 在CPT页面上进行筛选。

由于您使用的是事件管理器,请从其插件中查看此文件:
https://plugins.trac.wordpress.org/browser/events-manager/trunk/em-posts.php
在第3行,您可以看到他们将CPT名称定义为event.<因此,在您的情况下,您可以使用is_singular(\'event\')

// deregister unnecessary plugin scripts:
function my_deregister() {
    if ( ! is_page(\'events\') && ! is_singular(\'event\') ) { 
        wp_deregister_script( \'events-manager\' ); 
    }
}

add_action( \'wp_print_scripts\', \'my_deregister\', 100 );

结束