Desarrollo area privada con comentarios y avisos por email

Quería una zona privada, para usuarios que al registrarse debían ser aprobados.

En esa zona privada debían verse los mensajes que esos usuarios dejaban en las entradas privadas que subían.

Al crear nuevas entradas de zona privada, debía de llegarles un aviso por email, así como cuando algún administrador respondía a su mensaje.

Instalamos los siguientes plugins:

Content Control – User Access Restriction
New User Approve
Comment Reply Email Notification
WP Mail SMTP
User Roles and Capabilities
Loco translate

Modificamos los siguientes ficheros:

/wp-content/themes/themo/parts/menu/sticky_header.php

/wp-content/themes/themo/functions.php

content/themes/themo/comments.php

/wp-content/themes/themo/templates/cren/notification.php

content/themes/themo/css/style.css

        //*********CUSTOM CODE NATURAL - /wp-content/themes/themo/comments.php*************
		global $wp;
		$current_user = wp_get_current_user();
        $all_users = get_users();
		foreach ($all_users as $user) {
            if (in_array('administrator',$user->roles)){
                $admins[] = $user->ID;//Sacamos todos los id de usuarios admin
            }
        }
        $usuario[] = $current_user->id;
		if (in_array('subscriber',$current_user->roles)){//Si el usuario es suscriptor
			$args = array(//Modificamos argumentos para obtener los comentarios
                'post_id' => get_the_ID(),
				'author__in' => array_merge($usuario,$admins), //El comentario es de suscriptor o del administrador
				'hierarchical' => true, //Para mostrar solo las respuestas, por si el administrador escribe un mensaje sin responder
			);
			$comments = get_comments( $args );
		}
		//FIN CUSTOM CODE NATURAL
//***********************CUSTOM CODE NATURAL*******************************

//Redireccionar a la página de comentarios al loguear si el usuario es suscriptor

function comentariosRedirect(){
	global $wp;
	global $pagenow;
	$current_user = wp_get_current_user();
	$pagina = $pagenow;
	if (in_array('subscriber',$current_user->roles)){//Si el usuario es suscriptor
		if($pagina == 'index.php'){
			//wp_redirect('/wp-admin/edit-comments.php?comment_status=mine&user_id='.$current_user->id);
			wp_redirect('/wp-admin/edit-comments.php');
		}	
	}
 }
 add_action('admin_menu', 'comentariosRedirect');

//Mostrar comentarios solo del usuario logueado en backoffice

 function comentariosUsuario(){
	global $wp;
	global $pagenow;
	$current_user = wp_get_current_user();
	$pagina = $pagenow;

	if (in_array('subscriber',$current_user->roles)){//Si el usuario es suscriptor

		if($pagina == 'edit-comments.php'){//Si está viendo la página de comentarios
			echo "
				<p><img src='https://www.tnu.es/wp-content/uploads/2020/03/tnu-logo.png'></p>
				<h2>Bienvenido a tu Zona privada</h2>
				<p><a href='/categoria/zona-privada/'>Ver todas las Noticias privadas</a></p>
				<h3>Mensajes enviados</h3>
			";
		}
	?>
		<script>//Eliminar comentarios que no sean del usuario
			
			jQuery(window).on('popstate', function(event) {
				alert("pop");
			});
			jQuery.ajax({
				url: window.location.href,
				success: function(){
					var usuario = '<?php echo $current_user->display_name; ?>';//Nombre del usuario que se muestra
					jQuery('#the-comment-list > .comment').each(function(){//Analizamos todos los comentarios
						var comentario = jQuery(this);
						var respuesta = comentario.find('.column-comment > a').text();//Enlace con el nombre de usuario que se muestra
						var autor = comentario.find('.author strong').text();
						if(respuesta.indexOf(usuario) > -1 || autor == usuario){//Si son del usuario, o respuestas del administrador a ese usuario

						}else{
							comentario.remove();
						}
					});
					jQuery('#the-comment-list').addClass('cargado');//Mostramos los comentarios
				}
			});
		</script>
		<style>
			/*Ocultamos todos los elementos del menú que no queremos sean visibles*/
            body .ngg_admin_notice,
			body #the-comment-list:not(.cargado),
			body #adminmenumain,
			body #wp-admin-bar-user-actions > li:not(#wp-admin-bar-logout),
			body #wpfooter,
			body #comments-form .tablenav,
			body #screen-meta-links,
			body li#menu-comments .awaiting-mod,
			body #wpadminbar #wp-admin-bar-root-default > li:not(#wp-admin-bar-site-name),
			body #wpbody-content .error,
			body #wpbody-content .notice,
			body #wpbody-content > .wrap > *:not(#comments-form),
			body.edit-comments-php .post-com-count-wrapper{
				display: none !important;
			}

			body #comments-form .search-box{
				margin-bottom: 25px;
			}

			body #wpwrap > #wpcontent{
				margin-left: 0 !important;
			}
		</style>
	<?php
	}
 }
 add_action('admin_bar_menu', 'comentariosUsuario');

//Cambiar título del backoffice si es suscriptor

 function cambiarTitulo(){
	global $wp;
	$current_user = wp_get_current_user();
	if (in_array('subscriber',$current_user->roles)){//Si el usuario es suscriptor
		return 'Zona privada';
	}
 }

 add_action( 'admin_title', 'cambiarTitulo' );

//Cambiar logo login

 function logoCuston(){
	?>
		<style> 
			h1 a {
				background-image:url('https://www.tnu.es/wp-content/uploads/2020/03/tnu-logo.png')  !important;
				background-size: contain !important;
				width: 229px !important;
				height: 92px !important;
				background-repeat: no-repeat !important;
			}
		</style>;
	<?php
}
add_action('login_head', 'logoCuston');

//Enviar email cuando se publica una entrada
//https://wordpress.stackexchange.com/questions/100272/send-specific-users-an-email-when-posts-are-published
//https://codex.wordpress.org/Post_Status_Transitions

function emailNuevaNoticia($id,$post) {
	global $wp;
	$post_id = $id;
	$idCategoria = 43;

	if(has_category($idCategoria,$post_id)){
		$all_users = get_users();
		foreach ($all_users as $user) {
			if (in_array('subscriber',$user->roles)){//Si el usuario es suscriptor
				$to = $user->user_email;
				$subject = 'Nueva noticia privada: ' . get_the_title($post_id);
		
				$message = '';
                $message .= '<p><img src="https://www.tnu.es/wp-content/uploads/2020/03/tnu-logo.png"></p>';
                $message .= '<h2> Hola '. $user->display_name .',</h2>';
                $message .= '<p>Hemos publicado una nueva noticia en nuestra Zona privada.</p>';
				//$message .= '<p>' . get_the_excerpt($post_id) . '…</p>';
				$message .= '<p><a href="' . get_permalink($post_id) . '"><strong>Ver noticia &raquo;</strong></a></p>';
				$headers = array('Content-Type: text/html; charset=UTF-8');
				wp_mail($to, $subject, $message,$headers );
			}
		}
		unset($user);
	}
}

add_action( 'publish_post', 'emailNuevaNoticia', 10, 2 );

//Excluir entradas de la categoría de zona privada en el widget de la sidebar
//https://www.thewordcracker.com/en-us/how-to-exclude-specific-post-categories-from-the-recent-posts-widget-in-wordrpess/

add_filter('widget_posts_args','modify_widget');

function modify_widget() {
$r = array( 'category__not_in' => '43');
return $r;
}