web-dev-qa-db-fra.com

Associer une page à un utilisateur

Nous avons actuellement une configuration dans laquelle n'importe qui peut s'inscrire en tant qu'utilisateur et sa propre "page" est créée manuellement par l'administrateur. Nous avons besoin d’une option de menu qui ressemble à "Voir votre page" et qui dirige un utilisateur vers sa propre page. Je n'arrive pas à comprendre, car il n'y a pas de lien actuel entre l'utilisateur et la page créée manuellement ... des idées?

Merci.

1
Sean Hawkins

J'ai répondu à une question similaire et le même code peut être adapté à ce cas. Cela crée une méta-boîte dans laquelle vous pouvez affecter un utilisateur à une publication/page spécifique, et les informations sont stockées sous la forme d'un champ personnalisé. Ce qui suit peut être mis dans functions.php ou dans un plugin de fonctionnalité (voir: Où mettre mon code: plugin ou functions.php? ):

/* Define the custom box */
add_action( 'add_meta_boxes', 'authors_meta_box_wpse_89213' );

/* Do something with the data entered */
add_action( 'save_post', 'save_postdata_wpse_89213', 10, 2 );

function authors_meta_box_wpse_89213() 
{
    global $current_user;
    if( !current_user_can( 'delete_plugins' ) )
        return;

    add_meta_box(
        'sectionid_wpse_89213',
        __( 'Page of user' ), 
        'authors_box_wpse_89213',
        'page',
        'side',
        'high'

    );
}

function authors_box_wpse_89213() 
{
    global $post;

    $selected_user = get_post_meta( $post->ID, 'users_dropdown', true);
    $users_list = get_users();

    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_wpse_89213' );

    echo '<div class="element">
        <select name="users_dropdown" id="users_dropdown">
        <option value="">- Select -</option>';

    foreach( $users_list as $user ) {
          echo '<option value="'.$user->ID.'" ' . selected( $selected_user, $user->ID, false ) . '>'.$user->data->display_name.'</option>';
    }

    echo '</select></div>';
}

function save_postdata_wpse_89213( $post_id, $post_object ) 
{
    // verify if this is an auto save routine. 
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )  
        return;

    // verify this came from the our screen and with proper authorization,
    if ( !isset( $_POST['noncename_wpse_89213'] ) || !wp_verify_nonce( $_POST['noncename_wpse_89213'], plugin_basename( __FILE__ ) ) )
        return;

    // Correct post type
    if ( isset( $_POST['post_type'] ) && 'page' != $_POST['post_type'] ) 
        return;

    // OK, we're authenticated: we need to find and save the data

    //sanitize user input
    $u_id = ( isset( $_POST['users_dropdown'] ) ) ? intval( $_POST['users_dropdown'] ) : false;

    if( $u_id )
        update_post_meta( $post_id, 'users_dropdown', $_POST['users_dropdown'] );
    else
        delete_post_meta( $post_id, 'users_dropdown' );
}

Avec cela en place, vous pouvez faire quelque chose comme ceci dans un fichier de modèle de thème pour afficher le lien "User Page":

<?php
if( is_user_logged_in() ) 
{
    global $current_user;
    $args = array(
            'post_type' => 'page',
            'numberposts' => 1,
            'meta_key'=>'users_dropdown',
            'meta_value'=>$current_user->ID,
            'meta_compare'=>'='
        );
    $user_page = get_posts( $args );
    if( $user_page )
    {
        $permalink = get_permalink( $user_page[0]->ID );
        echo "<a href='$permalink'>View your page</a>";
    }
}
?>
2
brasofilo

SI vous nommez les pages avec le nom d'utilisateur, par exemple www.site.com/author-page/jhon_doe, vous pouvez essayer quelque chose comme ceci;

<?php
$user =  wp_get_current_user();

$username = $user->user_login;
?>
<a href="http://www.site.com/author-page/<?php echo $username;?>"> View your page</a>

Essayez d’utiliser un champ ou un identifiant unique pour nommer les pages afin que cela fonctionne. Voir plus de wp_get_current_user () pour voir tous les champs disponibles

1
chifliiiii