如何创建一个在全局和每个帖子基础上使用参数的小部件?

时间:2011-09-21 09:30:29

标签: php wordpress-plugin wordpress

我创建了一个小部件,到目前为止它只显示在主页上。但是我希望它出现在帖子页面上,并且只有在用户输入了参数时才会显示。

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" );

现在小部件出现在右侧的主页中,默认选项被正确处理。

然而,它不会出现在帖子页面上。 (“Hello world!欢迎来到WordPress。这是你的第一篇帖子......”) A)如何才能使其仅显示在帖子页面上 B)如何在每个帖子级别控制参数

示例:全局设置“颜色”应为“绿色”,在小部件页面上进行控制。但是在帖子页面我想要一个textarea“poemoftheday”,如果它不是空的,它应该使用全局“颜色”'绿色'显示在侧边栏上,但根据帖子,“poemoftheday”将不同或不存在

我的问题所有WordPress术语和版本都让我们很难找到正确的当前解决方案。我现在已经工作了7个小时,我真的被卡住了。不要求人们为我编码,但我需要知道我应该使用的正确术语和方法。指向符合我要求的教程/文档的指针非常受欢迎(有很多教程,但它们都与我正在寻找的行为不同)

目视
This is where the global configuration is, great
^这是全局配置的地方,很棒


This is where I'd like to have the per post configuration
^这是我想要的每个帖子配置


This is where it's appearing right now, no good
^这就是它现在出现的地方 - 显示良好,位置不好


This is where I'd like it to appear ^这是我希望它出现的地方

1 个答案:

答案 0 :(得分:1)

所以这就是我在5天后解决的问题。

要编写存储per_post变量,我必须使用函数

  • 在我的类构造函数中,我添加了钩子add_action ( 'add_my_meta_box', array (__CLASS__, 'add_my_meta_box') );
  • 在我的班级
  • 中创建回调函数add_my_meta_box($page)
  • 在回调中add_meta_box ( 'My Widget', 'My box', array (__CLASS__, 'render_meta_box' ), $page);

使用global $post;和wordpress函数get_post_meta ($post->ID, 'my_var',true )update_post_meta ($post->ID, 'my_var', $value )

读取和存储所有值

为了确保我的小部件仅显示在单个帖子页面上,我使用了检查 在回显小部件之前if(is_single())