it-swarm.com.de

Wie man zufällige Benutzer mit Avataren anzeigt

Ich habe ein wenig eine Funktion angepasst, um eine Anzahl zufälliger Benutzer mit ihren Avataren mit einem Shortcode anzuzeigen. Es funktioniert, aber etwas ist nicht gut. Manchmal wird es mit einem Benutzer weniger angezeigt, als ich möchte (nur eine leere Zeile anstelle des ersten Benutzers), manchmal enthält es den Administrator, obwohl dies nicht der Fall sein sollte. Was ist los mit meinem Code?

add_shortcode( 'random_users', 'display_random_users' );
//Usage: [random_users how_many = 3]

function display_random_users( $atts ) {

    extract(shortcode_atts( array( "how_many" => '' ), $atts ) );

    $args = array(
        'orderby' => 'ID',
        'role' => 'subscriber',
        'fields' => 'ID'
    );

    $users = get_users( $args );
    $users = array_Rand( $users, $how_many );

    foreach ( $users as $userID ) {
        echo '<a href="' . 
            bp_core_get_user_domain( $userID ) . '">' . 
            bp_core_fetch_avatar( array( 'item_id' => $userID ) ) . '<br />' . 
            xprofile_get_field_data( '1', $userID ) . '</a><br />';
    }
}
3
Iurie Malai

Ich bin nicht sicher, warum Ihre Anfrage mehr IDs zurückgibt als erforderlich. Der $args für get_users sieht korrekt aus.

Standardmäßig unterstützt get_users orderby=Rand nicht, Sie können diese Option jedoch überschreiben. Siehe unten:

function random_user_query( &$query )
{
    $query->query_orderby = "ORDER BY Rand()";
}

// Usage: [random_users how_many = 3]
add_shortcode( 'random_users', 'display_random_users' );
function display_random_users( $atts ) {

    shortcode_atts( array( "how_many" => '', ), $atts );

    // Create a function to override the ORDER BY clause
    add_action( 'pre_user_query', 'random_user_query' );

    $users = get_users( array(
        'role'    => 'subscriber',
        'fields'  => 'ID',
        'orderby' => 'Rand',
        'number'  => $atts['how_many'],
    ) );

    foreach ( $users as $userID ) {
        printf( 
            '<a href="%s">%s<br />%s</a><br />',
            bp_core_get_user_domain( $userID ),
            bp_core_fetch_avatar( array( 'item_id' => $userID ) ),
            xprofile_get_field_data( '1', $userID )
        );
    }

    // Remove the hook
    remove_action( 'pre_user_query', 'random_user_query' );
}

Auf diese Weise fragen Sie nur $ how_many Benutzer ab, anstatt alle Benutzer abzufragen und dann $ how_many herauszufiltern.

Ich habe diesen Haken gefunden hier .

5
gdaniel