Come mostrare contenuti specifici per utente?

11 apr 2011, 00:17:04
Visualizzazioni: 13.7K
Voti: 3

Ho un sito che mostra il contenuto solo agli utenti registrati. La maggior parte dei contenuti è disponibile per tutti gli utenti, ma alcuni sono specifici per utente (cioè tutti gli utenti hanno quella pagina, ma ognuno vede solo il proprio contenuto che nessun altro può vedere). Qualche idea su come posso limitare (e visualizzare) contenuti specifici per specifici utenti?

1
Commenti

qual è stata la tua soluzione? Sto cercando qualcosa di simile. Nel mio caso, dietro un sito web con accesso ristretto, un utente verificato deve utilizzare un modulo multipagina che raccoglie tutte le informazioni necessarie e dopo che tutti i dati sono stati raccolti, le informazioni vengono inviate all'amministratore

alex alex
9 set 2014 07:50:11
Tutte le risposte alla domanda 4
3

Avevo codificato qualcosa di simile un po' di tempo fa e ricordo di aver voluto caricarlo nel repository dei plugin ma non ho mai avuto il tempo. In pratica aggiunge un meta box alla schermata di modifica di un post o di una pagina e consente all'utente di selezionare utenti specifici per nome o ruolo e poi verifica utilizzando il filtro the_content, quindi eccolo qui:

Aggiornamento:

È stato appena approvato nel repository dei plugin di WordPress, quindi puoi scaricarlo Contenuto specifico per utente da lì o dalla tua dashboard e ho scritto un po' al riguardo qui.

Descrizione dell'immagine

<?php
/*
Plugin Name: Contenuto Specifico per Utente
Plugin URI: http://en.bainternet.info
Description: Questo plugin ti permette di selezionare utenti specifici per nome utente o per ruolo che possono visualizzare il contenuto di un post o di una pagina specifica.
Version: 0.1
Author: Bainternet
Author URI: http://en.bainternet.info
*/

/* Definisce il box personalizzato */
add_action('add_meta_boxes', 'User_specific_content_box');

/* Aggiunge un box alla colonna principale nelle schermate di modifica dei post type personalizzati */
function User_specific_content_box() {
    add_meta_box('User_specific_content', __( 'Box contenuto specifico per utente'),'User_specific_content_box_inner','post');
    add_meta_box('User_specific_content', __( 'Box contenuto specifico per utente'),'User_specific_content_box_inner','post');
}

/* Stampa il contenuto del box */
function User_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);
    // Usa nonce per la verifica
    wp_nonce_field( plugin_basename(__FILE__), 'User_specific_content_box_inner' );
    echo __('Seleziona gli utenti a cui mostrare questo contenuto');
    echo '<h4>'.__('Per Ruolo Utente:').'</h4>';
    if ( !isset( $wp_roles ) )
        $wp_roles = new WP_Roles();
    foreach ( $wp_roles->role_names as $role => $name ) {
        echo '<input type="checkbox" name="U_S_C_roles[]" value="'.$name.'"';
        if (in_array($name,$savedroles)){
            echo ' checked';
        }
        echo '>'.$name.'    ';
    }
    echo '<h4>'.__('Per Nome Utente:').'</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>'.__('Messaggio di contenuto bloccato:').'</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/>'.__('Questo messaggio verrà mostrato a chiunque non sia nella lista sopra.');
}


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

/* Quando il post viene salvato, salva i nostri dati personalizzati */
function User_specific_content_box_inner_save( $post_id ) {
    global $post;
      // verifica che provenga dalla nostra schermata e con la giusta autorizzazione,
      // perché save_post può essere attivato in altri momenti

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

      // verifica se si tratta di un salvataggio automatico. 
      // Se lo è, il nostro form non è stato inviato, quindi non vogliamo fare nulla
      if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
          return $post_id;
      // OK, siamo autenticati: dobbiamo trovare e salvare i dati
    $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;
            }
        }
        //controllo ruolo fallito
        $run_check = 1;
    }
    if (isset($savedusers) && !empty($savedusers)){
        get_currentuserinfo();
        if (in_array($current_user->ID,$savedusers)){
            return $content;
        }
            //entrambi i controlli falliti
        return get_post_meta($post->ID, 'U_S_C_message',true);
    }
    return $content;
}
?>
11 apr 2011 04:47:55
Commenti

Era esattamente quello che stavo cercando! Volevo solo dirti un enorme grazie, amico!

Cris Cris
30 dic 2011 12:47:42

@Bainternet Un utente ha appena affermato che il tuo plugin non funziona più :)

kaiser kaiser
3 gen 2015 01:02:28

@kaiser cosa posso dire??

Bainternet Bainternet
7 gen 2015 09:30:45
4

Supponendo che questo contenuto sia il solito loop dei post:

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

  // mostra il contenuto

endif;

Penso che questo funzioni solo all'interno del loop.

Se ne hai bisogno al di fuori del loop, puoi semplicemente interrogare i post dell'utente corrente usando $current_user->ID:

$query = new WP_Query('author' => $current_user->ID);
11 apr 2011 00:42:12
Commenti

l'unico problema qui è che non è molto intuitivo per il proprietario del sito impostare i 'permessi' per ogni articolo

hannit cohen hannit cohen
11 apr 2011 00:46:29

allora prova il plugin "Members": http://justintadlock.com/archives/2009/09/17/members-wordpress-plugin è molto più user-friendly...

onetrickpony onetrickpony
11 apr 2011 00:48:52

stavo pensando a questo, solo che ho visto che non viene aggiornato da un po' di tempo. hai idea se funziona ancora?

hannit cohen hannit cohen
11 apr 2011 01:34:06

genera alcuni notice con wp_debug, ma funziona. Lo sto usando per controllare ruoli e capacità

onetrickpony onetrickpony
11 apr 2011 03:14:25
0

Oltre a quanto scritto da One Trick Pony, se il proprietario del sito necessita della possibilità di limitare il contenuto per ogni utente, puoi sviluppare un piccolo meta box personalizzato che apparirà all'interno di ogni articolo e mostrerà delle caselle di controllo con gli utenti del sito. In questo modo avrai nel database i post_meta necessari per gli utenti che hanno il permesso di accedere al contenuto e potrai impostare la condizione.

Se hai bisogno di un altro metodo per controllare il contenuto, è meglio che tu fornisca maggiori dettagli specifici su come questo debba essere gestito e su cosa sia necessario, così sarà più semplice pensare a soluzioni appropriate...

Buona fortuna :)

11 apr 2011 01:31:09
0

1° approccio:

  1. Un metodo per farlo è creare una pagina individuale per ogni studente e impostare questa pagina come protetta da password. La password può essere fornita allo studente.
  2. Puoi abilitare i commenti per quella Pagina/Articolo in modo che lo studente possa aggiungere le proprie domande e ricevere risposte.

2° approccio:

  1. Puoi utilizzare WP Private Content Plus (https://wordpress.org/plugins/wp-private-content-plus/) e rendere ogni pagina/articolo visibile solo a utenti specifici.
  2. Puoi creare qualsiasi tipo di menu utente nell'amministrazione.

Puoi anche combinare il 2° approccio con il 1° per una sicurezza aggiuntiva, anche se è opzionale.

30 giu 2016 08:42:40