我创建了一个小部件,到目前为止它只显示在主页上。但是我希望它出现在帖子页面上,并且只有在用户输入了参数时才会显示。
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个小时,我真的被卡住了。不要求人们为我编码,但我需要知道我应该使用的正确术语和方法。指向符合我要求的教程/文档的指针非常受欢迎(有很多教程,但它们都与我正在寻找的行为不同)
目视
^这是全局配置的地方,很棒
^这是我想要的每个帖子配置
^这就是它现在出现的地方 - 显示良好,位置不好
^这是我希望它出现的地方
答案 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())