¿Cómo muestro un contenido específico del usuario?

3

Tengo un sitio que muestra el contenido solo para usuarios registrados. La mayoría del contenido está disponible para todos los usuarios, pero una parte es específica del usuario (es decir, todos los usuarios tienen esa página, pero cada uno ve un contenido propio que nadie más puede ver). ¿Alguna idea de cómo puedo restringir (y mostrar) contenido específico por usuario específico?

    
pregunta hannit cohen 10.04.2011 - 23:17

4 respuestas

8

Había codificado algo así hace un tiempo atrás y recuerdo que quería subirlo al repositorio de complementos pero nunca tuve el tiempo. Básicamente, agrega un meta box a la pantalla de edición de publicación o página y permite al usuario seleccionar usuarios específicos nombre o roles y luego verifica el uso de the_content filter, así que aquí tienes:

Actualización:

Se acaba de aprobar en el repositorio de complementos de WordPress para que pueda descargarlo Contenido específico del usuario desde allí o desde tu panel y escribí un poco sobre esto aquí .

<?php/*PluginName:UserSpecificContentPluginURI:http://en.bainternet.infoDescription:ThisPluginallowsyoutoselectspecificusersbyusername,orbyrolenamewhocanviewaspecificpostcontentorpagecontent.Version:0.1Author:BainternetAuthorURI:http://en.bainternet.info*//*Definethecustombox*/add_action('add_meta_boxes','User_specific_content_box');/*Addsaboxtothemaincolumnonthecustomposttypeeditscreens*/functionUser_specific_content_box(){add_meta_box('User_specific_content',__('Userspecificcontentbox'),'User_specific_content_box_inner','post');add_meta_box('User_specific_content',__('Userspecificcontentbox'),'User_specific_content_box_inner','post');}/*Printstheboxcontent*/functionUser_specific_content_box_inner(){global$post,$wp_roles;$savedroles=get_post_meta($post->ID,'U_S_C_roles',true);//var_dump($savedroles);$savedusers=get_post_meta($post->ID,'U_S_C_users',true);//var_dump($savedusers);//Usenonceforverificationwp_nonce_field(plugin_basename(__FILE__),'User_specific_content_box_inner');echo__('Selectuserstoshowthiscontentto');echo'<h4>'.__('ByUserRole:').'</h4>';if(!isset($wp_roles))$wp_roles=newWP_Roles();foreach($wp_roles->role_namesas$role=>$name){echo'<inputtype="checkbox" name="U_S_C_roles[]" value="'.$name.'"';
        if (in_array($name,$savedroles)){
            echo ' checked';
        }
        echo '>'.$name.'    ';
    }
    echo '<h4>'.__('By User Name:').'</h4>';
    $blogusers = get_users('blog_id=1&orderby=nicename');
    $usercount = 0;
    foreach ($blogusers as $user) {
        echo '<input type="checkbox" name="U_S_C_users[]" value="'.$user->ID.'"';
        if (in_array($user->ID,$savedusers)){
            echo ' checked';
        }
        echo '>'.$user->display_name.'    ';
        $usercount = $usercount + 1;
        if ($usercount > 5){
            echo '<br/>';
            $usercount = 0;
        }
    }
    echo '<h4>'.__('Content Blocked message:').'</h4>';
    echo '<textarea rows="3" cols="70" name="U_S_C_message" id="U_S_C_message">'.get_post_meta($post->ID, 'U_S_C_message',true).'</textarea><br/>'.__('This message will be shown to anyone who is not on the list above.');
}


/* Save Meta Box */
add_action('save_post', 'User_specific_content_box_inner_save');

