Dzisiaj jeden z czytelników mojego prywatnego bloga napisał:
Witam, chciałem zapytać czy może spotkał się Pan z rozwiązaniem, które chciałbym zastosować na swojej stronie poetyckiej, opartej na WordPressie. Chciałbym np. na podstronie „Nasza poezja” wyświetlić listę tylko tych autorów, którzy opublikowali coś w tej kategorii. W tej chwili wyświetla mi wszystkich autorów. Starałem się znaleźć jakieś rozwiązanie, ale ciągle gdzieś błądzę, stąd pomyślałem o Panu, może będzie mi Pan wstanie pomóc.
Pewnie moja odpowiedź dla wielu będzie banalna ale postanowiłem opisać dokładnie jak działa rozwiązanie aby opis stał się bardziej edukacyjny – często zwłaszcza na początku zabawy z WordPressem bardzo tego typu wpisów brakuje…
Oto rozwiązanie:
sprawdzić w jakiej jesteśmy kategorii i pobrać jej ID
$cats = get_the_category();
$cat = $cats[0]->term_id;
pobrać wszystkie wpisy z tej kategorii
$cat_posts = get_posts(array('numberposts'=>-1, 'category'=>$cat));
zrobić tablicę autorów, a następnie dla każdego wpisu sprawdzić autora i umieścić go w naszej tablicy (sprawdzając jednocześnie, czy ten autor już tam nie występuje)
$authors = array();
foreach ($cat_posts as $cat_post) :
if (!in_array($cat_post->post_author,$authors)) {
$authors[] = $cat_post->post_author;
}
endforeach;
dla każdego autora znajdującego się w tablicy wyciągnąć jego nazwę (display_name) oraz login (user_login)
foreach ($authors as $author) :
$auth = get_userdata($author)->display_name;
$auth_link = get_userdata($author)->user_login;
nadal w pętli „dla każdego” autora wyświetlić nazwę z odpowiednim linkiem do strony /author/nazwa_autora
echo '';
echo $auth;
echo '
';
zamknąć „dla każdego” (endforeach)
endforeach;
Poniżej cały skrypt, który po ostylowaniu wstawiamy do pliku archive.php, category.php lub pochodnych…
$cats = get_the_category();
$cat = $cats[0]->term_id;
$cat_posts = get_posts(array('numberposts'=>-1, 'category'=>$cat));
$authors = array();
foreach ($cat_posts as $cat_post) :
if (!in_array($cat_post->post_author,$authors)) {
$authors[] = $cat_post->post_author;
}
endforeach;
foreach ($authors as $author) :
$auth = get_userdata($author)->display_name;
$auth_link = get_userdata($author)->user_login;
echo '';
echo $auth;
echo '
';
endforeach;
Czy mieliście podobny problem? albo może istnieje jeszcze prostsze rozwiązanie?
תגובות