#php #wordpress #advanced-custom-fields #custom-post-type #ultimate-member
Вопрос:
Я создал сайт, на котором спортсмены могут зарегистрироваться и создать свою собственную страницу профиля с шаблоном. При регистрации я автоматически создаю пользовательское сообщение (их профиль) и устанавливаю пользователя в качестве автора этого сообщения.
Однако я ни за что на свете не могу указать название поста в качестве имени и фамилии пользователя (теперь автора). Например, если Джон Смит зарегистрируется, я хотел бы, чтобы заголовок поста гласил «Джон Смит«, а пуля была преобразована в спортсмена/джона.смита.
Я использовал $user_info->nickname
на данный момент, но это приводит к тому, что и название, и слизняк читаются как Джон.смит
Это код, который я использую-любые указатели будут очень признательны:
add_action( 'user_register', 'wpse_216921_company_cpt', 10, 1 );
function wpse_216921_company_cpt( $user_id )
{
// Get user info
$user_info = get_userdata( $user_id );
$user_roles = $user_info->roles;
// New code added
$this_user_role = implode(', ', $user_roles );
if ($this_user_role == 'author') {
// Create a new post
$user_post = array(
'post_title' => $user_info->nickname,
'post_status' => 'publish', // <- here is to publish
'post_type' => 'athlete', // <- change to your cpt
'post_author' => $user_info->ID
);
// Insert the post into the database
$post_id = wp_insert_post( $user_post );
}
}
Комментарии:
1. Вы также должны использовать post_name для slug и first_name, фамилия для заголовка сообщения
Ответ №1:
Вы также должны использовать имя поста для слага(джон.смит) и имя,фамилию для заголовка поста, как это:
add_action( 'user_register', 'wpse_216921_company_cpt', 20, 1 );
function wpse_216921_company_cpt( $user_id )
{
// Get user info
$user_info = get_userdata( $user_id );
$user_roles = $user_info->roles;
// New code added
$this_user_role = implode(', ', $user_roles );
if ($this_user_role == 'author') {
$post_title = $user_info->first_name.' '.$user_info->last_name;
$post_title = trim(ucwords($post_title));
$post_slug = preg_replace('/s /', '.', $post_title);
// Create a new post
$user_post = array(
'post_title' => $post_title, //$user_info->display_name,
'post_name' => $post_slug,
'post_status' => 'publish', // <- here is to publish
'post_type' => 'athlete', // <- change to your cpt
'post_author' => $user_info->ID
);
// Insert the post into the database
$post_id = wp_insert_post( $user_post );
}
}
Комментарии:
1. Спасибо, Раджив! К сожалению, я все еще не могу заставить его заголовок отображаться как [имя_файла.фамилия], поэтому я не могу проверить, работает ли ваш фрагмент post_slug (он выглядит хорошо, поэтому я уверен, что это так). Может ли проблема быть в том, что код запускается до того, как фактические метаданные будут сохранены в моей базе данных, и поэтому не получает метаданные first_name и last_name из ключей? Я использую плагин конечной формы регистрации участников, но данные определенно отправляются в мою базу данных, когда создается пользователь.
2. Привет, если вы хотите заголовок, такой как [имя_файла.имя_для], то вам следует изменить/установить/заменить $post_title на $post_slug, потому что в настоящее время ваш заголовок сообщения($post_title) является [имя_файла_для_файла] и заголовок сообщения($post_slug), такой как [имя_файла.имя_для_файла], замените $post_title на $post_slug в массиве $user_post() следующим образом : $user_post = массив( ‘post_title’ => $post_slug, ‘post_name’ =>> $post_title ) и попробуйте это
Ответ №2:
Вы можете использовать имя и фамилию, как показано ниже:
add_action( 'user_register', 'wpse_216921_company_cpt', 10, 1 );
function wpse_216921_company_cpt( $user_id )
{
// Get user info
$user_info = get_userdata( $user_id );
$user_roles = $user_info->roles;
// New code added
$this_user_role = implode(', ', $user_roles );
$first_name = $user_info->first_name;
$last_name = $user_info->last_name;
if ($this_user_role == 'author') {
// Create a new post
$user_post = array(
'post_title' => $first_name . ' ' . $last_name,
'post_status' => 'publish', // <- here is to publish
'post_type' => 'athlete', // <- change to your cpt
'post_author' => $user_info->ID
);
// Insert the post into the database
$post_id = wp_insert_post( $user_post );
}
}
Не проверено, но это должно сработать.
Комментарии:
1. Большое спасибо за быстрый ответ @akhtarujjaman! Это то, что я изначально думал, сработает, но заголовок поста продолжает устанавливаться как «Без названия», когда я использую этот код. Я проверил базу данных, и там есть метазначения «имя» и «фамилия», но по какой-то причине они не используются для заполнения заголовка.
Ответ №3:
Спасибо за помощь, ребята. Оказалось, что это проблема с конечным участником, и мне нужно было использовать um_registration_complete.
Окончательное решение, которое сработало, заключается в следующем:
//Create Custom Post Type on registration
add_action( 'um_registration_complete', 'wpse_216921_company_cpt', 10, 1 );
function wpse_216921_company_cpt( $user_id )
{
// Get user info
$user_info = get_userdata( $user_id );
$user_roles = $user_info->roles;
// New code added
$this_user_role = implode(', ', $user_roles );
if ($this_user_role == 'author') {
$post_title = $user_info->first_name.' '.$user_info->last_name;
$post_title = trim(ucwords($post_title));
$post_slug = preg_replace('/s /', '.', $post_title);
// Create a new post
$user_post = array(
'post_title' => $post_title, //$user_info->display_name,
'post_name' => $post_slug,
'post_status' => 'publish', // <- here is to publish
'post_type' => 'athlete', // <- change to your cpt
'post_author' => $user_info->ID
);
// Insert the post into the database
$post_id = wp_insert_post( $user_post );
}
}