관리-도구
편집 파일: contact-form-properties.php
<?php add_filter( 'wpcf7_pre_construct_contact_form_properties', 'wpcf7_sendinblue_register_property', 10, 2 ); /** * Registers the sendinblue contact form property. */ function wpcf7_sendinblue_register_property( $properties, $contact_form ) { $service = WPCF7_Sendinblue::get_instance(); if ( $service->is_active() ) { $properties += array( 'sendinblue' => array(), ); } return $properties; } add_action( 'wpcf7_save_contact_form', 'wpcf7_sendinblue_save_contact_form', 10, 3 ); /** * Saves the sendinblue property value. */ function wpcf7_sendinblue_save_contact_form( $contact_form, $args, $context ) { $service = WPCF7_Sendinblue::get_instance(); if ( ! $service->is_active() ) { return; } $prop = (array) ( $_POST['wpcf7-sendinblue'] ?? array() ); $prop = wp_parse_args( $prop, array( 'enable_contact_list' => false, 'contact_lists' => array(), 'enable_transactional_email' => false, 'email_template' => 0, ) ); $prop['contact_lists'] = array_map( 'absint', $prop['contact_lists'] ); $prop['email_template'] = absint( $prop['email_template'] ); $contact_form->set_properties( array( 'sendinblue' => $prop, ) ); } add_filter( 'wpcf7_editor_panels', 'wpcf7_sendinblue_editor_panels', 10, 1 ); /** * Builds the editor panel for the sendinblue property. */ function wpcf7_sendinblue_editor_panels( $panels ) { $service = WPCF7_Sendinblue::get_instance(); if ( ! $service->is_active() ) { return $panels; } $contact_form = WPCF7_ContactForm::get_current(); $prop = wp_parse_args( $contact_form->prop( 'sendinblue' ), array( 'enable_contact_list' => false, 'contact_lists' => array(), 'enable_transactional_email' => false, 'email_template' => 0, ) ); $editor_panel = static function () use ( $prop, $service ) { $description = sprintf( esc_html( __( "You can set up the Brevo integration here. For details, see %s.", 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ), __( 'Brevo integration', 'contact-form-7' ) ) ); $lists = wpcf7_sendinblue_get_lists(); $templates = $service->get_templates(); ?> <h2><?php echo esc_html( __( 'Brevo', 'contact-form-7' ) ); ?></h2> <fieldset> <legend><?php echo $description; ?></legend> <table class="form-table" role="presentation"> <tbody> <tr class="<?php echo $prop['enable_contact_list'] ? '' : 'inactive'; ?>"> <th scope="row"> <?php echo esc_html( __( 'Contact lists', 'contact-form-7' ) ); ?> </th> <td> <fieldset> <legend class="screen-reader-text"> <?php echo esc_html( __( 'Contact lists', 'contact-form-7' ) ); ?> </legend> <label for="wpcf7-sendinblue-enable-contact-list"> <input type="checkbox" name="wpcf7-sendinblue[enable_contact_list]" id="wpcf7-sendinblue-enable-contact-list" value="1" <?php checked( $prop['enable_contact_list'] ); ?> /> <?php echo esc_html( __( "Add form submitters to your contact lists", 'contact-form-7' ) ); ?> </label> </fieldset> </td> </tr> <tr> <th scope="row"></th> <td> <fieldset> <?php if ( $lists ) { echo sprintf( '<legend>%1$s</legend>', esc_html( __( 'Select lists to which contacts are added:', 'contact-form-7' ) ) ); echo '<ul>'; foreach ( $lists as $list ) { echo sprintf( '<li><label><input %1$s /> %2$s</label></li>', wpcf7_format_atts( array( 'type' => 'checkbox', 'name' => 'wpcf7-sendinblue[contact_lists][]', 'value' => $list['id'], 'checked' => in_array( $list['id'], $prop['contact_lists'] ), ) ), esc_html( $list['name'] ) ); } echo '</ul>'; } else { echo sprintf( '<legend>%1$s</legend>', esc_html( __( 'You have no contact list yet.', 'contact-form-7' ) ) ); } ?> </fieldset> <?php echo sprintf( '<p><a %1$s>%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>', wpcf7_format_atts( array( 'href' => 'https://my.sendinblue.com/lists', 'target' => '_blank', 'rel' => 'external noreferrer noopener', ) ), esc_html( __( 'Manage your contact lists', 'contact-form-7' ) ), esc_html( __( '(opens in a new tab)', 'contact-form-7' ) ) ); ?> </td> </tr> <tr class="<?php echo $prop['enable_transactional_email'] ? '' : 'inactive'; ?>"> <th scope="row"> <?php echo esc_html( __( 'Welcome email', 'contact-form-7' ) ); ?> </th> <td> <fieldset> <legend class="screen-reader-text"> <?php echo esc_html( __( 'Welcome email', 'contact-form-7' ) ); ?> </legend> <label for="wpcf7-sendinblue-enable-transactional-email"> <input type="checkbox" name="wpcf7-sendinblue[enable_transactional_email]" id="wpcf7-sendinblue-enable-transactional-email" value="1" <?php checked( $prop['enable_transactional_email'] ); ?> /> <?php echo esc_html( __( "Send a welcome email to new contacts", 'contact-form-7' ) ); ?> </label> </fieldset> </td> </tr> <tr> <th scope="row"></th> <td> <fieldset> <?php if ( $templates ) { echo sprintf( '<legend>%1$s</legend>', esc_html( __( 'Select an email template:', 'contact-form-7' ) ) ); echo '<select name="wpcf7-sendinblue[email_template]">'; echo sprintf( '<option %1$s>%2$s</option>', wpcf7_format_atts( array( 'value' => 0, 'selected' => 0 === $prop['email_template'], ) ), esc_html( __( '— Select —', 'contact-form-7' ) ) ); foreach ( $templates as $template ) { echo sprintf( '<option %1$s>%2$s</option>', wpcf7_format_atts( array( 'value' => $template['id'], 'selected' => $prop['email_template'] === $template['id'], ) ), esc_html( $template['name'] ) ); } echo '</select>'; } else { echo sprintf( '<legend>%1$s</legend>', esc_html( __( 'You have no active email template yet.', 'contact-form-7' ) ) ); } ?> </fieldset> <?php echo sprintf( '<p><a %1$s>%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>', wpcf7_format_atts( array( 'href' => 'https://my.sendinblue.com/camp/lists/template', 'target' => '_blank', 'rel' => 'external noreferrer noopener', ) ), esc_html( __( 'Manage your email templates', 'contact-form-7' ) ), esc_html( __( '(opens in a new tab)', 'contact-form-7' ) ) ); ?> </td> </tr> </tbody> </table> </fieldset> <?php }; $panels += array( 'sendinblue-panel' => array( 'title' => __( 'Brevo', 'contact-form-7' ), 'callback' => $editor_panel, ), ); return $panels; } /** * Retrieves contact lists from Brevo's database. */ function wpcf7_sendinblue_get_lists() { static $lists = array(); $service = WPCF7_Sendinblue::get_instance(); if ( ! empty( $lists ) or ! $service->is_active() ) { return $lists; } $limit = 50; $offset = 0; while ( count( $lists ) < $limit * 10 ) { $lists_next = (array) $service->get_lists( array( 'limit' => $limit, 'offset' => $offset, ) ); if ( ! empty( $lists_next ) ) { $lists = array_merge( $lists, $lists_next ); } if ( count( $lists_next ) < $limit ) { break; } $offset += $limit; } return $lists; }