web-dev-qa-db-fra.com

Comment définir une page d'accueil individuelle pour chaque utilisateur?

Je souhaite donner à mes utilisateurs la possibilité de personnaliser la page d'accueil du site. Par exemple, si quelqu'un n'est pas connecté, seules les catégories par défaut apparaissent.

Une fois que quelqu'un crée un compte et se connecte, il/elle a la possibilité de ' ajouter/suivre ' plusieurs catégories et sujets ( tags ) et Résultats de la recherche. Ces nouveaux messages seront ensuite ajoutés au flux sur la page d'accueil qu'ils verront.

J'ai beaucoup cherché des tutoriels et des plugins, mais je n'ai pas trouvé beaucoup. Il existe un thème de prime, bien que ce type de a cette fonction.

Surveillance des catégories Pressboard vous permet de définir une page d'accueil individuelle pour chaque utilisateur: activez simplement la surveillance des catégories afin que les utilisateurs puissent choisir eux-mêmes les sujets à charger.
( http://freetotry.me/pressboard/ -> bouton de configuration en haut à droite)

Je veux reproduire quelque chose de similaire à ce qui précède. Mais en y réfléchissant, je ne sais pas quelle serait la meilleure approche.

  • en ajoutant des variables à l’url (http://codex.wordpress.org/Function_Reference/add_query_arg) et enregistrez le résultat quelque part. Et peut-être utiliser jQuery pour "normaliser" l'emplacement par la suite.
  • Activez les flux RSS pour chaque balise, résultat de recherche et catégorie, auxquels les utilisateurs peuvent s'abonner. Stockez ces valeurs de flux et construisez leur page d'accueil à partir de ces flux.
  • Ajoutez les catégories/tags, etc. à leur profil utilisateur à suivre/ne plus suivre, sauvegardez ces données et ajustez la publication de la requête.
  • Une autre manière?

Est-ce que quelqu'un sait comment créer une page d'accueil personnalisée pour chaque utilisateur?

1
user18144

Trouver et combiner du code qui semble fonctionner pour les catégories. Donc, laisser le code si quelqu'un d'autre rencontre le même problème. Pour référence. - Filtrez toutes les requêtes avec une taxonomie spécifique - Ajout de données de profil utilisateur personnalisées en fonction de catégories

Ce qui suit permet à un utilisateur de choisir des catégories sur ce profil, après quoi la page d'accueil permettra d'afficher ses catégories sélectionnées.

//create the user category fields
add_action( 'show_user_profile', 'add_user_categories' );
add_action( 'edit_user_profile', 'add_user_categories' );

function add_user_categories($user ){
    ?>
    <table class="form-table">
    <tr>
        <th><label for="user_categories"><?php _e("User categories"); ?></label></th>
        <td>
            <?php
                $data = get_the_author_meta( 'user_categories', $user->ID );
                $args = array( 'hide_empty' =>0, 'taxonomy'=> 'category');
                $categories=  get_categories($args);
                if ($categories){
                    foreach ( $categories as $category ){ 
                        if(in_array($category->term_id,(array)$data)) {
                            $selected = 'checked="checked""';
                        } else {
                            $selected = '';
                        }
                        echo '<input name="user_categories[]" value="'.$category->term_id.'" '.$selected.' type="checkbox"/>'.$category->name.'<br/>';
                    }
                }
            ?>
        </td>
    </tr>
    </table>
    <?php
}

//save the user category fields 
add_action( 'personal_options_update', 'save_user_categories' );
add_action( 'edit_user_profile_update', 'save_user_categories' );

function save_user_categories( $user_id ){
    if ( !current_user_can( 'edit_user', $user_id ) ) { return false; }
    update_usermeta( $user_id, 'user_categories', $_POST['user_categories'] );
}

function my_get_posts( $query ) {
    // we only need to modify the query for logged in users
    if ( !is_user_logged_in() ) return;
    $current_user = wp_get_current_user();
    // assuming that the users interest is stored as user_categories meta key
    $user_categories = get_user_meta( $current_user->ID, 'user_categories', true );
    $query->set( 'tax_query', array(
        array(
            'taxonomy' => 'category',
            'field' =>  'id',
            'terms' => $user_categories
        )
    ));
    return $query;
}
add_filter( 'pre_get_posts', 'my_get_posts' );
2
user18144