Replies
- Tosin on November 19, 2023 at 12:24 pm in reply to: [Resolved] Attribute post on account deletion in buddypress #50888
Hi Brajesh
I finally got it to work with this code, kindly review
I really think this would help with buddyblog when multiple authors delete their account, lots of 404 errors would be prevented
Also note that the ghostwriter account is just a non active account used to preserve useful content from deleted accounts.
function reassign_posts_on_user_deletion_to_ghostwriter($user_id) { // Check if the deleted user is not the target user (466526) if ($user_id !== 466526) { $args = array( 'post_type' => 'post', 'author' => $user_id, // Posts authored by the deleted user 'posts_per_page' => -1, // Get all posts 'fields' => 'ids', // Retrieve only post IDs 'post_status' => 'publish',// Only published posts ); $posts = get_posts($args); // Reassign published posts to user with ID 466526 foreach ($posts as $post_id) { $post_status = get_post_status($post_id); if ($post_status === 'publish') { wp_update_post(array( 'ID' => $post_id, 'post_author' => 466526, )); } } } } add_action('bp_core_pre_delete_account', 'reassign_posts_on_user_deletion_to_ghostwriter', 10, 1);
- Tosin on November 17, 2023 at 3:14 pm in reply to: Discussion on dealing with buddypress inactive users or dead profiles #50886
I don’t want to give up on this so im trying another approach below
// change the role of inactive members over 1 year to ghost member function update_site_ghost_members() { // Check if it's the activity directory page and the user is an admin if (bp_is_activity_directory() && current_user_can('administrator')) { $last_run_timestamp = get_user_meta(0, 'last_ghost_member_role_update', true); // Check if a month (2592000 seconds = 30 days) has passed since the last run if (!$last_run_timestamp || (time() - $last_run_timestamp) >= 2592000) { // Get users with specific roles (e.g., 'contributor' and 'subscriber') $users = get_users(array( 'fields' => 'ID', 'role__in' => array('contributor', 'subscriber'), )); foreach ($users as $user_id) { // Check user's last activity using BuddyPress function $last_activity = bp_get_user_last_activity($user_id); // Calculate time difference $inactive_time = strtotime('now') - strtotime($last_activity); // If inactive for more than one year (31536000 seconds = 1 year) if ($inactive_time > 31536000) { // Assign 'Ghost Member' role to the user $user = new WP_User($user_id); $user->add_role('ghost_member'); } } // Update the timestamp to indicate the code ran update_user_meta(0, 'last_ghost_member_role_update', time()); } } } add_action('template_redirect', 'update_site_ghost_members');
running get_users would be awesome in batches
Will this code work
/** * Custom function to count user posts and cache the result using transients */ function custom_count_user_posts($user_id) { $post_count = get_transient('custom_user_post_count_' . $user_id); if (false === $post_count) { $post_count = count_user_posts($user_id); set_transient('custom_user_post_count_' . $user_id, $post_count); } return $post_count; } /** BuddyPress Auto Friendship Pro + BuddyPress Featured Members autofollow. */ function auto_follow_on_welcome_page_load() { // Check if the current page slug matches 'welcome' if (is_page('welcome')) { if (!function_exists('bp_follow_start_following')) { return; } $user = wp_get_current_user(); // Check if the user has no last activity and hasn't already performed the follow action if (empty(bp_get_user_last_activity($user->ID)) && !get_user_meta($user->ID, 'has_followed_featured_users', true)) { global $wpdb; $featured_user_ids = $wpdb->get_col( $wpdb->prepare( " SELECT user_id FROM {$wpdb->usermeta} INNER JOIN {$wpdb->users} ON {$wpdb->usermeta}.user_id = {$wpdb->users}.ID WHERE {$wpdb->usermeta}.meta_key = %s AND {$wpdb->usermeta}.meta_value = %s AND {$wpdb->users}.user_status = %d ", '_is_featured', '1', 0 ) ); $users_more_than_2_posts = array(); foreach ($featured_user_ids as $featured_user_id) { $post_count = custom_count_user_posts($featured_user_id); if ($post_count > 2) { $users_more_than_2_posts[] = $featured_user_id; } } $total_featured_users = count($users_more_than_2_posts); $selected_user_ids = $users_more_than_2_posts; if ($total_featured_users > 10) { shuffle($users_more_than_2_posts); $selected_user_ids = array_slice($users_more_than_2_posts, 0, 9); } else if ($total_featured_users > 5) { shuffle($users_more_than_2_posts); $selected_user_ids = array_slice($users_more_than_2_posts, 0, 6); } else if ($total_featured_users < 5) { shuffle($users_more_than_2_posts); $selected_user_ids = array_slice($users_more_than_2_posts, 0, 3); } foreach ($selected_user_ids as $featured_user_id) { bp_follow_start_following(array( 'leader_id' => $featured_user_id, 'follower_id' => $user->ID, )); } // Set a user meta flag to indicate that the follow action has been performed update_user_meta($user->ID, 'has_followed_featured_users', true); } } } add_action('template_redirect', 'auto_follow_on_welcome_page_load');
- Tosin on November 14, 2023 at 8:51 pm in reply to: [Resolved] How to disable new user welcome email for admins #50877
I found another solution below
function disable_admin_new_user_registration_email( $wp_new_user_notification_email_admin, $user, $blogname ) { //Stop wp_mail() from working add_filter( 'pre_wp_mail', '__return_false' ); //Return an unchanged value from this filter return $wp_new_user_notification_email_admin; } add_filter( 'wp_new_user_notification_email_admin', 'disable_admin_new_user_registration_email', 10, 3 );
Hello Brajesh
Have you been able to test this plugin and see how if affects buddypress performance
Thanks
- Tosin on November 13, 2023 at 2:07 pm in reply to: [Resolved] How to disable new user welcome email for admins #50861
After all the stress there is something so simple
add_filter('wp_new_user_notification_email', '__return_false');
- Tosin on November 11, 2023 at 9:12 pm in reply to: [Resolved] How to disable new user welcome email for admins #50854
This code seemed to work
// Disable new user registration email in WordPress for admin users only function disable_send_new_user_notifications($user_id, $notify = 'user') { // Check if user role is administrator $user_role = get_user_meta($user_id, 'wp_capabilities', true); if (isset($user_role['administrator'])) { // User is an administrator, skip sending notification return; } if (empty($notify) || 'admin' === $notify) { return; } elseif ('both' === $notify) { // Send new users the email but not the admin. $notify = 'user'; } wp_send_new_user_notifications($user_id, $notify); } // Disable default email notifications add_action('init', function () { remove_action('register_new_user', 'wp_send_new_user_notifications'); remove_action('edit_user_created_user', 'wp_send_new_user_notifications'); // For BuddyPress remove_action('bp_core_activated_user', 'wp_send_new_user_notifications'); // For WooCommerce remove_action('woocommerce_created_customer', 'wp_send_new_user_notifications'); }); // Replace default notifications with custom function add_action('register_new_user', 'disable_send_new_user_notifications'); add_action('edit_user_created_user', 'disable_send_new_user_notifications', 10, 2); // For BuddyPress add_action('bp_core_activated_user', 'disable_send_new_user_notifications'); // For WooCommerce add_action('woocommerce_created_customer', 'disable_send_new_user_notifications');
I have done as you instructed with is_user_loggdin() but now how can I resolve the performance issue with count_user_posts and simplify the code
Thanks
- Tosin on October 30, 2023 at 10:37 am in reply to: Buddyblog pay per post – how to delete pending oreders when draft is deleted #50807
Hello Ravi,
I have added the processing and on-hold but the code did not empty the cart when the unpaid (pending) post was deleted. I aslo tried both empty cart and delete order together with code below
function empty_cart_and_delete_order_on_pending_post_deletion( $post_id ) { $post = get_post($post_id); if ( ! $post ) { return; } if ($post->post_status === 'pending' && $post->post_type === 'post') { if (function_exists('bbl_ppp_get_post_order_id') && function_exists('wc_get_order')) { $order_id = bbl_ppp_get_post_order_id($post_id); if ($order_id) { $order = wc_get_order($order_id); if ($order && in_array($order->get_status(), array('processing', 'on-hold', 'pending', 'draft'))) { // Empty the cart WC()->cart->empty_cart(true); // Delete the pending order $order->delete_order(true); } } } } } add_action('before_delete_post', 'empty_cart_and_delete_order_on_pending_post_deletion');
This also did not work
- Tosin on October 27, 2023 at 10:58 am in reply to: Buddyblog pay per post – how to delete pending oreders when draft is deleted #50796
Gentle reminder sir thanks