自定义帖子与作者

时间:2015-08-28 04:05:03

标签: php wordpress

因此,对于我的自定义帖子,我需要将用户ID放入" author"参数如下图所示:

$args = array(   
    'paged'=>$paged,
    'posts_per_page' => 10,         
    'orderby' => 'date',            
    'order' => 'DESC',
    'author' => ''
);

例如,我在" Ryan"个人资料页。 URL如下:

http://example.com/?page_id=10&up_username=Ryan

如果我在"史蒂夫"个人资料页面,然后网址如下:

http://example.com/?page_id=10&up_username=Steve

每个用户都有自己的ID

例如," Ryan"如果史蒂夫有#34; ID = 12"

,则ID为35

如果我将ID号放在author参数中,那么我会根据ID号获取帖子。

例如,

我放'author' => '35',然后我看到了Ryan的帖子。

现在,我怎样才能使"author"参数自动从个人资料页面中获取ID号?

我得到了一些帮助(如下所示),但它无法正常工作。

// Default to false in case user can't be found.
$user_id  = false;
// Clean username variable before use.
$username = ( ! empty( $_GET['up_username'] ) ) ? sanitize_text_field(  $_GET['up_username'] ) : false;
// Check for user ID.
if ( $username && $user = get_user_by( 'slug', $username ) ) {
    $user_id = $user->ID;
}   
$args = array(         
    'paged'=>$paged,
    'posts_per_page' => 10,         
    'orderby' => 'date',            
    'order' => 'DESC',
    'author' => $user_id    
);

非常感谢任何帮助!

修改

从挖掘中,我找到了一些信息:

function id_to_member( $user_id ) {
    $res = '';
    $nice_url = userpro_get_option('permalink_type');
    $user = get_userdata( $user_id );
    if ($nice_url == 'ID') $res = $user_id;
    if ($nice_url == 'username') $res = $user->user_login;
    if ($nice_url == 'name') {
        $res = $this->get_fullname_by_userid( $user_id );
    }
    if ($nice_url == 'display_name'){
        $res = userpro_profile_data('display_name', $user_id);
    }
    if ($res != '')
        return $res;
   }

 <a href="#" data-up_username="<?php echo $userpro->id_to_member($user_id); ?>" data-template="view" class="userpro-button secondary"><?php _e('View Profile','userpro') ?></a>

编辑2

所以,我意识到个人资料页面是由插件(API:http://userproplugin.com/userpro/docs/api.html

生成的

我使用了以下内容并且能够获取用户数据:

<?php
global  $userpro ; 
$user_id = userpro_get_view_user( get_query_var('up_username') );   
?>

<div class="user">
    <?php echo userpro_profile_data( display_name, $user_id ); ?>  
</div>

所以,我在&#34; ryan的页面&#34;我能够输出&#34; Ryan&#34;,这意味着我非常接近&#34;提取&#34;用户的ID。

现在,我需要做的就是从这个信息中找出ID。

5 个答案:

答案 0 :(得分:2)

尝试使用:

author_name代替author

$args = array(         
    'paged'=>$paged,
    'posts_per_page' => 10,         
    'orderby' => 'date',            
    'order' => 'DESC',
    'author_name' => empty($_GET['up_username'])?false:$_GET['up_username']
);

答案 1 :(得分:1)

如果您在初始代码中尝试在get_user_by(...)调用中使用'login'而非'slug',该怎么办?

答案 2 :(得分:1)

显示名称不必是唯一的,因此这应该搜索具有给定显示名称的所有用户。然后在预先形成分页搜索之前用逗号加入它们:

$usersMatchedWithDisplayName=array();
if(!empty($_GET['up_username']))
{
        $user_query = new WP_User_Query(array(
          'search' => $_GET['up_username'],
          'search_fields' => array('display_name')
        ));
    if ( ! empty( $user_query->results ) )
    {
        foreach ( $user_query->results as $user )
        {
            $usersMatchedWithDisplayName[]=$user->ID;
        }
    }
}

$authors=implode(',',$usersMatchedWithDisplayName);

$args = array(         
    'paged'=>$paged,
    'posts_per_page' => 10,         
    'orderby' => 'date',            
    'order' => 'DESC',
    'author' => $authors
);

答案 3 :(得分:1)

根据WP Codex,WP_Query接受

  • author(int) - 使用作者ID。
  • author_name(string) - 使用&#39; user_nicename&#39; - NOT name

您可以通过以下方式获得用户好名字:

$user = get_user_by( 'id', 35 ); // Ryan ID is 35, TODO: you can get this from query string

然后在$args中传递此用户ID:

$args = array(         
    'paged'=>$paged,
    'posts_per_page' => 10,         
    'orderby' => 'date',            
    'order' => 'DESC',
    'author_name' => $user->user_nicename
);

希望它有所帮助。

答案 4 :(得分:1)

根据我的阅读here

global $userpro;

$args = array(         
    'paged'=>$paged,
    'posts_per_page' => 10,         
    'orderby' => 'date',            
    'order' => 'DESC',
    'author' => $userpro->get_member_by_queryvar_from_id()
);

试一试。