問題描述
PHP 新手在這裏,最近決定把一個刺激的小巧的 「隨機作者聚焦」 功能拼湊在我當前的 WordPress 主題。我幾乎完成了,但是我遇到了一些障礙:我需要以某種方式使它成為可能,我的’spotlight’ 只能選擇 1 個帖子或更多的用户。
在我的博客上註冊的所有人都立即成為訂閲者,並且可以直接在首頁上發佈新聞,但大多數內容只是常規的,post-less 會員。
我可以把’spotlight’ 加入我的主題,如果我可以隨機選擇已經提交了 1 個帖子或更多的用户。
以下是到目前為止的代碼:
<section id="sidebarAuthorSpotlight">
<?php $users = get_users(); $id = array_rand( $users, 1 ); $user = $users[$id]; ?>
Hey, have you met...
<h3><a class="" href="http://<?php%20echo%20the_permalink();%20?>"><?php echo $user->display_name; ?></a></h3>
<div><?php echo get_avatar( $user->ID, '60' ); ?></div>
Mods: <?php echo count_user_posts($user->ID); ?>
<?php echo $register_date = date("F d, Y", strtotime(get_the_author_meta('user_registered'))); ?>
<div class="clear"></div>
<ol class="sidebarPosts">
<?php $random_author_box = new WP_Query(array('author' => $user->ID,'posts_per_page' => '5')); if ($random_author_box->have_posts() ) : while ($random_author_box->have_posts() ) : $random_author_box->the_post(); ?>
<li>
<a class="sidebarPostTitle" href="http://<?php%20echo%20the_permalink();%20?>"><?php echo the_title(); ?></a>
</li>
<?php endwhile; endif; ?>
</ol>
<div class="clear"></div>
</section>
理想情況下,我也很想能夠將註冊日期調整為 「X 天前註冊的」,但我很高興在稍後時間過橋。目前,我迫切需要獲得上述代碼,以過濾掉 0 個帖子的用户,並且只能使用 1 個或更多帖子的用户 (或用户) 。
如果有人能幫忙,我會非常感激。作為現在只是開始學習 PHP 基礎的人,我可以坦白地説,在這一點上我已經超越了我的頭腦。我期待着你的迴音,感謝各位的閲讀和看我的困境。禍是我!
編輯:我很傻!我應該可以解釋上面的代碼是做什麼的:上面的代碼確實顯示一個隨機的用户,並在側邊欄中提供一個’spotlight’ 區域,但是即使使用了一個帖子數為 0,它也會拉到用户。如上所述拉取只有 1 位或更多的帖子數的用户,就會是 near-flawless 。
最佳解決方案
你最好的選擇是獲得一個隨機的作者,這是一個用户 ID,所以這裏是一個功能:
function get_random_author_wpa91320(){
global $wpdb;
$id = $wpdb->get_var("
SELECT post_author
FROM $wpdb->posts
WHERE post_type = 'post'
AND post_status = 'publish'
ORDER BY RAND()
LIMIT 1
");
return $id;
}
一旦你的主題的 functions.php 文件中有這個功能,你可以替換這一行:
<?php $users = get_users(); $id = array_rand( $users, 1 ); $user = $users[$id]; ?>
同
<?php $user = get_user_by('id', get_random_author_wpa91320() ); ?>
更新
這是一個修改版本,從數據庫的所有用户至少有發佈和使用 PHP rand 返回一個隨機的 id
function get_random_author_wpa91320_2(){
global $wpdb;
//this will get all users with posts
$ids = $wpdb->get_col("
SELECT DISTINCT post_author
FROM $wpdb->posts
WHERE post_type = 'post'
AND post_status = 'publish'
"
);
return $ids[rand(0,count($ids) -1)];
}
這樣就像你一次對每個用户進行計數,而不是根據他擁有的職位號碼。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。