如何只在特定页面上包含代码?

时间:2012-01-08 作者:Laxmidi

我正在学习插件和短代码。我注意到,当我激活插件时,它的代码会加载到我的所有页面上,甚至是没有我的短代码的页面。(我不是指内容与管理页面)。在某些内容页上,我使用特定的短代码,而在其他内容页上,我不使用短代码,但在任何情况下,都会加载插件的代码。如何使插件仅包含在使用快捷码的页面上?

更多详细信息:

比如说,我有一个制作灯箱的插件。我激活插件。在我的“酷图像”页面上,我使用短代码制作灯箱。当我在我的“关于”页面上检查查看源代码时,它没有使用lightbox短代码,我看到lightbox插件的代码已经加载。如果我编写插件,使其代码只加载到需要的页面上,那么我的页面加载速度会更快。这可能吗?否则,我会将大量插件的代码不必要地加载到页面上。有什么想法吗?

6 个回复
SO网友:Dave Romsey

WP v3。3使我们能够在页面中间运行wp\\u enqueue\\u脚本。Ticket 9346

这使得包含粒度更好的JS变得更加容易(至少在使用短代码时)。这里,jquery将仅在触发我们的短代码时包含。

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( \'jquery\', array(), null, true  ); 

  return;
}
add_shortcode( \'cool_slideshow\', \'get_slideshow\' );

SO网友:kaiser

检查管理UI变量

一个菜单项是特例:注释,因为它们是使用add_WHATEVER_(submenu)page() API。

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( \'THE-OUTPUT.php\' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff
这些是不一致的,并硬编码到wp核心中。请注意,并非所有页面都设置了所有

钩住特定于页面的管理UI钩子,然后还有一些特殊的特定于页面的钩子,您可以在中查看admin-footer.phpadmin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"
现实世界中的一些示例:Post Screen

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php
然后还有$hook_suffix 您可以在挂接操作时检查排队脚本:

do_action( \'admin_enqueue_scripts\', $hook_suffix );
更新为了更容易(单击一次)访问这些数据/信息,我们构建了一个免费的、开发人员友好的插件,名为"(WCM) Current Admin Info", 在上提供GitHub. 该插件在不久的将来也可以在official wp.org repository.

屏幕截图预览此插件的功能:

Screen

Hooks

Globals

SO网友:Noel Tock

可以执行以下操作(在header.php中):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , \'[your-shortcode\') ) { function_for_scripts(); } 
        }   
?>
检查当前加载是page还是post,然后获取内容并搜索您的短代码。一旦找到它,它就会执行您的函数。

SO网友:matchdav

最简单的方法就是检查短代码。

function your_scripts()
{ 
    global $post;
    wp_register_script(\'your-script\',$the_path_to_your_script,\'0.1\',true);
    if ( strstr( $post->post_content, \'[your-shortcode\' ) ) 
    {
        wp_enqueue_script(\'your-script\');
    }
}
add_action( \'wp_enqueue_scripts\', \'your_scripts\');

SO网友:Nicolai Grossherr

@kaiser注意到get_shortcode_regex() 在这篇文章中,有好几次我只是想给出一个如何使用它的例子。代码基本上取自get_shortcode_regex() WordPress代码参考页。

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( \'your-script\', $the_path_to_your_script, \'1.0\', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( \'/\'. $pattern .\'/s\', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( \'your-shortcode\', $matches[2] )
    ) {
        wp_enqueue_script(\'your-script\');
    }
}
add_action( \'wp_enqueue_scripts\', \'enqueue_script_if_shortcode_is_detected\' );

SO网友:Laxmidi

I found this solution:

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

function my_deregister_javascript() {
    wp_deregister_script( \'my_scripts_handle\' );
}
结束

相关推荐

Shortcodes not working

我有WordPress 3.2.1 我已经创建了一个个人短代码,在我更改Permalink Settings 从…起Default 到Custom Structure.短代码会永久停止工作,而我会返回到Default 背景你好,我今年[生日=“1975-03-25”]岁。我添加了add_shortcode 在我的主题中的函数functions.php.如果我添加新shortcode 到原始WordPress主题Twenty Eleven 在functions.php 文件,工作正常!我的职能。php文件: