php – wordpress:仅在出现短码时才加载javascript

前端之家收集整理的这篇文章主要介绍了php – wordpress:仅在出现短码时才加载javascript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个有趣的难题.我需要加载大约8个 JavaScript文件和相同数量的样式为我的插件.这些只有在我的短代码运行的地方才需要.

我尝试使用print_styles和print_scripts加载它们,但是它们没有正确渲染,加上这样做会打破xhtml验证.所以目前他们在每个页面都加载,而且由于需要的文件数量,不可能像这样.

在另一个项目中,我将一个函数写入我的插件的index.PHP文件,该文件将占用当前页面,搜索它的短代码,如果只找到它,那么它将打印脚本,但这是一个丑陋的黑客.

有谁有任何建议或解决方案?
任何帮助将不胜感激,
问候,
Daithi

使用短码动态地加载每个页面的脚本和样式

优点

>每次调用代码时都不会搜索所有的帖子.
>只有当网页上有短码时,才能动态添加样式和脚本.
>不使用正则表达式,因为它们往往比strstr()或strpos()慢.如果你需要提取参数,那么你应该使用上面提到的shortcode正则表达式.
>减少文件调用

代码说明

>仅当post不是修订版并与指定的post_type匹配时,才能使用save_post钩子查找页面上的短码.
>使用add_option()将发现的ids作为数组保存,其中autoload设置为yes,除非条目已经存在.然后它将使用update_option().
>使用hook wp_enqueue_scripts来调用我们的add_scripts_and_styles()函数.
>那个函数然后调用get_option()来检索我们的页面ID数组.如果当前$page_id在$option_id_array中,那么它会添加脚本和样式.

请注意:我转换了OOP Namespaced类的代码,所以我可能错过了一些.如果我这样做,请在评论中告诉我

代码示例:查找短代码发生

function find_shortcode_occurences($shortcode,$post_type = 'page')
{
    $found_ids = array();
    $args         = array(
        'post_type'   => $post_type,'post_status' => 'publish','posts_per_page' => -1,);
    $query_result = new WP_Query($args);
    foreach ($query_result->posts as $post) {
        if (false !== strpos($post->post_content,$shortcode)) {
            $found_ids[] = $post->ID;
        }
    }
    return $found_ids;
}

function save_option_shortcode_post_id_array( $post_id ) 
{
    if ( wp_is_post_revision( $post_id ) OR 'page' != get_post_type( $post_id )) {
        return;
    }
    $option_name = 'yourprefix-yourshortcode';
    $id_array = find_shortcode_occurences($option_name);
    $autoload = 'yes';
    if (false == add_option($option_name,$id_array,'',$autoload)) update_option($option_name,$id_array);
}

add_action('save_post','save_option_shortcode_id_array' );

代码示例:短代码动态包含脚本和样式

function yourshortcode_add_scripts_and_styles() {
    $page_id = get_the_ID();
    $option_id_array = get_option('yourprefix-yourshortcode');
    if (in_array($page_id,$option_id_array)) {
        wp_enqueue_script( $handle,$src,$deps,$ver,$footer = true );
        wp_enqueue_style( $handle,$deps);
    }
}

add_action('wp_enqueue_scripts','yourshortcode_add_scripts_and_styles');

猜你在找的PHP相关文章