【问题标题】:Custom post with author带有作者的自定义帖子
【发布时间】:2015-08-28 16:24:09
【问题描述】:

所以对于我的自定义帖子,我需要将用户 ID 放入“作者”参数中,如下所示:

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

例如,我在“Ryan”个人资料页面中。网址如下:

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

如果我在“Steve”个人资料页面,那么 URL 如下:

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

每个用户都有自己的ID

例如,“Ryan”的 ID 为 35,而 Steve 的 ID 为“ID=12”

如果我将 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>

所以,我在“ryan 的页面”中并且能够输出“Ryan”,这意味着我非常接近“提取”用户的 ID。

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

【问题讨论】:

  • 你得到了什么?
  • 我只是获取页面作者(管理员)的帖子,而不是个人资料用户的帖子。
  • 你能帮我输出这个值吗? $nice_url = userpro_get_option('permalink_type');
  • 我得到了“display_name”作为输出 (&lt;?php echo $nice_url = userpro_get_option('permalink_type');?&gt;)
  • 您已经收到$user_id 这是他当前的用户ID 吗?如果是,那么你就完成了..只需在get_user_by('id', $user_id) 中传递这个$user_id,你就会得到 WP_User 对象。

标签: php wordpress


【解决方案1】:

尝试使用:

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']
);

【讨论】:

  • 嗯,“author_name”没有显示任何帖子...(就像它不会生成任何帖子一样)。 :(
  • 如果您为 author_name 硬编码“Ryan”而不是使用参数会怎样?
  • 嗨。所以,我尝试了几件事:1-'author_name' = &gt;'ryan'(或“Ryan”):没有帖子(甚至不是管理员),2-'author_name' = &gt;' ':显示管理员的帖子。 3- 'author' =&gt; '35':显示 Ryan 的帖子。所以看起来只有 ID 号作为“作者”参数有效。你知道我是否可以以某种方式提取配置文件用户的 ID 号吗? (基于 URL 参数)。
  • 我还找到了一些信息(见编辑部分)。我不确定它是否会有所帮助。
  • 我根据您提供的信息添加了一个新答案。
【解决方案2】:

根据我读到的here

global $userpro;

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

试一试。

【讨论】:

  • 成功了!! :D 终于!:D 是的,非常感谢!无法相信它需要多长时间才能正常工作!没有你的帮助是不可能完成的!
  • 谢谢谢谢! :D
【解决方案3】:

如果您尝试在初始代码的 get_user_by(...) 调用中使用 'login' 而不是 'slug' 会怎样?

【讨论】:

【解决方案4】:

根据WP Codex,WP_Query 接受

  • 作者 (int) - 使用作者 ID。
  • author_name (string) - 使用 'user_nicename' - 不是名字

您可以通过以下方式获取用户好听的名称:

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

然后将这个用户id传入$args:

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

希望对你有帮助。

【讨论】:

  • 嗨。感谢您的答复。您能否告诉我如何根据 URL (example.com/?page_id=10&up_username=Ryan) 从配置文件用户名中获取用户 ID(在本例中为“35”)?谢谢。
  • 我添加了“编辑 2”,我非常接近完成这项工作。
【解决方案5】:

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

$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
);

【讨论】:

  • 嗯...刚刚意识到应该是 $user-&gt;ID 带大写字母。 :编辑:
  • 所以,我在上面包含了Edit 2。我越来越近了! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2023-03-30
  • 2022-01-14
  • 2021-06-17
  • 1970-01-01
相关资源
最近更新 更多