Salve e a tutti.
Sto scrivendo un plugin per wordpress. Il plugin abilità l'utilizzo di una categoria 'confidential' che viene usata per le comunicazioni interne tra gli sito.
In sostanza:
- le informazioni di categoria confidential appaiono nella home della sezione amministrazione, la cosidetta dashboard (/wp-admin/index.php)
- le informazioni di categoria confidential NON appaiono nella home del bolg (index.php), nè nelle varie pagine (archivi, ecc)
- la categoria 'confidential' non viene mostrata all'esterno delle pagine di amministrazione.
Ho implementato 3 filtri che mi consentono di nascondere le notizie confidential, ma ora ho un problema. I filtri filtrano tutto, così nemmeno gli utenti loggati possono vederle.
Un semplice check dello stato dell'utente non è sufficiente: il mio sito è una rivista digitale, registrata al tribunale, e quindi non mi va che le informazioni interne appaiano nel layout, nemmeno se l'utente è loggato.
Vorrei invece disabilitare il filtro quando la chiamata proviene dall'homepage admin (wp-admin/index.php); in questo modo le notizie interne si vedranno solo in pagine singole, e mai nel layout della rivista.
In sostanza dovrei implementare nel filtro:
SE 1) la chiamata proviene dall'homepage admin
AND
2) stai caricanndo una pagina singola NON filtrare
Mi sapete dire come posso rilevare la condizione 1?
A seguire le funzioni di filtraggio:
Codice PHP:
Filter posts in the Confidential category
function dbmod_filter_cp_join($join) {
global $wpdb;
if (strstr($join,"JOIN $wpdb->post2cat ON (is_posts.ID = is_post2cat.post_id)")) {
return ($join);
} else {
return ($join." LEFT JOIN $wpdb->post2cat ON (is_posts.ID = is_post2cat.post_id)");
}
}
function dbmod_filter_cp_where($where) {
global $confidential_cat, $wpdb;
return ($where." AND $wpdb->post2cat.category_id !='"."$confidential_cat"."'");
}
///
// HOOKING IN
add_filter('posts_where', 'dbmod_filter_cp_where');
add_filter('posts_join','dbmod_filter_cp_join');
?>
NB: le funzioni si attaccano a i cosidetti hook di wordpress; in sostanza permettono di aggiungere parti di testo a una queri nella sezione join (nela caso di posts_join) e nella sezione WHERE (nel caso di posts_where)
Ogni suggerimento è il benvenuto.
Cordialmente,
Davide Benini