Ну вроде ничего не перепутал.
Делаю сайт для своего детского кружка, весь учет оплат и посещений веду в гугл таблицах. Я очень удобным и хитрым образом всё организовал там и меня устраивает. А сейчас появилась идея выводить на сайт wordpress в ЛК пользователю остаток его баланса из таблицы 🙂
Может через google script получится ?
Я вывел диапазон ячеек в скрипте, вот что получилось
А вот дальше как этот скрипт вывести в wordpress в ЛК wp-recall пользователя не понимаю.
Да же хотя бы просто в обычную запись вывести не понимаю
Еще была попытка делать это через сервисы интеграций zapier.com и viasocket.com. Но знаний не хватает как это сделать
В основном все плагины для того, что бы собирать с форм заявок типа "contact form 7" в google sheet, а мне надо наоборот из google sheet в wordpress.
Я пошел в сторону шорткодов после подсказки выше от Otshelnik-FM и нашел плагин шорткодов "Google Docs Shortcode"
Всё замечательно работает, но он выводит целую таблицу, а надо вывести только ячейку. Да же не то, что бы ячейку, а значение которое записано в ней)
Вот это значение отлично получается выводить в google script
А вот как сделать шорткод, который обращался бы этому скрипту, наверняка уже кто-то это ранее делал
evgeniy.shestakov сказал(а)
Всё замечательно работает, но он выводит целую таблицу, а надо вывести только ячейку. Да же не то, что бы ячейку, а значение которое записано в ней)
Придется бубен взять в руки)) Создать таблицу еще одну, в ней только одну ячейку, которая будет получать данные из основной таблицы и ее у же выводить на сайте))
Garry!
Спасибо огромное, я чуть в штаны не нассал от счастья когда заработало, выводится! Плагин рабочий!
Осталось только это придумать как выводить определенному пользователю свою ячейку)
Т.е. это же надо будет не во вкладках личного кабинета плагина WP-recall выводить, т.к. во всех учетных записях в ЛК будет один и тот же шорткод с значением одной и той же ячейки...
Можно добавлять произвольные поля пользователям, но как в это поле выводить шорткод...
Otshelnik-Fm сказал(а)
Почитайте как в вордпресс написать свой шорткод. Оформите вывод своей таблицы в шорткоде. И посмотрев видео в документацииВы не можете просматривать опубликованные ссылки"Менеджер вкладок личного кабинета" - там можно вписывать шорткоды
Спасибо за помощь!
Вопрос по видео: пользователю добавили поле город и meta_key: gorod 51
Затем во вкладке вывелся город Саратов.
Саратов пользователю где прописали ? Можно ли как-то вместо Саратов указать шорткод ?
Ну вот по-этому и надо добавить пользователям произвольное поле, в которое можно добавлять шорткод. Т.е. каждому мользователю можно будет добавить свой шорткод в метаполе.
Вот что я для этого нашёл:
Есть такая статья, где описываются функции для добавления, обновления и удаления мета полей для пользователей
И есть вот такая функция update_user_meta($user_id, ‘custom_field_name’, ‘shortcode’);
Осталось только всё это сделать)
я так понимаю файл, который отвечает за метаполя пользователей при добавлении mysite/wp-admin/user-new.php
Помогите правильно добавить эту функцию
evgeniy.shestakov сказал(а)
Ну вот по-этому и надо добавить пользователям произвольное поле, в которое можно добавлять шорткод
В произвольное поле добавляются данные. Их же надо получить и обработать откуда то, потом вычислить в чьем кабинете находимся и выдать уже нужное.
Во вторых можно воспользоватся фукционалом плагина по полям https://codeseller.ru/?s=%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5+%D0%BF%D0%BE%D0%BB%D1%8F
Пока я просто не понимаю механизма. Как если нету данных, а о данных с другого сайта, документа, вп ничего не знает, они появляются в момент открытия страницы. Их нет в базе вп и он не сможет их обработать.
Или у вас уже есть какой то механизм, который парсит данные из таблиц гугла в базу вп и там уже раскладывает по мета полям конкретного пользователя и тд?
Наверняка можно все это упростить и не задействовать гугло сервисы, все сделать внутри сайта и таблицы или другой вариант занесения и хранения данных и уже внутри сайта всем оперировать.
Вот же плагин который вы советовали
Он ведь работает, я смог вывести значение ячейки из google sheet в шорткод эотго плагина, а шорт код вывел в пост. И при изменении в таблице данных, эти данные автоматически меняются в посте, всё работает.
Осталось создать произвольное поле для пользователей, в которое можно будет добавлять шорткод при добавлении нового пользователя (у каждого пользователя будет свой шорткод)
вот в этот файл user-new.php
надо добавить функцию add_user_meta($user_id, ‘custom_field_name’, ‘shortcode’);
/**
* New User Administration Screen.
*
* @package WordPress
* @subpackage Administration
*/
/** WordPress Administration Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
if ( is_multisite() ) {
if ( ! current_user_can( 'create_users' ) && ! current_user_can( 'promote_users' ) ) {
wp_die(
'' . __( 'You need a higher level of permission.' ) . '' .
'
' . __( 'Sorry, you are not allowed to add users to this network.' ) . '
',
403
);
}
} elseif ( ! current_user_can( 'create_users' ) ) {
wp_die(
'' . __( 'You need a higher level of permission.' ) . '' .
'
' . __( 'Sorry, you are not allowed to create users.' ) . '
',
403
);
}
if ( is_multisite() ) {
add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' );
}
if ( isset($_REQUEST['action']) && 'adduser' == $_REQUEST['action'] ) {
check_admin_referer( 'add-user', '_wpnonce_add-user' );
$user_details = null;
$user_email = wp_unslash( $_REQUEST['email'] );
if ( false !== strpos( $user_email, '@' ) ) {
$user_details = get_user_by( 'email', $user_email );
} else {
if ( current_user_can( 'manage_network_users' ) ) {
$user_details = get_user_by( 'login', $user_email );
} else {
wp_redirect( add_query_arg( array('update' => 'enter_email'), 'user-new.php' ) );
die();
}
}
if ( !$user_details ) {
wp_redirect( add_query_arg( array('update' => 'does_not_exist'), 'user-new.php' ) );
die();
}
if ( ! current_user_can( 'promote_user', $user_details->ID ) ) {
wp_die(
'' . __( 'You need a higher level of permission.' ) . '' .
'
' . __( 'Sorry, you are not allowed to add users to this network.' ) . '
',
403
);
}
// Adding an existing user to this blog
$new_user_email = $user_details->user_email;
$redirect = 'user-new.php';
$username = $user_details->user_login;
$user_id = $user_details->ID;
if ( $username != null && array_key_exists( $blog_id, get_blogs_of_user( $user_id ) ) ) {
$redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' );
} else {
if ( isset( $_POST[ 'noconfirmation' ] ) && current_user_can( 'manage_network_users' ) ) {
$result = add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST[ 'role' ] ) );
if ( ! is_wp_error( $result ) ) {
$redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $user_id ), 'user-new.php' );
} else {
$redirect = add_query_arg( array( 'update' => 'could_not_add' ), 'user-new.php' );
}
} else {
$newuser_key = wp_generate_password( 20, false );
add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) );
$roles = get_editable_roles();
$role = $roles[ $_REQUEST['role'] ];
/**
* Fires immediately after a user is invited to join a site, but before the notification is sent.
*
* @since 4.4.0
*
* @param int $user_id The invited user's ID.
* @param array $role The role of invited user.
* @param string $newuser_key The key of the invitation.
*/
do_action( 'invite_user', $user_id, $role, $newuser_key );
$switched_locale = switch_to_locale( get_user_locale( $user_details ) );
/* translators: 1: Site name, 2: site URL, 3: role, 4: activation URL */
$message = __( 'Hi,
You\'ve been invited to join \'%1$s\' at
%2$s with the role of %3$s.
Please click the following link to confirm the invite:
%4$s' );
wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ) );
if ( $switched_locale ) {
restore_previous_locale();
}
$redirect = add_query_arg( array('update' => 'add'), 'user-new.php' );
}
}
wp_redirect( $redirect );
die();
} elseif ( isset($_REQUEST['action']) && 'createuser' == $_REQUEST['action'] ) {
check_admin_referer( 'create-user', '_wpnonce_create-user' );
if ( ! current_user_can( 'create_users' ) ) {
wp_die(
'' . __( 'You need a higher level of permission.' ) . '' .
'
' . __( 'Sorry, you are not allowed to create users.' ) . '
',
403
);
}
if ( ! is_multisite() ) {
$user_id = edit_user();
if ( is_wp_error( $user_id ) ) {
$add_user_errors = $user_id;
} else {
if ( current_user_can( 'list_users' ) )
$redirect = 'users.php?update=add&id=' . $user_id;
else
$redirect = add_query_arg( 'update', 'add', 'user-new.php' );
wp_redirect( $redirect );
die();
}
} else {
// Adding a new user to this site
$new_user_email = wp_unslash( $_REQUEST['email'] );
$user_details = wpmu_validate_user_signup( $_REQUEST['user_login'], $new_user_email );
if ( is_wp_error( $user_details[ 'errors' ] ) && !empty( $user_details[ 'errors' ]->errors ) ) {
$add_user_errors = $user_details[ 'errors' ];
} else {
/**
* Filters the user_login, also known as the username, before it is added to the site.
*
* @since 2.0.3
*
* @param string $user_login The sanitized username.
*/
$new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) );
if ( isset( $_POST[ 'noconfirmation' ] ) && current_user_can( 'manage_network_users' ) ) {
add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email
add_filter( 'wpmu_welcome_user_notification', '__return_false' ); // Disable welcome email
}
wpmu_signup_user( $new_user_login, $new_user_email, array( 'add_to_blog' => get_current_blog_id(), 'new_role' => $_REQUEST['role'] ) );
if ( isset( $_POST[ 'noconfirmation' ] ) && current_user_can( 'manage_network_users' ) ) {
$key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $new_user_email ) );
$new_user = wpmu_activate_signup( $key );
if ( is_wp_error( $new_user ) ) {
$redirect = add_query_arg( array( 'update' => 'addnoconfirmation' ), 'user-new.php' );
} elseif ( ! is_user_member_of_blog( $new_user['user_id'] ) ) {
$redirect = add_query_arg( array( 'update' => 'created_could_not_add' ), 'user-new.php' );
} else {
$redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $new_user['user_id'] ), 'user-new.php' );
}
} else {
$redirect = add_query_arg( array('update' => 'newuserconfirmation'), 'user-new.php' );
}
wp_redirect( $redirect );
die();
}
}
}
$title = __('Add New User');
$parent_file = 'users.php';
$do_both = false;
if ( is_multisite() && current_user_can('promote_users') && current_user_can('create_users') )
$do_both = true;
$help = '
' . __('To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom.') . '
';
if ( is_multisite() ) {
$help .= '
' . __('Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users.') . '
' .
'
' . __('New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you don’t want the user to receive a welcome email.') . '
';
} else {
$help .= '
' . __('New users are automatically assigned a password, which they can change after logging in. You can view or edit the assigned password by clicking the Show Password button. The username cannot be changed once the user has been added.') . '
' .
'
' . __('By default, new users will receive an email letting them know they’ve been added as a user for your site. This email will also contain a password reset link. Uncheck the box if you don’t want to send the new user a welcome email.') . '
';
}
$help .= '
' . __('Remember to click the Add New User button at the bottom of this screen when you are finished.') . '
';
get_current_screen()->add_help_tab( array(
'id' => 'overview',
'title' => __('Overview'),
'content' => $help,
) );
get_current_screen()->add_help_tab( array(
'id' => 'user-roles',
'title' => __('User Roles'),
'content' => '
' . __('Here is a basic overview of the different user roles and the permissions associated with each one:') . '
' .
'' .
'' . __('Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.') . '' .
'' . __('Contributors can write and manage their posts but not publish posts or upload media files.') . '' .
'' . __('Authors can publish and manage their own posts, and are able to upload files.') . '' .
'' . __('Editors can publish posts, manage posts as well as manage other people’s posts, etc.') . '' .
'' . __('Administrators have access to all the administration features.') . '' .
''
) );
get_current_screen()->set_help_sidebar(
'
' . __('For more information:') . '
' .
'
' . __('
') . '
' .
'
' . __('
') . '
'
);
wp_enqueue_script('wp-ajax-response');
wp_enqueue_script( 'user-profile' );
/**
* Filters whether to enable user auto-complete for non-super admins in Multisite.
*
* @since 3.4.0
*
* @param bool $enable Whether to enable auto-complete for non-super admins. Default false.
*/
if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' )
&& ( current_user_can( 'manage_network_users' ) || apply_filters( 'autocomplete_users_for_site_admins', false ) )
) {
wp_enqueue_script( 'user-suggest' );
}
require_once( ABSPATH . 'wp-admin/admin-header.php' );
if ( isset($_GET['update']) ) {
$messages = array();
if ( is_multisite() ) {
$edit_link = '';
if ( ( isset( $_GET['user_id'] ) ) ) {
$user_id_new = absint( $_GET['user_id'] );
if ( $user_id_new ) {
$edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) );
}
}
switch ( $_GET['update'] ) {
case "newuserconfirmation":
$messages[] = __('Invitation email sent to new user. A confirmation link must be clicked before their account is created.');
break;
case "add":
$messages[] = __('Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.');
break;
case "addnoconfirmation":
if ( empty( $edit_link ) ) {
$messages[] = __( 'User has been added to your site.' );
} else {
/* translators: %s: edit page url */
$messages[] = sprintf( __( 'User has been added to your site.
' ), $edit_link );
}
break;
case "addexisting":
$messages[] = __('That user is already a member of this site.');
break;
case "could_not_add":
$add_user_errors = new WP_Error( 'could_not_add', __( 'That user could not be added to this site.' ) );
break;
case "created_could_not_add":
$add_user_errors = new WP_Error( 'created_could_not_add', __( 'User has been created, but could not be added to this site.' ) );
break;
case "does_not_exist":
$add_user_errors = new WP_Error( 'does_not_exist', __( 'The requested user does not exist.' ) );
break;
case "enter_email":
$add_user_errors = new WP_Error( 'enter_email', __( 'Please enter a valid email address.' ) );
break;
}
} else {
if ( 'add' == $_GET['update'] )
$messages[] = __('User added.');
}
}
?>
get_error_messages() as $err )
echo "$err\n";
?>
<?php endif;
if ( ! empty( $messages ) ) {
foreach ( $messages as $msg )
echo '
' . $msg . '
';
} ?>
get_error_messages() as $message )
echo "
$message
";
?>
<?php
if ( is_multisite() && current_user_can( 'promote_users' ) ) {
if ( $do_both )
echo '' . __( 'Add Existing User' ) . '';
if ( ! current_user_can( 'manage_network_users' ) ) {
echo '
' . __( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '
';
$label = __('Email');
$type = 'email';
} else {
echo '
' . __( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '
';
$label = __('Email or Username');
$type = 'text';
}
?>
<form method="post" name="adduser" id="adduser" class="validate" novalidate="novalidate">
<input name="email" type="" id="adduser-email" class="wp-suggest-user" value="" />
'addusersub' ) ); ?>
<?php
} // is_multisite()
if ( current_user_can( 'create_users') ) {
if ( $do_both )
echo '' . __( 'Add New User' ) . '';
?>
<form method="post" name="createuser" id="createuser" class="validate" novalidate="novalidate">
<input name="user_login" type="text" id="user_login" value="" aria-required="true" autocapitalize="none" autocorrect="off" maxlength="60" />
<input name="email" type="email" id="email" value="" />
<input name="first_name" type="text" id="first_name" value="" />
<input name="last_name" type="text" id="last_name" value="" />
<input name="url" type="url" id="url" class="code" value="" />
<input type="password" name="pass1" id="pass1" class="regular-text" autocomplete="off" data-reveal="1" data-pw="" aria-describedby="pass-strength-result" />
<button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="">
<button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="">
<input type="checkbox" name="send_user_notification" id="send_user_notification" value="1" />
<input type="checkbox" name="noconfirmation" id="noconfirmation" value="1" />
'createusersub' ) ); ?>
function add_user_meta($user_id, $meta_key, $meta_value, $unique = false) {
return add_metadata('user', $user_id, $meta_key, $meta_value, $unique);
}
<?php
include( ABSPATH . 'wp-admin/admin-footer.php' );
или не в этот...
Не в этот, точнее ни в какой файл ядра никогда и ничего не добавляется.
Вам нужно написать свою функцию, которая будет содержать все, что вам нужно.
Вам нужен массив данных по каждому пользователю, откуда то данные должны появится в нем.
Потом уже вывести данные в кабинете и в зависимости от чей это кабинет, выводить его данные.
Ваш шорткод выводит данные с другого сайта, по этому их просто нет на сайте.
Отсюда остается иметь столько шорткодов, сколько у вас пользователей и уже по названию шорткода как то их автоматически раскладывать по юзерам.
В общем дальше писать не могу, а то мне в голову лезут очень бредовые идеи по ночам, я уже вижу хаос и матрицу))
Как проще сделать я выше написал.
Возможно, кто то сможет объять мысль вашу и дать ответ, я не понимаю как получить и обработать данные с другого сайта, не имея этих данных в базе сайта.
Или уже голова к ночи не соображает))
Я думаю пора прекращать оффтоп.
Если у вас вопрос по работе и особенностям работы плагина таблиц - то стоит его задавать на форуме поддержки плагина. Его автор наиболее полно и точно вам расскажет о его особенностях работы.
Здесь тема по предложениям к плагину. Предложение увидели. Какие-то ответы дали.
Если у вас вопрос касающийся разработки и кастомизации WP-Recall - задавайте его в соответствующем разделе форума
но там мы подсказываем общее направление куда смотреть. В любом случае реализация за вами. Или вы можете обратиться к разработчикам через задания
или через фриланс поискать исполнителя