gpt4 book ai didi

php - 如何自动激活 WordPress 小部件? (新的 Widgets_API WP_Widget 类)

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:53 27 4
gpt4 key购买 nike

我最终放弃了这个。

我正在 WordPress 2.8.4 上开发一些东西。新的小部件 API 的易用性给我留下了深刻的印象,它允许您使用扩展 WP_Widget 并轻松创建具有多个实例的小部件。但是我遇到了一个问题。

如何在主题激活时自动激活小部件?我试过使用:

add_action('sidebars_widgets', array('sidebar-1', array('uc_tagcloud')));

但没有成功。问题是新的 wordpress API 创建小部件 ID 并自动将唯一 ID 添加到 ID 的末尾。所以我就是无法掌握它。我已经尝试了上述解决方案,但通过查看源代码获得的实际小部件 ID 始终显示 uc_tagcloud-2 或 3 或 4..等等。每次我添加小部件时都会显示一个新实例。

如果有任何想法,我将不胜感激,我已经深入思考并在互联网上搜索了几个小时。所以这是我最后的机会。

我基本上不希望用户手动拖动和启用它们。

下面是我开发的一个示例小部件。如果我将它拖放到相关的侧边栏中,效果很好。但我不知道如何......我的问题是:如何在不手动拖动它的情况下将它自动激活到特定的侧边栏(WP_Widget new Widgets API)

这是小部件的代码:

<?php
/**********************************************************************
Widget: Tag Cloud List
**********************************************************************/
class uc_tagcloud extends WP_Widget {

// Constructor
function uc_tagcloud() {
$widget_ops = array('description' => __('A list of your blog tags for your sidebar','ucms'));
$this->WP_Widget('uc_tagcloud', __('ultimaCMS - Tag Cloud','ucms'), $widget_ops);
}

// Display Widget
function widget($args, $instance) {
extract($args);
$title = esc_attr($instance['title']);
$num = intval($instance['num']);
echo $before_widget.$before_title.$title.$after_title;

// Display widget content
?>
<?php wp_tag_cloud('smallest=9&largest=22&number='.$num); ?>
<?php

echo $after_widget;
}

// When Widget Control Form Is Posted
function update($new_instance, $old_instance) {
if (!isset($new_instance['submit'])) {
return false;
}
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['num'] = intval($new_instance['num']);
return $instance;
}

// DIsplay Widget Control Form
function form($instance) {
global $wpdb;
$instance = wp_parse_args((array) $instance, array('title' => __('Tag Cloud','ucms'), 'num' => 100));
$title = esc_attr($instance['title']);
$num = intval($instance['num']);
?>

<p>
<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:','ucms'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
</p>

<p>
<label for="<?php echo $this->get_field_id('num'); ?>"><?php _e('Number of tags:','ucms'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('num'); ?>" name="<?php echo $this->get_field_name('num'); ?>" type="text" value="<?php echo $num; ?>" />
<br /><small>Enter 0 to display all tags</small>
</p>

<input type="hidden" id="<?php echo $this->get_field_id('submit'); ?>" name="<?php echo $this->get_field_name('submit'); ?>" value="1" />

<?php
}
}

### Initiate widget
add_action('widgets_init', 'uc_tagcloud_init');
function uc_tagcloud_init() {
register_widget('uc_tagcloud');
}
?>

它非常简单,我喜欢它的新 API。但我就是不知道如何在特定的侧边栏上自动激活小部件的实例。有帮助吗?

最佳答案

有一个 blog post mirror 与可能有解决方案的这个问题一样古老,但它是为 WordPress MU(现在是多站点)设计的,应该相应地更新/调整。它是 mu-plugin 和主题的 functions.php 中的额外代码的混合体。

但基于 this Q&A在 WordPress Answers 和其他 blog post还没有镜像,以下适用于 WordPress 3.3 或更高版本。它在主题激活上运行,并使用 WP 3.4.2 进行测试,并应用于 TwentyEleven 的 functions.php

add_action( 'after_switch_theme', 'so_1353147_activate_theme', 10 , 2 );

function so_1353147_activate_theme( $oldname, $oldtheme = false )
{
$sidebar_id = 'sidebar-5';
$sidebars_widgets = get_option( 'sidebars_widgets' );
$id = count( $sidebars_widgets ) + 1;
$sidebars_widgets[$sidebar_id] = array( "text-" . $id );

$ops = get_option( 'widget_text' );
$ops[$id] = array(
'title' => 'Automatic Widget',
'text' => 'Lorem ipsum lorem',
);
update_option( 'widget_text', $ops );
update_option( 'sidebars_widgets', $sidebars_widgets );
}

关于php - 如何自动激活 WordPress 小部件? (新的 Widgets_API WP_Widget 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1353147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com