ti-enxame.com

Criando um widget com vários campos customizados

Eu estou tentando criar alguns widgets personalizados.

Eu criei um, que só precisava de um campo de título diferente. No entanto, estou agora preso ao tentar criar um widget que me permite ter vários campos. Eu preciso dos seguintes campos para o widget:

  • Título
  • Texto de introdução
  • Texto principal
  • Endereço de e-mail

Eu quero o formulário de widget para permitir que o usuário atualize os campos acima com texto. Eu quero então mostrar o texto que eles escreveram no meu widget da barra lateral.

Eu tenho o seguinte código que é para o widget anterior que fiz (sem campos extras além do título)

class registercv_widget extends WP_Widget {

        function __construct() {
            parent::__construct(
                'registercv_widget',
                __('Register CV Widget', 'registercv_widget_domain'),
                array( 'description' => __( 'Provides a "Register CV" button which launches a pop-up', 'registercv_widget_domain' ), )
            );
        }

        public function widget( $args, $instance ) {
            $title = apply_filters( 'widget_title', $instance['title'] );
            echo $args['before_widget'];
            echo '<div class="widget-wrapper">';
            if ( ! empty( $title ) )
                echo $args['before_title'] . $title . $args['after_title'];

    // This is where you run the code and display the output
            echo __( '<div class="register-button"><span><div class="button white">Send your CV</div></span></div>', 'registercv_widget_domain' );
            echo '</div>';
            echo $args['after_widget'];
        }

    // Widget Backend
        public function form( $instance ) {
            if ( isset( $instance[ 'title' ] ) ) {
                $title = $instance[ 'title' ];
            }
            else {
                $title = __( 'Register as a candidate', 'registercv_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;
        }
    }

    function registercv_load_widget() {
        register_widget( 'registercv_widget' );
    }
    add_action( 'widgets_init', 'registercv_load_widget' );

Isso funciona bem, mascomo posso adicionar campos extras a isso?

Eu tentei copiar todas as instâncias de $title e fazê-las novamente, mas com $text_one, mas não entendo como esse campo está sendo registrado. Alguém pode ajudar?

1
user1486133

Eu suponho que você deseja adicionar mais campos personalizados no formulário back-end do widget, para isso você só precisa criar um novo campo na função form( $instance );.

Então o código será parecido

        // Widget Backend
        public function form( $instance ) {
            if ( isset( $instance[ 'title' ] ) ) {
                $title = $instance[ 'title' ];
            }
            else {
                $title = __( 'Register as a candidate', 'registercv_widget_domain' );
            }

            if ( isset( $instance[ 'name' ] ) ) {
                $name = $instance[ 'name' ];
            }
            else {
                $name = __( 'Enter your name', 'registercv_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>

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

O código acima irá criar um novo campo no formulário. Em seguida, precisaremos salvar/atualizar o valor deste novo campo no banco de dados, siga o código abaixo:

// 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'] ) : '';

        $instance['name'] = ( ! empty( $new_instance['name'] ) ) ? strip_tags( $new_instance['name'] ) : '';
        return $instance;
    }
1
WisdmLabs