Профильное поле Buddypress динамическое

Вопрос или проблема

Существует ли способ или плагин, чтобы сделать профиль пользователя Buddypress динамическим? Например, есть поле под названием номер телефона. Пользователь должен иметь возможность динамически добавлять несколько номеров телефонов, нажимая кнопку “Добавить номер телефона”.

Вот пример с wordpress.com
введите описание изображения здесь

Спасибо.

Это поможет вам выполнить вашу задачу. Или вы можете использовать плагин BuddyPress Xprofile Custom Fields Type.

//Добавление метабокса на странице расширенного профиля пользователя
function bp_user_meta_box() {

    add_meta_box(
        'metabox_id',
        __( 'Название метабокса', 'buddypress' ),
        'bp_user_inner_meta_box', // функция, которая отображает содержимое метабокса
        get_current_screen()->id
    );
}
add_action( 'bp_members_admin_user_metaboxes', 'bp_user_meta_box');
function bp_user_inner_meta_box() {
    echo '<p>Здесь вы можете написать ваши поля формы для настроек пользователя. Или вы можете выводить информацию, относящуюся к этому пользователю. Например, плагин Достижения может показать значки пользователей здесь. </p>';
    $user_id = get_current_user_id();
    $facebook_name = get_user_meta( $user_id, 'facebook_name', true );
    $facebook_name = $facebook_name ?  $facebook_name : '';
    ?>    
    <label for="user_facebook_name">Имя на Facebook</label>
    <input type="text" name="facebook_name" id="user_facebook_name" value="<?php echo  $facebook_name; ?>" />
    <input type="submit" name="submit" value="Отправить" />
    <?php
}

function bp_user_save_metabox() {

    if( isset( $_POST['submit'] ) ) {

        //$user_id = isset( $_GET['user_id'] ) ? $_GET['user_id'] : 0;
        $user_id = get_current_user_id();

        // вам нужно будет использовать параметр $_POST и валидировать перед сохранением
        $meta_val = isset( $_POST['facebook_name'] ) ? sanitize_text_field( $_POST['facebook_name'] ) : '';

        // $meta_val будет параметром $_POST из формы внутреннего метабокса
        update_user_meta( $user_id, 'facebook_name', $meta_val );
    }
}
add_action( 'bp_members_admin_update_user', 'bp_user_save_metabox' );

.

Ответ или решение

Создание Динамического Профильного Поля в BuddyPress

Введение

Динамическое управление пользовательскими профилями становится важной частью любого социального сайта или платформы. В BuddyPress, с использованием определенных плагинов и пользовательского кода, вы можете создать динамические поля, которые позволят пользователям добавлять несколько контактных номеров.

Проблема

В вашем вопросе поднимается необходимость добавления функционала для динамического добавления нескольких контактных номеров через кнопку "Добавить контактный номер". К сожалению, изначально BuddyPress не поддерживает такую функциональность "из коробки". Однако, используя существующие плагины или некоторый программный код, это вполне возможно реализовать.

Решение

Существует несколько способов достижения этой цели. Одним из простых и эффективных решений является использование плагина BuddyPress Xprofile Custom Fields Type. Этот плагин предоставляет расширенные типы полей, которые можно интегрировать в профиль пользователя.

Если вы предпочитаете более кастомизированный подход, можно написать собственный код, который добавит метабокс на страницу профиля пользователя.

Пример Кода для Создания Динамического Поля

Ниже представлен пример кода, который позволит добавить возможность ввода нескольких контактных номеров.

// Добавляем метабокс на страницу профиля пользователя
function bp_user_meta_box() {
    add_meta_box(
        'contact_numbers_metabox',
        __( 'Контактные номера', 'buddypress' ),
        'bp_user_contact_numbers_inner_meta_box',
        'user' // Замените на 'bp_profile' для профиля BuddyPress
    );
}
add_action( 'bp_members_admin_user_metaboxes', 'bp_user_meta_box' );

// Функция отображения метабокса
function bp_user_contact_numbers_inner_meta_box() {
    $user_id = get_current_user_id();
    $contact_numbers = get_user_meta( $user_id, 'contact_numbers', true ) ?: []; // Получаем существующие номера
    ?>
    <div id="contact-numbers-container">
        <?php foreach ( $contact_numbers as $index => $number ) : ?>
            <input type="text" name="contact_numbers[]" value="<?php echo esc_attr( $number ); ?>" placeholder="Введите номер контакта" />
        <?php endforeach; ?>
        <button type="button" id="add-contact-number">Добавить контактный номер</button>
    </div>
    <script>
        document.getElementById('add-contact-number').onclick = function() {
            var input = document.createElement('input');
            input.type = 'text';
            input.name = 'contact_numbers[]';
            input.placeholder = 'Введите номер контакта';
            document.getElementById('contact-numbers-container').appendChild(input);
        };
    </script>
    <?php
}

// Сохранение пользовательских данных
function bp_user_save_contact_numbers() {
    if (isset($_POST['contact_numbers'])) {
        $user_id = get_current_user_id();
        $contact_numbers = array_map('sanitize_text_field', $_POST['contact_numbers']); // Санитация входных данных
        update_user_meta($user_id, 'contact_numbers', $contact_numbers);
    }
}
add_action('bp_members_admin_update_user', 'bp_user_save_contact_numbers');

Описание Кода

  1. Добавление Метабокса: Функция bp_user_meta_box добавляет новый метабокс на страницу профиля пользователя.
  2. Отображение Ввода: В bp_user_contact_numbers_inner_meta_box мы создаем поля для ввода контактных номеров и добавляем кнопку, по нажатию на которую пользователи могут добавлять дополнительные поля.
  3. Сохранение Данных: Функция bp_user_save_contact_numbers обрабатывает и сохраняет введенные номера в мета-полях пользователя.

Заключение

Применение приведенного кода позволит вам эффективно реализовать динамические поля в BuddyPress, улучшая взаимодействие пользователя с платформой. При помощи плагинов и пользовательской интеграции, вы можете создавать адаптированные решения, соответствующие вашим потребностям.

Важно следить за безопасностью данных и применять соответствующие методы валидации при обработке пользовательских данных. Надеюсь, данный подход будет полезен для вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...