top of page

Jak wyświetlić autorów piszących w danej kategorii?

Zdjęcie autora: Piotr BartczakPiotr Bartczak

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:

  1. sprawdzić w jakiej jesteśmy kategorii i pobrać jej ID

$cats = get_the_category();
$cat = $cats[0]->term_id;
  1. pobrać wszystkie wpisy z tej kategorii

$cat_posts = get_posts(array('numberposts'=>-1, 'category'=>$cat));
  1. 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;
  1. 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;
  1. nadal w pętli „dla każdego” autora wyświetlić nazwę z odpowiednim linkiem do strony /author/nazwa_autora

  1. 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?

0 wyświetleń0 komentarzy

Ostatnie posty

Zobacz wszystkie

תגובות


bottom of page