Ho un tipo di messaggio personalizzato che supporta voci protette da password. In un ciclo personalizzato utilizzando un nuovo oggetto WP_Query, desidero escludere i post protetti da password dai risultati. Quali argomenti ho bisogno di impostare per fare questo? Sto usando l'ultima versione trunk di WordPress 3.2.1.Come escludere i post protetti da password nel ciclo WordPress
risposta
Hai dato un'occhiata allo post_status argument di WP_Query?
"Protetto" sembra un buon candidato da escludere.
Edit: Va bene, sembra che si dovrà modificare la clausola WHERE per ottenere ciò che si vuole:
// 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');
Sì, l'ho visto, ma sembra che l'argomento sia permissivo dello stato dei post, post_status = protected includerà tutti gli stati protetti, a meno che non lo utilizzi in modo errato? – Kevin
Sto solo speculando, ma hai provato post_status = -protected? – vzwick
Sì, l'ho provato ma non funziona neanche – Kevin
Dopo un po 'di giocare su, ho trovato il filtro posts_where un un po 'troppo invadente per quello che volevo fare, quindi ho trovato un'alternativa. Nell'ambito dell'azione "save_post" che ho allegato per il mio tipo di post personalizzato, ho aggiunto la seguente logica;
$visibility = isset($_POST['visibility']) ? $_POST['visibility'] : '';
$protected = get_option('__protected_posts', array());
if ($visibility === 'password' && !in_array($post->ID, $protected)) {
array_push($protected, $post->ID);
}
if ($visibility === 'public' && in_array($post->ID, $protected)) {
$i = array_search($post->ID, $protected);
unset($protected[$i]);
}
update_option('__protected_posts', $protected);
Ciò che fa è contenere una matrice di post id nella tabella delle opzioni in cui il post è protetto da una password. Quindi, in una query personalizzata, ho semplicemente passato questo array come parte dell'opzione post__not_in
ad es.
$query = new WP_Query(array(
'post_type' => 'my_custom_post_type',
'post__not_in' => get_option('__protected_posts'),
));
questo modo ho potuto escludere i messaggi protetti da una pagina di archivio, ma ancora permettere ad un utente di atterrare sulla pagina protetta da password per inserire la password.
questo ha funzionato per me, dove la soluzione "migliore" di seguito non ha funzionato. stavo usando get_posts quindi questo era davvero il modo più semplice per portare a termine il lavoro. –
Mi piace molto l'approccio di Kevin, ma ho regolato leggermente:
// 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');
Questo ha funzionato alla grande per me, grazie Peter. –
Grazie, @Peter Chester, ho anche aggiunto questa esclusione per i link 'Next Post' e' Previous Post' (vedi la mia risposta). – Nelu
Qualche idea su come applicare questo per passare post protetti in loop personalizzati su un singolo? –
Oltre a @Peter risposta di Chester:
Si consiglia inoltre di escludere i messaggi protetti da password dal Previous Post
e Next Post
collegamenti, se ne hai in fondo alla pagina del tuo post.
Per fare ciò è possibile aggiungere l'esclusione ai ganci get_previous_post_where
e 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 = ''";
}
Vengo a questa domanda in cui stavo cercando lo stesso. Tuttavia, ho letto WP_Query documento riga per riga poi trovato soluzione molto semplice e che è solo per aggiungere 'has_password' => false
argomento alla query $args
Quindi il codice sarà, come di seguito ...
$args = [
'post_type' => [ 'post', 'page' ],
'posts_per_page' => 3,
'post__not_in' => get_option('sticky_posts'),
'has_password' => FALSE
];
Qui puoi vedi Ho escluso i post Sticky
e Password Protected
.
Tutte le risposte che suggeriscono l'uso di SQL sono pericolose e non dovrebbero essere utilizzate a partire da WordPress 3.9+. Questo è il modo integrato di escludere i post protetti da password. – sauv0168
- 1. Mostra l'ultimo post per data da una tassonomia personalizzata nel ciclo WordPress
- 2. Wordpress strip single shortcode da post
- 3. Come decifrare la password generata da wordpress
- 4. Come convertire password di testo di hash password nel wordpress
- 5. Wordpress interrogazione singolo post da lumaca
- 6. Come caricare un modulo PDF protetti da password utilizzando PDFBox
- 7. Come ottenere post lumaca da post in wordpress?
- 8. Creazione di PDF protetti da password in Objective-C
- 9. Funzione di ricerca di Wordpress per cercare solo i post
- 10. Come escludere i jar da aggiungere nel file WAR
- 11. Decomprime file ZIP protetti da password con .NET 4.5
- 12. Convalida il markup dei siti protetti da password con W3C
- 13. File PPT protetti da password che utilizzano Perl
- 14. modulo Python ZipFile estrae protetti da password zip lentamente
- 15. Wordpress ottiene più post da id
- 16. Come condividere i miei post wordpress in instagram
- 17. Ottieni tutti i post dalla tassonomia personalizzata in Wordpress
- 18. Problema Sblocco password Documenti PDF protetti
- 19. Ottieni WordPress Post ID dal titolo post
- 20. Integrare Wordpress Post con Cakephp3
- 21. Wordpress reimpostazione della password hook
- 22. sblocca i file pdf protetti
- 23. rendere la ricerca wordpress solo nel titolo del post
- 24. Escludere nome utente o password da UserChangeForm in Django Auth
- 25. ciclo Wordpress - come contare gli elementi
- 26. Wordpress tipo personalizzato impaginazione post
- 27. Wordpress: ottieni informazioni sull'autore dall'ID post
- 28. Come recuperare i post da un blog WordPress in un'app Android?
- 29. Come escludere da zipgroupfileset?
- 30. Come associare una categoria a un wordpress post?
Da WordPress 3.9 esiste anche un argomento di query 'has_password' che è possibile utilizzare. –