/* When the post is saved, saves our custom data */
function User_specific_content_box_inner_save( $post_id ) {
    global $post;
      // verify this came from the our screen and with proper authorization,
      // because save_post can be triggered at other times

      if ( !wp_verify_nonce( $_POST['User_specific_content_box_inner'], plugin_basename(__FILE__) ) )
          return $post_id;

      // verify if this is an auto save routine. 
      // If it is our form has not been submitted, so we dont want to do anything
      if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
          return $post_id;
      // OK, we're authenticated: we need to find and save the data
    $savedroles = get_post_meta($post_id, 'U_S_C_roles',true);
    $savedusers = get_post_meta($post_id, 'U_S_C_users',true);
    if (isset($_POST['U_S_C_roles']) && !empty($_POST['U_S_C_roles'] )){
        foreach ($_POST['U_S_C_roles'] as $role){
            $new_roles[] = $role;
        }
        update_post_meta($post_id, 'U_S_C_roles', $new_roles);
    }else{
        if (count($savedroles) > 0){
             delete_post_meta($post_id, 'U_S_C_roles');
        }
    }
    if (isset($_POST['U_S_C_users']) && !empty($_POST['U_S_C_users'])){
        foreach ($_POST['U_S_C_users'] as $u){
            $new_users[] = $u;
        }
        update_post_meta($post_id, 'U_S_C_users', $new_users);
    }else{
        if (count($savedusers) > 0){
             delete_post_meta($post_id, 'U_S_C_users');
        }
    }
    if (isset($_POST['U_S_C_message'])){
        update_post_meta($post_id,'U_S_C_message', $_POST['U_S_C_message']);
    }
}

add_filter('the_content','User_specific_content_filter');
function User_specific_content_filter($content){
    global $post,$current_user;

    $savedroles = get_post_meta($post->ID, 'U_S_C_roles',true);
    $run_check = 0;
    $savedusers = get_post_meta($post->ID, 'U_S_C_users',true);
    if (!count($savedusers) > 0 && !count($savedroles) > 0 )
        return $content;

    if (isset($savedroles) && !empty($savedroles)){
        foreach ($savedroles as $role){
            if (current_user_can($role)) {
                return $content;
                exit;
            }
        }
        //failed role check
        $run_check = 1;
    }
    if (isset($savedusers) && !empty($savedusers)){
        get_currentuserinfo();
        if (in_array($current_user->ID,$savedusers)){
            return $content;
        }
            //failed both checks
        return get_post_meta($post->ID, 'U_S_C_message',true);
    }
    return $content;
}
?>
    
respondido por el Bainternet 11.04.2011 - 03:47
1

Suponiendo que este contenido es el bucle de publicación habitual:

$current_user = wp_get_current_user();
if(get_the_author_meta('ID') === $current_user->ID):

  // show the content

endif;

Creo que esto solo funciona dentro del bucle.

Si lo necesita fuera del bucle, solo consulte las publicaciones de $current_user->ID :

$query = new WP_Query('author' => $current_user->ID);
    
respondido por el onetrickpony 10.04.2011 - 23:42
1

Además de lo que escribió One Trick Pony, si el propietario del sitio necesita la capacidad de restringir el contenido a cada usuario, puede desarrollar un pequeño cuadro meta personalizado que aparecerá dentro de cada publicación y mostrará las casillas de verificación con los usuarios del sitio y entonces tendrá en su día el post_meta necesario de los usuarios que tienen permiso para el contenido y podría establecer la condición. Si necesita otra forma de controlar el contenido, es mejor que proporcione algunos detalles más específicos sobre cómo debe manejarse esto, de modo que será más fácil pensar en las soluciones adecuadas ...

Buena suerte :)

    
respondido por el Maor Barazany 11.04.2011 - 00:31
0

1er enfoque:

  1. Un método para hacerlo es crear una página individual para cada estudiante y hacer que esta página esté protegida por contraseña. Esa contraseña se le puede dar al estudiante.
  2. Puede permitir comentarios para esa página / publicación para que el estudiante pueda agregar consultas y respuestas.

Segundo enfoque:

  1. Puede usar WP Private Content Plus ( enlace ) y hacer que cada página / publicación sea visible para Sólo usuarios específicos.
  2. Puedes crear cualquier tipo de menú de usuario de administrador.

También puede utilizar la segunda aproximación con la primera para obtener seguridad adicional, aunque es opcional.

    
respondido por el Jai 30.06.2016 - 07:42

Lea otras preguntas en las etiquetas