Get tags for current user

时间:2015-01-25 作者:user3501587

如何获取用户标签列表,我使用以下内容获取所有标签的列表:

<?php $tags = get_tags(); ?>

<?php if (isset($tags)): ?>
    <ul>

        <?php foreach ($tags as $tag): ?>
            <li><?php echo $tag->name; ?></li>
        <?php endforeach ?>

    </ul>
<?php endif ?>
这将返回我的wordpress页面上所有已使用标签的列表。

我的问题是:我如何才能只获得分配给当前登录用户编写的帖子的标签?

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

当前登录的用户\\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

结束

相关推荐

如何写入wp-USERS表

我正在尝试修改一个登录插件,让新用户在注册时输入要在网站上显示的显示名称。我知道显示名称位于数据库的wp users表中,但无法对其进行写入。Edit<?php function wps_pro_login_registration_errors( $errors ) { if ( empty( $_POST[\'first_name\'] ) ) $errors->add( \'empty_first_name\', \'<st