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 RestrictionNew User ApproveComment Reply Email NotificationWP Mail SMTPUser Roles and CapabilitiesLoco 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 »</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; }