カスタムメニューウィジェットを wp_register_sidebar_widget
でプログラム的に登録しようとしていますが、ワードプレスには表示されません。私はそのメソッドのリモート呼び出しを使用しています(xml-rpc)。コーデックスを参照して、私はそのメソッドにそのようなパラメータを渡しています:
wp_register_sidebar_widget(
'custom_menu_widget-1',
'My name',
'WP_Nav_Menu_Widget',
array( 'description' => 'blogroll' )
);
「私の名前」という名前のカスタムメニューウィジェットを作成する必要がありますが、何も登録されていません。私は3番目のパラメータ$output_callback
が間違っているかもしれないと思いますが、どこにもカスタムメニューのためのコールバックがあるべきであることがわかりません。その呼び出しから出力もエラーもないので、何が問題なのかわかりません。私は何かを見逃すかもしれないか、カスタムメニューウィジェットを登録する別の方法がありますか? function.phpを編集したくない、wpメソッドを使って標準のカスタムメニューウィジェットを登録したいだけです。
このコードを試してください(function.php
内)
class MyWidget extends WP_Widget {
function __construct() {
$widget_ops = array( 'description' => __('Use this widget to add one of your custom menu as a link list widget.') );
parent::__construct( 'custom_menu_widget-1', __('My name'), $widget_ops );
}
function widget($args, $instance) {
// Get menu
$nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;
if ( !$nav_menu )
return;
$instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
echo $args['before_widget'];
if ( !empty($instance['title']) )
echo $args['before_title'] . $instance['title'] . $args['after_title'];
wp_nav_menu( array( 'menu' => $nav_menu) );
echo $args['after_widget'];
}
function update( $new_instance, $old_instance ) {
$instance['title'] = strip_tags( stripslashes($new_instance['title']) );
$instance['nav_menu'] = (int) $new_instance['nav_menu'];
return $instance;
}
function form( $instance ) {
$title = isset( $instance['title'] ) ? $instance['title'] : '';
$nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';
// Get menus
$menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) );
// If no menus exists, direct the user to go and create some.
if ( !$menus ) {
echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Create some</a>.'), admin_url('nav-menus.php') ) .'</p>';
return;
}
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label>
<select id="<?php echo $this->get_field_id('nav_menu'); ?>" name="<?php echo $this->get_field_name('nav_menu'); ?>">
<?php
foreach ( $menus as $menu ) {
$selected = $nav_menu == $menu->term_id ? ' selected="selected"' : '';
echo '<option'. $selected .' value="'. $menu->term_id .'">'. $menu->name .'</option>';
}
?>
</select>
</p>
<?php
}
}
add_action( 'widgets_init', 'myplugin_register_widgets' );
function myplugin_register_widgets() {
register_widget( 'MyWidget' );
}