Mam niestandardowy typ postu, który obsługuje wpisy chronione hasłem. W niestandardowej pętli przy użyciu nowego obiektu WP_Query, chcę wykluczyć te posty chronione hasłem z wyników. Jakie argumenty muszę ustawić, aby to zrobić? Używam najnowszej wersji WordPressa 3.2.1.Jak wykluczyć posty chronione hasłem w pętli WordPress
Odpowiedz
Czy przyjrzał się post_status argument z WP_Query?
"Protected" wydaje się być dobrym kandydatem do wykluczenia.
Edit: Ok, wydaje się, że będziesz musiał zmodyfikować gdzie klauzula, aby osiągnąć to, co chcesz:
// Create a new filtering function that will add our where clause to the query
function filter_where($where = '') {
// exclude password protected
$where .= " AND post_password = ''";
return $where;
}
if (!is_single()) { add_filter('posts_where', 'filter_where'); }
$query = new WP_Query($query_string);
remove_filter('posts_where', 'filter_where');
Tak, widziałem to, ale wydaje się, że ten argument jest dozwolony dla statusu postu, tj. Post_status = protected będzie obejmować wszystkie chronione statusy, chyba że używam go niepoprawnie? – Kevin
Po prostu spekulujesz, ale czy próbowałeś post_status = -protected? – vzwick
Tak, próbowałem, ale to też nie działa – Kevin
Po trochę gra o, znalazłem filtr posts_where trochę zbyt nachalny w stosunku do tego, co chciałem zrobić, więc wymyśliłem alternatywę. W ramach akcji "save_post", którą dodałem do mojego niestandardowego typu postu, dodałem następującą logikę;
To, co się dzieje, to przytrzymanie tablicy identyfikatorów postów w tabeli opcji, w której post jest chroniony hasłem. Następnie w zapytaniu niestandardowym po prostu przekazałem tę tablicę jako część opcji, np. post__not_in
$query = new WP_Query(array(
'post_type' => 'my_custom_post_type',
'post__not_in' => get_option('__protected_posts'),
));
W ten sposób mogę wykluczyć chronione posty ze strony archiwum, ale nadal zezwalać użytkownikowi na wylądowanie na stronie chronionej hasłem w celu wprowadzenia hasła.
to działało dla mnie tam, gdzie "lepsze" rozwiązanie poniżej nie miało miejsca. Używałem get_posts, więc był to najprostszy sposób na wykonanie zadania. –
Bardzo podoba mi się podejście Kevina, ale dostosować ją nieco:
// Create a new filtering function that will add our where clause to the query
function my_password_post_filter($where = '') {
// Make sure this only applies to loops/feeds on the frontend
if (!is_single() && !is_admin()) {
// exclude password protected
$where .= " AND post_password = ''";
}
return $where;
}
add_filter('posts_where', 'my_password_post_filter');
To zadziałało dla mnie, dzięki Peter. –
Dzięki, @Peter Chester, dodałem także to wykluczenie do linków 'Next Post' i' Previous Post' (zobacz moją odpowiedź). – Nelu
Każdy pomysł, jak zastosować to, aby przekazywać chronione posty w niestandardowych pętlach na jednym? –
Oprócz @Peter Chester odpowiedź:
Można też wykluczyć chronione hasłem posty z Previous Post
i Next Post
linki, jeśli masz je na dole strony postu.
Aby to zrobić, można dodać wykluczenie do haków get_previous_post_where
i get_next_post_where
.
add_filter('get_previous_post_where', 'my_theme_mod_adjacent');
add_filter('get_next_post_where', 'my_theme_mod_adjacent');
function my_theme_mod_adjacent($where) {
return $where . " AND p.post_password = ''";
}
Podchodzę do tego pytania, gdzie szukałem tego samego. Jednak czytałem WP_Query dokument linia po linii, a następnie znaleźć bardzo proste rozwiązanie i że jest po prostu dodać 'has_password' => false
argumentu do zapytania $args
Więc kod będzie jak poniżej ...
$args = [
'post_type' => [ 'post', 'page' ],
'posts_per_page' => 3,
'post__not_in' => get_option('sticky_posts'),
'has_password' => FALSE
];
Tutaj można zobacz Wykluczam posty Sticky
i Password Protected
.
Wszystkie odpowiedzi sugerujące używanie SQL są niebezpieczne i nie powinny być używane od wersji WordPress 3.9+. Jest to wbudowane w sposób wykluczający posty chronione hasłem. – sauv0168
- 1. Wordpress pętla Pokaż graniczne posty
- 2. Wordpress Display Wszystkie posty
- 3. Chronione hasłem pliki PPT za pomocą Perl
- 4. Publikuje posty Wordpress w Google Plus?
- 5. Wordpress Przyklejony Posty z niestandardowymi typami Postów
- 6. zamawiania posty Wordpress na podstawie kategorii nadrzędnej
- 7. Wordpress posty w widoku siatki z Bootstrap 3 kolumny
- 8. Wordpress wyklucza zduplikowane $ sticky post z pętli
- 9. Uwierzytelnianie-chronione nuget.server
- 10. Zapytanie SQL, aby wyodrębnić wszystkie posty WordPress z kategoriami
- 11. Pobierz wordpress posty z polecanymi obrazu za pośrednictwem SQL
- 12. WordPress: Sprawdź, czy istnieją wcześniejsze posty przed wyświetleniem linku
- 13. Pokaż ostatni post według daty z niestandardowej taksonomii w pętli WordPress.
- 14. chronione wewnętrzne
- 15. Klasy chronione w .NET
- 16. Jak mogę wyświetlać posty z innych stron w instalacji na wielu serwerach WordPress?
- 17. Jak usunąć .htaccess ochronę hasłem z podkatalogu
- 18. Hasło chronione PDF za pomocą Ghostscript
- 19. Wordpress: pobierz numer indeksu current_post w pętli WHILE
- 20. respond_to? i chronione metody
- 21. chronione/publiczne Klasy wewnętrzne
- 22. szyderstwo chronione metoda
- 23. C chronione # dostęp pole
- 24. Jak grupować posty według daty na stronie głównej w Jekyll?
- 25. Jak sformatować datę wpisu w Wordpress?
- 26. Jak sortować wiele wartości pól niestandardowych wordpress?
- 27. Przesłanianie hasłem
- 28. Pętla Wordpress: pobierz bieżącą liczbę postów wewnątrz pętli
- 29. System szablonów w CodeIgniter takich jak wordpress?
- 30. Jak włączyć hashowanie hasłem (SSHA) w openLDAP
Od WordPress 3.9 istnieje również zapytanie "has_password", które można użyć. –