开发者

How to create a widget that uses parameters on a global and per post basis?

I have created a widget and so far it only displays on the home page. However I want it to appear on the post page, and only if the user has inputted a parameter.

class My_Widget extends WP_Widget {
    function __construct() {
        $widget_ops = array ('description' => __ ( 'Lorem ipsum' ) );
        parent::__construct ( 'exampl', __ ( 'Example' ), $widget_ops );
    }
    function widget($args, $instance) {
        extract ( $args );
        $title = apply_filters ( 'widget_title', empty ( $instance ['title'] ) ? ' ' : $instance ['title'] );
        # Before the widget
        echo $before_widget;

        # The title
        if ($title)
            echo $before_title . $title . $after_title;

        # Make the Hello World Example widget
        echo isset($instance['foo'])?$instance['foo']:'foo';
        echo isset($instance['bar'])?$instance['bar']:'bar';

        # After the widget
        echo $after_widget;

    }
    //The global widget options
    function form($instance){
        /* Set up some default widget settings. */
        $defaults = array( 'foo' => 'oof', 'bar' => 'rab');
        $instance = wp_parse_args( (array) $instance, $defaults ); ?>
        <p>
            <label for="<?php echo $this->get_field_id( 'foo' ); ?>"><!--shortened... -->
        </p>
        <?php 
    }
}

function my_init() {
    register_widget ( 'My_Widget' );
}
add_action ( "widgets_init", "my_init" );

Now the widget appears in the home page on the right, the default options are treated correctly.

It does not appear on the post page however. ("Hello world! Welcome to WordPress. This is your first post...") A) How can I make it appear only on the post page B) How can I control the parameters on a per post level

Example: The global setting "color" should be 'green', controlled on the widgets page. however in the post page I want a textarea "poemoftheday", if it's not empty it should show up on the sidebar using the global "color" 'green', but depending on the post, the "poemoftheday" will 开发者_Go百科be different or not present

My Problems All the WordPress terms and version have made it really hard to find out the correct current solution. I've been working on this for 7 hours now and I'm really stuck. Not asking people to code for me, but I need to know the right terms and methods I should be using. Pointers to tutorials/documentations that solve fit my requirements greatly appreciated (there are sooo many tutorials, but they all behave different from the behaviour I'm looking for)

Visually

How to create a widget that uses parameters on a global and per post basis?

^This is where the global configuration is, great


How to create a widget that uses parameters on a global and per post basis?

^This is where I'd like to have the per post configuration


How to create a widget that uses parameters on a global and per post basis?

^This is where it's appearing right now - displaying good, position no good


How to create a widget that uses parameters on a global and per post basis?

^This is where I'd like it to appear


So here's how I solved it after 5 days.

To write store per_post vars I had to use the function

  • In my class constructor i added the hook add_action ( 'add_my_meta_box', array (__CLASS__, 'add_my_meta_box') );
  • create the callback function add_my_meta_box($page) in my class
  • In that callback amongst other things add_meta_box ( 'My Widget', 'My box', array (__CLASS__, 'render_meta_box' ), $page);

All values are read and stored with global $post; and the wordpress functions get_post_meta ($post->ID, 'my_var',true ) and update_post_meta ($post->ID, 'my_var', $value )

To make sure that my widget only appears on a single post page I used the check if(is_single()) before echoing the widget

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