Call plugin with php function

时间:2012-11-12 作者:Ronin

此插件只能作为小部件使用。我需要用php函数调用这个插件。如何修改此代码?

  <?php
 /*
 Plugin Name: AJAX Calendar
 Plugin URI: http://urbangiraffe.com/plugins/ajax-calendar/
 Description: A version of the WordPress calendar that uses AJAX to allow the user to step through the months without updating the page. 
 Version: 2.5.1
 Author: John Godley
 Author URI: http://urbangiraffe.com
 */

 class AJAX_Calendar_Widget extends WP_Widget {
var $category_ids = array();

function AJAX_Calendar_Widget() {
    $widget_ops  = array( \'classname\' => \'ajax_calendar_widget\', \'description\' => __( \'AJAX Powered Calendar\', \'ajax-calendar\' ) );
    $control_ops = array( \'width\' => 300, \'height\' => 300 );

    $this->WP_Widget( \'ajax-calendar\', __( \'AJAX Calendar\', \'ajax-calendar\' ), $widget_ops, $control_ops );

    add_action( \'template_redirect\', array( &$this, \'template_redirect\' ) );
}

function template_redirect() {
    if ( is_date() && isset( $_GET[\'ajax\'] ) && $_GET[\'ajax\'] == \'true\' ) {
        $settings = $this->get_settings();
        $settings = $settings[$this->number];

        $instance     = wp_parse_args( $settings, array( \'title\' => __( \'AJAX Calendar\', \'ajax-calendar\' ), \'category_id\' => \'\' ) );
        $this->category_ids = array_filter( explode( \',\', $instance[\'category_id\'] ) );

        echo $this->get_calendar();
        die();
    }
}

/**
 * Display the widget
 *
 * @param string $args Widget arguments
 * @param string $instance Widget instance
 * @return void
 **/
function widget( $args, $instance ) {
    extract( $args );

    $instance     = wp_parse_args( (array)$instance, array( \'title\' => __( \'AJAX Calendar\', \'ajax-calendar\' ), \'category_id\' => \'\' ) );
    $title        = apply_filters( \'widget_title\', $instance[\'title\'] );
    $category_id  = $instance[\'category_id\'];

    $this->category_ids = array_filter( explode( \',\', $category_id ) );

    echo $before_widget;

    if ( $title )
        echo $before_title . stripslashes( $title ) . $after_title;

    echo $this->get_calendar();

    // MicroAJAX: http://www.blackmac.de/index.php?/archives/31-Smallest-JavaScript-AJAX-library-ever!.html
 ?>
 <script type="text/javascript">
 function show_micro_ajax(response){document.getElementById(\'wp-     calendar\').innerHTML=response;}
 function microAjax(url,cF){this.bF=function(caller,object){return function(){return      caller.apply(object,new Array(object));}};
 this.sC=function(object){if(this.r.readyState==4){this.cF(this.r.responseText);}};
 this.gR=function(){if(window.ActiveXObject)
 return new ActiveXObject(\'Microsoft.XMLHTTP\');else if(window.XMLHttpRequest)
 return new XMLHttpRequest();else return false;};
 if(arguments[2])this.pb=arguments[2];else this.pb="";this.cF=cF;this.url=url;     this.r=this.gR();if(this.r){this.r.onreadystatechange=this.bF(this.sC,this);if(this.pb!="")     {this.r.open("POST",url,true);this.r.setRequestHeader(\'Content-type\',\'application/x-www-form-urlencoded\');this.r.setRequestHeader(\'Connection\',\'close\');}else{this.r.open("GET",url,true);}
 this.r.send(this.pb);}}
 </script>
 <?php
    // After
    echo $after_widget;
}

function get_calendar() {
    global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;

    add_filter( \'query\', array( &$this, \'modify_calendar_query\' ) );

    $text = get_calendar( true, false );

    remove_filter( \'query\', array( &$this, \'modify_calendar_query\' ) );

    $text = str_replace( \'<td colspan="3" id="next"><a\', \'<td colspan="3" id="next"><a onclick="microAjax(this.href + \\\'?ajax=true\\\',show_micro_ajax); return false"\', $text );
    $text = str_replace( \'<td colspan="3" id="prev"><a\', \'<td colspan="3" id="prev"><a onclick="microAjax(this.href + \\\'?ajax=true\\\',show_micro_ajax); return false"\', $text );
    return $text;
}

function modify_calendar_query( $query ) {
    if ( !empty( $this->category_ids ) ) {
        global $wpdb;

        $query = str_replace( \'WHERE\', "LEFT JOIN {$wpdb->prefix}term_relationships ON {$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id INNER JOIN {$wpdb->prefix}term_taxonomy ON ({$wpdb->prefix}term_relationships.term_taxonomy_id = {$wpdb->prefix}term_taxonomy.term_taxonomy_id AND {$wpdb->prefix}term_taxonomy.taxonomy=\'category\') WHERE", $query );
        if ( strpos( $query, \'ORDER\' ) !== false )
            $query = str_replace( "ORDER", "AND {$wpdb->prefix}term_taxonomy.term_id IN (".implode (\',\', $this->category_ids ).\') ORDER\', $query );
        else
            $query .= "AND {$wpdb->prefix}term_taxonomy.term_id IN (".implode (\',\', $this->category_ids ).\')\';
    }

    return $query;
}

/**
 * Display config interface
 *
 * @param string $instance Widget instance
 * @return void
 **/
function form( $instance ) {
    $instance = wp_parse_args( (array)$instance, array( \'title\' => __( \'AJAX Calendar\', \'ajax-calendar\' ), \'category_id\' => \'\' ) );

    $title        = stripslashes( $instance[\'title\'] );
    $category_id  = $instance[\'category_id\'];

    ?>
 <p><label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\',      \'ajax-calendar\' ); ?> <input class="widefat" id="<?php echo      $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>"      type="text" value="<?php echo esc_attr( $title ); ?>" /></label></p>
 <p><label for="<?php echo $this->get_field_id( \'category_id\' ); ?>"><?php _e( \'Category IDs:\', \'ajax-calendar\' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( \'category_id\' ); ?>" name="<?php echo $this->get_field_name( \'category_id\' ); ?>" type="text" value="<?php echo esc_attr( $category_id ); ?>" /></label></p>
    <?php
}

/**
 * Save widget data
 *
 * @param string $new_instance
 * @param string $old_instance
 * @return void
 **/
function update( $new_instance, $old_instance ) {
    $instance     = $old_instance;
    $new_instance = wp_parse_args( (array)$new_instance, array( \'title\' => __( \'AJAX Calendar\', \'ajax-calendar\' ), \'category_id\' => \'\' ) );

    $instance[\'title\']        = wp_filter_nohtml_kses( $new_instance[\'title\'] );
    $instance[\'category_id\']  = implode( \',\', array_filter( array_map( \'intval\', explode( \',\', $new_instance[\'category_id\'] ) ) ) );

    return $instance;
}
 }

 function register_ajax_calendar_widget() {
register_widget( \'AJAX_Calendar_Widget\' );
 }

 add_action( \'widgets_init\', \'register_ajax_calendar_widget\' );

 function ajax_calendar ($categories = \'\') {
// $calendar = AJAX_Calendar::get ();
// $calendar->show ( $categories );
 }

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

根据需要,您需要使用the_widget 函数,我相信在WordPress中使用它的例子很少twentyeleven 主题也是如此。

结束

相关推荐

在模板文件和函数中设置帖子缩略图大小。php

对于我的帖子,我有一个用于帖子图像的框,框的大小是214 x 73。我希望图像适合盒子的宽度,并将其裁剪为73像素的高度。这就是我迄今为止的职能。php文件<?php add_theme_support( \'post-thumbnails\'); set_post_thumbnail_size(); if ( function_exists( \'add_image_size\' ) ) { add_image_size( \'post-thumb\