Cari tahu apakah pengguna yang masuk bukan pelanggan

8

Apakah ada tag kondisional yang akan memungkinkan saya untuk menampilkan konten tertentu hanya jika pengguna BUKAN pelanggan?

Nasir Zia
sumber

Jawaban:

9
<?php
global $current_user; // Use global
get_currentuserinfo(); // Make sure global is set, if not set it.
if ( ! user_can( $current_user, "subscriber" ) ) // Check user object has not got subscriber role
    echo 'User is a not Subscriber';
else
    echo 'User is a Subscriber';
?>
Scott
sumber
15

Cara yang bahkan lebih sederhana, daripada yang ditunjukkan @Brady adalah penggunaannya current_user_can:

if ( current_user_can( 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again!";

MU

Ada juga yang setara untuk instalasi MU, bernama current_user_can_for_blog:

global $blog_id;
if ( current_user_can_for_blog( $blog_id 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again on this blog!";

Dibalik tirai

Ketika melihat sumber fungsi untuk instalasi tunggal atau MU , maka Anda akan melihat, bahwa keduanya pada dasarnya bergantung wp_get_current_user()dan kemudian melakukan pemeriksaan has_cap. Sekarang jika Anda ingin melihat, dari mana asal topi, maka WP_Userkelas / objek masuk ke dalam permainan.

Anggota lain dari set ini

Lalu ada juga author_can( $GLOBALS['post'], 'capability' );. Semua fungsi tersebut berada di dalam ~/wp-includes/capabilitiestepat di bawah satu sama lain.

Kapan menggunakan apa?

Sekarang, di mana perbedaan antara current_user_can(_FOR_BLOG)dan user_can?

  • user_can()adalah yang lebih baru (sejak 3.1), tetapi membutuhkan pengguna sebagai objek. Jadi Anda dapat menggunakannya dalam kasus, di mana Anda tidak ingin menargetkan pengguna saat ini, tetapi beberapa pengguna.
  • current_user_can_*() sudah jelas.
  • author_can()memungkinkan Anda untuk memeriksa kemampuan terhadap objek posting. Objek ini hanya tersedia untuk posting, yang sudah ada dalam DB. Jadi itu terutama untuk mengizinkan / menolak akses ke fitur posting tertentu.
kaisar
sumber
1
Saya merasa ini perlu diperbarui, karena: Jangan memberikan nama peran ke current_user_can (), karena ini tidak dijamin berfungsi dengan benar (lihat # 22624 ). dari current_user_can()halaman codex, AFAIK tidak berubah.
Nicolai
@ialocin Anda dapat memperbarui itu jika Anda mau (ini sudah 2 tahun + lebih tua). Anda pada dasarnya benar. Di sisi lain peran ditambahkan sebagai kemampuan juga;)
kaiser
1
Saya kira ini seharusnya cukup untuk komentar / pembaruan, selain saya malas ... juga;)
Nicolai
-3

Apakah ini yang Anda maksud?

global $userdata;
get_currentuserinfo();
if ( $userdata->user_level != 0 )//check user level by level ID
{
  echo 'User is a not Subscriber';
}
else
{
  echo 'User is a Subscriber';
}

Rincian lebih lanjut tentang ID untuk tingkat yang berbeda: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Ada juga fungsi current_user_can (), yang memungkinkan Anda menunjukkan kemampuan khusus untuk lebih banyak fleksibilitas. http://codex.wordpress.org/Function_Reference/current_user_can

Astaga
sumber
3
Jangan gunakan level pengguna ... Berikut ini apa kata codex tentang hal itu:To maintain backwards compatibility with plugins that still use the user levels system (although this is very much discouraged), the default Roles in WordPress also include Capabilities that correspond to these levels. User Levels were finally deprecated in version 3.0.
Scott