Cargando publicaciones asociadas solo al usuario que ha iniciado sesión en la página de publicaciones recientes

4

Queridos capitanes de WordPress,

Me he topado con un problema y estoy buscando ayuda.

Lo que estoy tratando de crear es un portal de clientes donde el usuario conectado solo verá las publicaciones asociadas a su nombre de usuario. Sería genial si esto pudiera funcionar en la página de publicaciones recientes (o en el índice ... La página que un usuario puede ver primero cuando inició sesión, con todas las publicaciones recientes). No tengo ninguna página estática, además de una página de contacto (en caso de que esto importe).

Parece una solución muy fácil, pero he probado todos los complementos que logré encontrar. Por ejemplo, uno de los complementos que probé en 'Contenido específico del usuario', pero esto no es exactamente lo que estoy buscando, ya que bloquea el contenido solo cuando se hace clic en la publicación (para abrir la publicación real). Lo que estoy buscando es una forma de mostrar solo las publicaciones accesibles para el usuario que ha iniciado sesión en la página principal.

Solo hay un autor: el administrador, y hay muchos usuarios (clientes, configurados como suscriptores) que solo deben ver las publicaciones individuales asignadas a su nombre de usuario individual. ¿Cuál es la forma más fácil de hacer esto? ¿Quizás solo podría consultar las publicaciones que están en la categoría del usuario? (He publicado cada publicación en la categoría que lleva el nombre del cliente). Espero que esto aclare mi problema y lo que estoy tratando de lograr.

¡No dude en solicitar más información si no está lo suficientemente claro!

Gracias de antemano!

    
pregunta Alex Broere 01.09.2015 - 13:02

1 respuesta

5

Debería poder obtener el ID de usuario registrado actual y luego usar pre_get_posts para modificar la consulta principal en la página de inicio / blog para mostrar solo las publicaciones de ese usuario específico. Según tengo entendido, está hablando específicamente de autores.

Es posible que también desee comprobar las capacidades del usuario, así como los suscriptores simples no verán ninguna publicación en el blog / página principal, ya que no pueden crear publicaciones.

Una acción pre_get_posts muy simple se verá así: ( NOTA: Lo siguiente no está probado)

add_action( 'pre_get_posts', function ( $q )
{    
    if ( is_user_logged_in() ) { // First check if we have a logged in user before doing anything
        if (    $q->is_home() // Only targets the main page, home page
             && $q->is_main_query() // Only targets the main query
        ) {
            // Get the current logged in user
            $current_logged_in_user = wp_get_current_user();

            // Set the logged in user ID as value to the author parameter
            $q->set( 'author', $current_logged_in_user->ID );
        }
    }    
});

EDITAR

De los comentarios, parece que cada usuario tiene una categoría con el mismo nombre y esta categoría específica se adjunta a una publicación

Para adaptarse a esto, deberá hacer lo siguiente

  • Como arriba, obtenga el usuario actual registrado

  • A continuación, deberá utilizar la información del usuario actual que coincidirá con la categoría. Por ejemplo, y como ejemplo, si 'display_name' == 'category name' , entonces, si el nombre para mostrar del usuario es Jane Doe , entonces el nombre de la categoría asignado al nombre también se llamará Jane Doe

  • En el ejemplo anterior, necesitamos obtener la categoría por nombre para que podamos obtener el ID de categoría. Usaremos get_term_by() que se puede usar con taxonomías integradas como category o taxonomías personalizadas

  • Luego podemos seguir adelante y hacer lo mismo que en la respuesta original

Puedes hacer algo como esto; ( He comentado el código para que puedas entenderlo y seguirlo mejor )

add_action( 'pre_get_posts', function ( $q )
{    
    if ( is_user_logged_in() ) { // First check if we have a logged in user before doing anything
        if (    $q->is_home() // Only targets the main page, home page
             && $q->is_main_query() // Only targets the main query
        ) {
            // Get the current logged in user
            $current_logged_in_user = wp_get_current_user();
            /**
             * We will now get the term/category object from the user display_name
             * You will need to make sure if this corresponds with your term/category
             * If not, use the correct info to match
             */
            $term = get_term_by( 
                'name', // We will get our term by name as term name == user display_name. Change as needed
                $current_logged_in_user->display_name, // Our value to look for will be user display_name
                'category' // The taxonomy the term belongs to. category is the build in taxonomy
            );
            if ( $term ) { // Only filter the main query if we actually have a term with the desired name
                $q->set( 'cat', $term->term_id ); // Filter the posts to only show posts from the desired category
            }
        }
    }    
});
    
respondido por el Pieter Goosen 01.09.2015 - 14:19

Lea otras preguntas en las etiquetas