Posty w wordpressie widoczne tylko dla zalogowanych


Można użyć opcji „chroń ten wpis hasłem”, ale odnosiłoby się to tylko do wybranego wpisu, do tego byłby widoczny co najmniej jego tytuł. W tym przypadku chodzi mi raczej o to, aby wpisy były ukryte całkowicie (bez jakiegokolwiek śladu w postaci choćby tytułu). Niewidoczne ani na stronie głównej, ani po wyszukaniu słowa, czy przeglądaniu kategorii.

Aby to osiągnąć należy do ukrywanego wpisu dodać w „polach użytkownika” (custom fields) pole o nazwie np „private” i wartości „true”. Następnie w pliku index.php zmodyfikować fragment kodu tuż za początkiem pętli wypisującej posty:

<?php while (have_posts()) : the_post();
  $showit = true;
  $private = get_post_custom_values("private");
  if ( isset($private[0]) && $private[0] == 'true' ) {
    if (!is_user_logged_in()) $showit = false;
  }
  if ($showit){
    // tu wypisywanie posta
  } else {
    // a tu co robić jeśli ma zabroniony dostęp, np. nic ;-)
  }
endwhile; ?>

Kod można oczywiście uprościć.

Czasem do wpisu można dostać się naokoło, np poprzez wyniki wyszukiwania. Warto zatem zmodyfikować też dodatkowe pliki z danego motywu (jeśli istnieją), np: single.php, search.php, archive.php itd. (szczegóły tutaj). Jeśli tego nie zrobimy, to w wynikach pokaże się treść (przynajmniej do „read the rest of this entry” jeśli użyliśmy tagu „more”, a zmodyfikowano single.php).

Podobnie należy zmodyfikować pliki /wp-includes/feed-* inaczej posty będą widoczne w RSS itp.

Jest jedna wada tej metody. Wpisy są wprawdzie uryte, jednak liczniki postów widoczne przy kategoriach zdradzają rzeczywistą liczbę.

Polecam też ten link: Making Special, Hidden Categories Separate From Your Home Page and Feed

Komentarze nie są dozwolone.