当前登录的用户\\WP_User
可以通过以下方式检索对象/实例:
$user = get_current_user();
有一个用于获取ID的快捷API包装器:
$user_id = get_current_user_id();
$wpdb
WP“DBAL”基本上使用$wpdb
作为DBAL/数据库抽象层。它有很多公共方法和一些更高级的包装器,以方便访问。一个是get_posts_by_author_sql()
:
var_dump( get_posts_by_author_sql( \'post\', true, get_current_user_id() ) );
# Result:
string \'WHERE post_author = 1 AND post_type = \'post\' AND (post_status = \'publish\' OR post_status = \'private\')\' (length=101)
如果您只想公开帖子,请使用第4个参数并将其设置为
true
.
下一步是构建完整的查询:
$sql = "select {$wpdb->posts}.id from {$wpdb->posts} ".get_posts_by_author_sql( \'post\', true, get_current_user_id() );
现在你可以把它栓在
$wpdb
查询不要忘记只有条件地打开调试模式。另外,不要将调试添加到实时站点,因为静态缓存的站点可能会在相当长的一段时间内向公众打印您的DB凭据。
/** @var \\wpdb $wpdb */
global $wpdb;
if (
defined( \'WP_DEBUG\' ) and WP_DEBUG
and defined( \'WP_DEBUG_DISPLAY\' ) and WP_DEBUG_DISPLAY
)
$wpdb->show_errors();
$posts = $wpdb->get_results( $sql );
// Filter out only the post IDs and build an array from the result:
$posts = wp_list_pluck( $posts, \'id\' );
现在我们只需要取标签。然后,我们构建一个新的数组并收集按post ID排序的标记。这可能会导致重复的标记。如果你不想这样,你必须实现一个不同的排序和获取机制。这并不难,因为你可以根据
object_id
属性,实际上它只是post ID。
$tags = [];
foreach ( $posts as $post_id )
$tags[ $post_id ] = get_the_tags( $post_id );
var_dump( $tags );
请记住,在PHP v5之前。4您将需要
array()
而不是短数组语法
[]
.
结果如下所示,您将得到完整的术语对象。
array (size=13)
167 =>
array (size=16)
50 =>
object(stdClass)[50]
public \'term_id\' => int 50
public \'name\' => string \'8BIT\' (length=4)
public \'slug\' => string \'8bit\' (length=4)
public \'term_group\' => int 0
public \'term_taxonomy_id\' => int 50
public \'taxonomy\' => string \'post_tag\' (length=8)
public \'description\' => string \'Tags posts about 8BIT.\' (length=22)
public \'parent\' => int 0
public \'count\' => int 1
public \'object_id\' => int 167
public \'filter\' => string \'raw\' (length=3)
51 =>
object(stdClass)[10]
public \'term_id\' => int 51
public \'name\' => string \'Articles\' (length=8)
public \'slug\' => string \'articles\' (length=8)
public \'term_group\' => int 0
...
帖子数量要获取当前登录用户写的帖子数量,请使用:
$count = count_user_posts( get_current_user_id() );
// Will return an integer