为什么自定义小工具不会出现在块编辑器中(古腾堡)?

时间:2021-09-05 作者:mricdev

通过将以下代码添加到我的函数中,我创建了一个简单的自定义小部件。php文件:

// Creating the widget 
class wpb_widget extends WP_Widget {
      
    function __construct() {
    parent::__construct(
      
    // Base ID of your widget
    \'wpb_widget\', 
      
    // Widget name will appear in UI
    __(\'WPBeginner Widget\', \'wpb_widget_domain\'), 
      
    // Widget description
    array( \'description\' => __( \'Sample widget based on WPBeginner Tutorial\', \'wpb_widget_domain\' ), ) 
    );
    }
      
    // Creating widget front-end
      
    public function widget( $args, $instance ) {
        $title = apply_filters( \'widget_title\', $instance[\'title\'] );
          
        // before and after widget arguments are defined by themes
        echo $args[\'before_widget\'];
        if ( ! empty( $title ) )
        echo $args[\'before_title\'] . $title . $args[\'after_title\'];
          
        // This is where you run the code and display the output
        echo __( \'Hello, World!\', \'wpb_widget_domain\' );
        echo $args[\'after_widget\'];
    }
              
    // Widget Backend 
    public function form( $instance ) {
        if ( isset( $instance[ \'title\' ] ) ) {
        $title = $instance[ \'title\' ];
        }
        else {
        $title = __( \'New title\', \'wpb_widget_domain\' );
        }
        // Widget admin form
        ?>
        <p>
        <label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e( \'Title:\' ); ?></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 esc_attr( $title ); ?>" />
        </p>
        <?php 
    }
          
    // Updating widget replacing old instances with new
    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';
        return $instance;
    }
     
    // Class wpb_widget ends here
} 
 
 
// Register and load the widget
function wpb_load_widget() {
    register_widget( \'wpb_widget\' );
}
add_action( \'widgets_init\', \'wpb_load_widget\' );
但它不会出现在前端的块编辑器(图像上的左窗格)中(请参见here). 它仅显示在后端,外观(>;小部件,请参阅here.

我是Wordpress的初学者,我研究了如何解决这个问题,但没有找到解决方案。

顺致敬意,

艾默里克语

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

块编辑器中仅显示块。WordPress的最新版本增加了向小部件区域添加块的功能,但没有向帖子添加小部件的功能。

您已经注册了一个小部件,它只能添加到小部件区域。要创建一个可以添加到任何可以使用块的地方的小部件,您需要创建一个块:https://developer.wordpress.org/block-editor/handbook/tutorials/create-block/

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'