插件是一个小工具,但我想在头脑中调用它,可以吗?

时间:2011-10-01 作者:jkupczak

完全公开,PHP和Wordpress不是我的专长。

我在这里有一个插件->http://wordpress.org/extend/plugins/ustream-status/ 这将添加一个小部件,显示我的Ustream是否。电视频道正在播放或关闭。小部件本身有字段,我可以在其中输入我的频道名称,以便它可以为我检查它。

我真正想做的是,如果插件检测到我的频道正在播放,就给我应用一个类。不幸的是,我一辈子都不知道如何从插件中提取代码,并在标题中调用它。php文件(其中是)来使用它。插件本身可以在页面上根据需要多次出现在小部件中。但我对PHP/Wordpress/Plugins的了解还不够,无法用它做任何其他事情。

如果您能帮助我们了解第一步是什么,我们将不胜感激。

这是我正在使用的插件的代码。

<?php
class wp_ustream_status extends WP_Widget {

    // ============================================================
    // Constructer
    // ============================================================
    function wp_ustream_status () {
        $widget_ops = array(
        \'description\' => \'Display Ustream online status\'
    );
    parent::WP_Widget(false, $name = \'Ustream Status\',$widget_ops);
}

    // ============================================================
    // Form
    // ============================================================
    function form( $instance ) {
        //Reading the existing data from $instance
        $instance = wp_parse_args( (array) $instance, array( \'account\' => \'YokosoNews\', \'online\' => \'\', \'offline\' => \'\') );
        $account = esc_attr( $instance[\'account\'] );
        $online = esc_attr( $instance[\'online\'] );
        $offline = esc_attr( $instance[\'offline\'] );
    ?>
    <!--Form-->
    <p><label for="<?php echo $this->get_field_id(\'account\'); ?>"><?php _e(\'Ustream channel name or URL:\'); ?> <input class="widefat" id="<?php echo $this->get_field_id(\'account\'); ?>" name="<?php echo $this->get_field_name(\'account\'); ?>" type="text" value="<?php echo $account; ?>" /></label></p>

    <p><label for="<?php echo $this->get_field_id(\'online\'); ?>"><?php _e(\'Online image URL:\'); ?> <input class="widefat" id="<?php echo $this->get_field_id(\'online\'); ?>" name="<?php echo $this->get_field_name(\'online\'); ?>" type="text" value="<?php echo $online; ?>" /></label></p>

    <p><label for="<?php echo $this->get_field_id(\'offline\'); ?>"><?php _e(\'Offline image URL:\'); ?> <input class="widefat" id="<?php echo $this->get_field_id(\'offline\'); ?>" name="<?php echo $this->get_field_name(\'offline\'); ?>" type="text" value="<?php echo $offline; ?>" /></label></p>
    <!--/Form-->
    <?php    }


    // ============================================================
    // Update
    // ============================================================
    function update( $new_instance, $old_instance ) {
    // Old Instance and New instance
            $instance = $old_instance;
            $instance[\'account\'] = preg_replace("#^.*/([^/]+)/?$#",\'${1}\',$new_instance[\'account\']);
            $instance[\'online\'] = strip_tags( $new_instance[\'online\'] );
            $instance[\'offline\'] = strip_tags( $new_instance[\'offline\'] );
    return $instance;    
    }

    // ============================================================
    // View
    // ============================================================
    function widget( $args, $instance ) {

        extract($args);
        $account = $instance[\'account\'];
        $online = $instance[\'online\'];
        $offline = $instance[\'offline\'];

        echo $before_widget;
        if ( $account )
        echo $before_title . \'Ustream Status\' . $after_title;
        // ==============================
        // Ustream Status starts here
        // ==============================
        // TRANSIENT STARTS HERE
        if ( false === ( $UstStatusArray = get_transient( \'wp_ustream_status\' ) ) ) {
            $opt = stream_context_create(array(
            \'http\' => array( \'timeout\' => 3 )
            ));
            $UstStatusSerial = file_get_contents(\'http://api.ustream.tv/php/channel/\' . $account . \'/getValueOf/status\',0,$opt);
            $UstStatusArray = unserialize($UstStatusSerial);
            set_transient( \'wp_ustream_status\', $UstStatusArray, 120 );
        }
        // TRANSIENT ENDS HERE
            // For DEBUG
            // echo \'<!--\' . $UstStatusArray . \'-->\';
            // Decode JSON
        switch ( $UstStatusArray[\'results\'] )
            {
            case \'live\':
                $UstStatus = 1;
            break;
            case \'offline\':
                $UstStatus = 2;
            break;
            case \'error\':
                $UstStatus = false;
            break;
            }
        if ($UstStatus == 1) {
        ?>
            <div align="center"><a href="http://www.ustream.tv/channel/<?php echo $account;?>" alt="<?php _e(\'Click here to visit the Ustream channel\'); ?>" target="_blank">
            <img src="<?php echo $online; ?>" alt="<?php _e(\'Live now\'); ?>" target="_blank" />
            </a></div>
        <?php
        // ONLINE part ends here
        }
        else if ($UstStatus == 2) {
            // If not live, including when the API does not respond
            ?>
            <div align="center"><a href="http://www.ustream.tv/channel/<?php echo $account;?>" alt="<?php _e(\'Click here to visit the Ustream channel\'); ?>" target="_blank">
            <img src="<?php echo $offline; ?>" alt="<?php _e(\'Offline\'); ?>" />
            </a></div>
        <?php } else {
            echo _e(\'Error occured. We could not retrieve the data from Ustream.\');
        }
        // ==============================
        // Ustream Status ends here
        // ==============================
        echo $after_widget; 
    }
}

// ============================================================
// Registering plug-ins
// ============================================================
function wpUstreamStatusInit() {
    // Registering class name
    register_widget(\'wp_ustream_status\');
}

// ============================================================
// execute wpUstreamStatusInit()
// ============================================================
add_action(\'widgets_init\', \'wpUstreamStatusInit\');
?>

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成

正确的“WordPress”方法是the_widget 模板标签可以在任何地方显示小部件。

所以在你的情况下,你会这样:

$instance[\'account\'] = \'account name\'; //Ustream channel name
$instance[\'online\'] = \'http://www.online_image.URL\';
$instance[\'offline\'] = \'http://www.offline_image.URL\';

the_widget(\'wp_ustream_status\', $instance);

SO网友:anmari

我也有类似的需求——想要一个有设置的小部件,但不要放在侧边栏中。如果小部件开发人员没有制作短代码,那么实际上可以使用选项页面将其重新编码为短代码,但这样就超出了原始小部件的升级路径。

所以

我写了一个插件http://webdesign.anmari.com/1649/shortcode-any-widget/ (可在wordpress上获得)对任何小部件进行快捷编码。它创建了一个“短代码”侧栏,可以将小部件拖动到其中并设置设置。

然后可以调用小部件,它将使用这些设置。

To add in header.php:

只需在标题中添加所需的位置。php使用wordpress函数http://codex.wordpress.org/Function_Reference/do_shortcode比如:

echo do_shortcode (\'[do_widget "ustream status"]\')

结束

相关推荐

如果我使用像get_the_title()这样的本机API调用而不是$POST->POST_TITLE,我会看到性能下降吗?

假设我已经通过一些早期的过程获得了$post对象,该过程循环遍历一个ID数组,并在每个ID上使用get\\u post(),将生成的对象存储在某个数组中。稍后,我想循环遍历该数组,并对每个帖子进行处理。我已经有了$my\\u post对象,所以我可以echo $my_post->post_title, 或者我可以想象一下echo apply_filters(\'the_title\', $my_post->post_title, $my_post->ID) 或者我可以用本地人get_th