我做到了,它按我所希望的那样工作,但我真的不明白它是如何工作的(我想了解这一切背后的原因)。
祈祷和回答another question on WPSE 帮了我很多,我只是用我想实现的功能修改了它。
我将以下代码放入functions.php
:
// Function to allow network users to manually subscribe to the sub-site
function subscribe_to_site()
{
// Check if the user is authenticated.
if (!is_user_logged_in()) {
return;
}
// Check if we have all necessary data.
if (
empty($_POST[\'subscribe_to_site_nonce\']) || empty($_POST[\'subscribe\']) ||
\'Subscribe\' !== $_POST[\'subscribe\']
) {
return;
}
// Verify the nonce.
if (!wp_verify_nonce($_POST[\'subscribe_to_site_nonce\'], \'subscribe-to-site\')) {
return;
}
// Add user to the current blog
add_user_to_blog(get_current_blog_id(), get_current_user_id(), \'subscriber\');
// Redirect back to the previous page.
wp_safe_redirect(wp_get_referer());
exit;
}
add_action(\'template_redirect\', \'subscribe_to_site\');
// Function to allow network users to unsubscribe from the sub-site
function unsubscribe_from_site()
{
// Check if the user is authenticated.
if (!is_user_logged_in()) {
return;
}
// Check if we have all necessary data.
if (
empty($_POST[\'unsubscribe_from_site_nonce\']) || empty($_POST[\'unsubscribe\']) ||
\'Unsubscribe\' !== $_POST[\'unsubscribe\']
) {
return;
}
// Verify the nonce.
if (!wp_verify_nonce($_POST[\'unsubscribe_from_site_nonce\'], \'unsubscribe-from-site\')) {
return;
}
// Remove the user from the current blog
remove_user_from_blog(get_current_user_id());
// Redirect back to the previous page.
wp_safe_redirect(wp_get_referer());
exit;
}
add_action(\'template_redirect\', \'unsubscribe_from_site\');
在我为正在测试的页面/子站点创建的模板文件中(在本地主机安装上),我使用了以下内容:
<?php
global $current_user, $blog_id;
if (!is_user_logged_in())
echo \'You are not logged in<br>\';
elseif (is_user_logged_in() && (!current_user_can(\'read\'))) {
$current_user = wp_get_current_user();
echo \'<div style="direction:ltr;text-align:center">\' . sprintf(__(\'Hi, %s!\'), esc_html($current_user->display_name)) . \'<br>You are logged in, but you are NOT subscribed to this blog.\';
echo \'<form method="post" action="\' . esc_url(home_url()) . \'">
<input name="subscribe" type="submit" id="subscribe-button" value="Subscribe" />\' . wp_nonce_field(\'subscribe-to-site\', \'subscribe_to_site_nonce\') . \'</form></div>\';
} else {
echo \'<div style="direction:ltr;text-align:center">\' . sprintf(__(\'Hi, %s!\'), esc_html($current_user->display_name)) . \'<br>You are subscribed to this blog.\';
echo \'<form method="post" action="\' . esc_url(home_url()) . \'">
<input name="unsubscribe" type="submit" id="unsubscribe-button" value="Unsubscribe" />\' . wp_nonce_field(\'unsubscribe-from-site\', \'unsubscribe_from_site_nonce\') . \'</form></div>\';
}
?>
这两个片段都是受我链接的答案的启发,我留下了原始答案的注释,以防其他人需要相同的功能,并发现它们和我一样有用。
目前,我只在WordPress multisite的本地安装上使用此代码,但我想稍后在实时站点上使用此代码,所以我希望代码可以安全使用。
老实说,我仍然惊讶于它的工作。啊。。。在这样的时刻感到感激。
无论如何,如果你们对如何改进这个答案有任何意见,请分享,因为我是一个初学者,并将感谢你们的帮助和建议。
非常感谢。