开发Wordpress-Plugin:将.js加载到head和HTML-Snippet作为短代码的问题

时间:2016-06-07 14:43:37

标签: php jquery ajax wordpress shortcode

我被要求为我目前参与的项目开发一个Wordpress插件,因为我通常做图形和用户体验设计(CSS3)。虽然我对PHP有很多了解,但我并不熟悉为WP开发插件。我有以下代码:

<?php
/**
* Plugin Name: ExpButton Wordpress Plugin
* Plugin URI: https://url.de
* Description: Ein Generator des Expbuttons
* Version: 0.1
* Author: Wilko Meyer
* Author URI: http://url.com
**/

/**
* Loading js into header
**/

function add_async($url)
{
    if (strpos($url, '#asyncload')===false)
        return $url;
    else if (is_admin())
        return str_replace('#asyncload', '', $url);
    else
        return str_replace('#asyncload', '', $url)."' async='async";
}
add_filter('clean_url', 'add_async', 11, 1);


function expertbuttonjs()
{
    // Loading the JS
    wp_register_script( 'custom-script', plugins_url( 'https://www.expert-button.de/js.js#asyncload', __FILE__ ), array( 'jquery', 'jquery-ui-core' ), '20120208', true );
    wp_enqueue_script( 'custom-script' );
}
add_action( 'wp_enqueue_scripts', 'wptuts_scripts_with_the_lot' );

/**
*Creating Shortcode
**/

add_shortcode( 'shortcode', 'expbutton' );

function expbutton( $atts ) {

        /* Turn on buffering */
        ob_start(); ?>

        <div style="overflow:hidden;font-size:9px;height:auto;width:auto;text-align:center;margin:auto;" id="expertbuttonbg"><a target="_bl$

        <?php
    /* Get the buffered content into a var */
        $sc = ob_get_contents();

/**
*Expbutton to Shortcode
**/

add_shortcode( 'shortcode', 'expertbutton' );

function expertbutton( $atts ) {

        ob_start(); ?>

        <div style="overflow:hidden;font-size:9px;height:auto;width:auto;text-align:center;margin:auto;" id="expertbuttonbg"><a target="_bl$

        <?php

        $sc = ob_get_contents();

        ob_end_clean();

        /* Return the content as usual */
        return $sc;

}
?>

此插件的目的是将js.js async加载到页面中,并从/* Turn on buffering */部分下方的HTML代码创建一个短代码,该代码可以在wordpress网站上使用。

目前代码没有将js加载到标题中,应该创建的短代码也不起作用,我也不知道为什么。希望有人可以帮我解决这个问题。有一些线索。

为什么插件不起作用?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我做了一些重要的改变。你的按钮的HTML代码是不完整的(所以我试着猜)。你的javascript文件的名字在我看来非常奇怪和不寻常......

<?php
/**
* Plugin Name: ExpButton Wordpress Plugin
* Plugin URI: https://url.de
* Description: Ein Generator des Expbuttons
* Version: 0.1
* Author: Wilko Meyer
* Author URI: http://url.com
**/

/**
* Loading js into header
**/

function add_async($url)
{
    if ( strpos($url, '#asyncload') === false )
        return $url;
    else if ( is_admin() )
        return str_replace('#asyncload', '', $url);
    else
        return str_replace('#asyncload', '', $url)."' async='async";
}
add_filter('clean_url', 'add_async', 11, 1);

wp_register_script()函数中的网址存在问题,我已更正并在add_action()中:您的javascript文件必须位于插件根文件夹中(我的意思是不在子文件夹中) 。另外你的JS文件名在我看来非常奇怪(通常它的文件以 .js 扩展名完成,而不是.js#asyncload

function expertbuttonjs()
{
    // Loading the JS 
    wp_register_script( 'custom-script', plugins_url('/js.js#asyncload', __FILE__ ), array( 'jquery', 'jquery-ui-core' ), '20120208', true );
    wp_enqueue_script( 'custom-script' );
}
add_action( 'wp_enqueue_scripts', 'expertbuttonjs' );

不要使用shortcode名称作为短代码功能。您的按钮代码在代码中不完整。此外,对于短代码或函数,您也不能使用相同名称的两倍:

/*
 * expbutton Shortcodes
 */

add_shortcode( 'expbutton', 'expbutton' );
function expbutton( $atts ) {

        /* Turn on buffering */
        ob_start(); ?>

        <div style="overflow:hidden;font-size:9px;height:auto;width:auto;text-align:center;margin:auto;" id="expertbuttonbg"><a target="_blank" href="'.$sc.'">Text Button</a><div>

        <?php
    /* Get the buffered content into a var */
        $sc = ob_get_contents();

/*
 *  expertbutton Shortcode
 */

add_shortcode( 'expertbutton', 'expertbutton' );
function expertbutton( $atts ) {

        ob_start(); ?>

        <div style="overflow:hidden;font-size:9px;height:auto;width:auto;text-align:center;margin:auto;" id="expertbuttonbg"><a target="_blank" href="'.$sc.'">Text Button</a><div>

        <?php

        $sc = ob_get_contents();

        ob_end_clean();

        /* Return the content as usual */
        return $sc;

}
?>

现在应该可以了。