Получить массив текущего пользователя со строкой поста

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

Мне нужно получить 10 текущих полей пользователя и передать значения полей в строку поста. Строка поста ожидает определенные имена меток для каждого значения.

Пример – строка поста ожидает 'firstname' => 'value', а не 'user_firstname' => 'value'. После нескольких дней фатальных ошибок парсинга синтаксиса, теперь я просто получаю статус неудачи. Либо мой код массива, либо код поста (или оба) каким-то образом ошибочен. Сегодня я прочитал пост 2011 года, в котором говорится, что с версии WordPress 3.3 (текущая версия – 3.9) способ обращения к пользовательским полям изменился. В посте > http://goo.gl/x5deHi говорится, что можно обращаться к пользовательским полям WP, как к пяти из моих, следующим образом:

    if ( $current_user->has_prop( 'my-field' ) ) )
echo '<p>
    ' . $current_user->get( 'my-field' ) . '
    </p>';`

Так что это код, который у меня есть на данный момент:

    // Получить значения для этих 10 полей пользователя 
    function wp_get_current_user() {
    $current_user = wp_get_current_user();

    $current_user_info = array(
    'firstname' . $current_user->user_firstname =>' ',
    'lastname' .  $current_user->user_lastname =>' ',
    if ( $current_user->has_prop( 'mepr-address-one' ) ) )
    ' . $current_user->get( 'mepr-address-one' ) .  => ' ',
    if ( $current_user->has_prop( 'mepr-address-city' ) ) )
    ' . $current_user->get( 'mepr-address-city' ) .  => ' ',
    if ( $current_user->has_prop( 'mepr-address-state' ) ) )
    ' . $current_user->get( 'mepr-address-state' ) .  => ' ',
    if ( $current_user->has_prop( 'mepr-address-zip' ) ) )
    ' . $current_user->get( 'mepr-address-zip' ) .  => ' ',
    if ( $current_user->has_prop( 'mepr-address-country' ) ) )
    ' . $current_user->get( 'mepr-address-country' ) .  => ' ',   
    'email' . $current_user->user_email =>' ',
    'username' . $current_user->user_login =>' ',
    'password' . $current_user->user_pass =>' '

    );
    }
    // Генерировать строку POST
    // Эти последние три строки не отправляют мои значения пользователя
    $postdata="";
    foreach($query_vals as $key => $value){ 
$postdata .= $key.'='.urlencode($n=$value).'&';
    }

И строка поста должна соответствовать параметрам, описанным в посте, который таков:

    foreach ( get_user_meta( $user->ID ) as $key => $values ) {
var_dump( $key, $values );
    }

Но, будучи новичком в PHP, я не уверен в синтаксисе кода. Разве мне не нужно определить has_prop, прежде чем я смогу его использовать?

В вашем коде много ошибок. Например, внутри вам нужно объявить global $current_user, а не снаружи. Другая ошибка – вы используете переменную $query_vals снаружи функции, где эта переменная не определена. В любом случае, я бы использовал функцию wp_get_current_user(), которая не должна вызываться до инициализации хука действий.

Например, если вы собираетесь использовать строку POST как данные для Javascript:

add_action( 'wp_enqueue_scripts', 'wpse_scripts' );

function wpse_scripts() {

      $user_fields = wpse_get_current_user_info();
      $postdata = http_build_query( $user_fields );

      wp_localize_script( 'my_script', 'my_script_data', $postdata );

}

function wpse_get_current_user_info() {
      $current_user = wp_get_current_user();
      $current_user_info = array(
                    'firstname' => $current_user->user_firstname,
                    'lastname'  => $current_user->user_lastname,
                    //Добавьте остальную информацию, которая вам нужна
                    //В формате ключ => значение
                   );
      return $current_user_info;
}

Чтобы помочь вам более конкретно, вам следует сказать, где вы собираетесь использовать строку POST и в каком контексте.

Базовый пример отправки данных пользователя на сервер, используя WP HTTP API (Вызовите wpse_send_user_data, когда вам нужно получить тело ответа после отправки данных пользователя стороннему сервису):

function wpse_send_user_data() {

      //Вы должны проверить, нужно ли делать запрос
      //if( $some_control == true ) return;

      $uerdata = wpse_get_current_user_info();

      $args = array( 'method' => 'POST', 'body' => $uerdata );
      $request = wp_remote_request( 'http://www.example.com', $args )

      $response = wp_remote_retrieve_body($request);

      return $response;

}

function wpse_get_current_user_info() {
      $current_user = wp_get_current_user();
      $current_user_info = array(
                    'firstname' => $current_user->user_firstname,
                    'lastname'  => $current_user->user_lastname,
                    //Добавьте остальную информацию, которая вам нужна
                    //В формате ключ => значение
                   );
      return $current_user_info;
}

Я предпочитаю использовать WP HTTP API, но если вы хотите использовать cURL:

function wpse_send_user_data() {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,"http://www.example.com/");
    curl_setopt($ch, CURLOPT_POST, 1);

    // Получить массив информации о пользователе и установить в качестве полей POST
    $uerdata = wpse_get_current_user_info();
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( $uerdata ));

    // получать ответ сервера ...
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $server_output = curl_exec ($ch);

    curl_close ($ch);

    // дальнейшая обработка ....
    if ($server_output == "OK") { ... } else { ... }

}

function wpse_get_current_user_info() {
      $current_user = wp_get_current_user();
      $current_user_info = array(
                    'firstname' => $current_user->user_firstname,
                    'lastname'  => $current_user->user_lastname,
                    //Добавьте остальную информацию, которая вам нужна
                    //В формате ключ => значение
                   );
      return $current_user_info;
}

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

Получение текущего массива пользователя с использованием строки POST в WordPress

Ваша задача заключается в извлечении значений десяти полей текущего пользователя в WordPress и передаче этих значений в строку POST с определёнными названиями меток. Давайте шаг за шагом разберёмся, как это правильно реализовать, соблюдая синтаксис PHP и методологии WordPress.

Основные моменты

  1. Получение текущего пользователя: Мы будем использовать функцию wp_get_current_user(), которая предоставляет объект текущего пользователя.
  2. Создание массива с данными пользователя: Мы соберём необходимые данные в виде ассоциативного массива, где ключами будут названия меток, а значениями — соответствующие поля пользователя.
  3. Формирование строки POST: Для создания строки POST мы воспользуемся функцией http_build_query(), которая преобразует массив в строку формата key=value.

Код

Ниже представлен подробный код для извлечения пользовательских данных и формирования строки POST:

// Получение информации о текущем пользователе
function wpse_get_current_user_info() {
    $current_user = wp_get_current_user(); // Получаем объект текущего пользователя

    // Собираем необходимые поля в массив
    $current_user_info = array(
        'firstname' => $current_user->user_firstname,
        'lastname'  => $current_user->user_lastname,
        'address_one' => $current_user->has_prop('mepr-address-one') ? $current_user->get('mepr-address-one') : '',
        'address_city' => $current_user->has_prop('mepr-address-city') ? $current_user->get('mepr-address-city') : '',
        'address_state' => $current_user->has_prop('mepr-address-state') ? $current_user->get('mepr-address-state') : '',
        'address_zip' => $current_user->has_prop('mepr-address-zip') ? $current_user->get('mepr-address-zip') : '',
        'address_country' => $current_user->has_prop('mepr-address-country') ? $current_user->get('mepr-address-country') : '',
        'email' => $current_user->user_email,
        'username' => $current_user->user_login,
        // Обратите внимание, что поле password не рекомендуется передавать через POST из соображений безопасности
    );

    return $current_user_info; // Возвращаем массив
}

// Отправка данных пользователя через POST-запрос
function wpse_send_user_data() {
    $user_data = wpse_get_current_user_info(); // Получаем массив пользовательских данных
    $args = array(
        'method' => 'POST',
        'body' => $user_data
    );

    // Здесь вы можете определить URL, куда отправляются данные
    $response = wp_remote_post('http://www.example.com', $args);

    // Получаем тело ответа
    return wp_remote_retrieve_body($response);
}

// Пример вызова функции отправки данных
add_action('init', 'wpse_send_user_data'); // Настройка вызова функции при инициализации

Пояснения к коду

  1. Функция wpse_get_current_user_info(): Эта функция собирает информацию о текущем пользователе и возвращает ассоциативный массив с именами полей, которые вы указали.
  2. Проверка свойств пользователя: Используется метод has_prop(), чтобы определить, есть ли пользователь определённое свойство, прежде чем извлекать его с помощью метода get(). Это предотвращает ошибки, если свойство отсутствует.
  3. Отправка данных через wp_remote_post(): Данные отправляются с помощью встроенной функции WordPress, которая позволяет обрабатывать HTTP-запросы. В данном примере вы отправляете данные на указанный URL.

Заключение

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

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

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