- Home
- Categorie
- Coding e Sistemistica
- WordPress
- [wordpress plugin] GT Post Approval
-
[wordpress plugin] GT Post Approval
Ciao, vi volevo segnalare il plugin GT Post Approvalascritto per, e usato da, il blog multi autore GT GlobalWerming awareness2007. Gli autori sono gli utenti del forum GT che partecipano al SEO contest ineternescional in the uorld.
**Cosa fa questo plugin?
**Il plugin aggiunge un pulsante approva/rifiuta a fianco di ogni post nel pannello di amministrazione di WordPress (edit > posts). Il pulsante è visibile solo agli editori e agli amministratori.Un post approvato è visibile in ogni sezione del blog (home, archivi, tag - se usate ultimate tag warrior), mentre se il post non è approvato, è visibile solo nell'archivio per autore.
Ecco il codice commentato:
[php]<?php
/*
Plugin Name: GT Post Approvation
Plugin URI:
Description: Aggiunge un pulsante Approva/Rifiuta, visibile solo agli editori, nel pannello <a href='edit.php'>edit > posts</a>. I post non approvati sono visibili solo nell'archivio dell'autore.
Version: b0.3
Author: Francesco Terenzani
Author URI: http://www.terenzani.it/
*/##############################
Installazione
##############################
// All'attivazione del plugin, lancia la funzione per modificare la tabella wp_posts
register_activation_hook(FILE, 'install_gt_post_approvation');// Viene eseguita all'installazione del plugin
// Modifica la tabella wp_posts
function install_gt_post_approvation(){
global $wpdb;
// Se è la prima installazione
if($wpdb->get_var("SHOW COLUMNS FROM $wpdb->posts LIKE 'gt_status'") != 'gt_status'){// Step 1, aggiunge colonna e setta tutti i post come approvati (valore 1) $wpdb->query("ALTER TABLE $wpdb->posts ADD gt_status INT( 1 ) NOT NULL DEFAULT '1'"); // Step 2, cambia il valore di default: i nuovi post dovranno essere approvati manualmente $wpdb->query("ALTER TABLE $wpdb->posts CHANGE gt_status gt_status INT( 1 ) NOT NULL DEFAULT '0'"); }
}
##############################
The_Loop
##############################
// Modifica il campo where della query di WP
add_filter('posts_where', 'show_only_gt_approved');// Modifica la query per mostrare solo i post approvati.
// Niente filtro solo per la pagina degli autori e il pannello di amministrazione
function show_only_gt_approved($where){
if(is_author() || is_admin() || is_single() || is_page())
return $where;
return $where ." AND gt_status = 1 ";
}##############################
Amministazione
##############################
// Modifica il pannello di gestione dei post
if(is_admin()){
add_filter('init', 'gt_admin_status');function gt_admin_status(){ global $wpdb; // Se l'utente è editore o amministratore if(current_user_can('edit_others_posts')){ // Aggiunge la colonna GT Status add_filter('manage_posts_columns', 'gt_column'); // Setta l'array post_ID => gt_status add_filter('the_posts', 'gt_post2status'); // Modifico query sting per renderla "pronta all'uso" nella funzione gt_return_status() if($_SERVER['QUERY_STRING']) $_SERVER['QUERY_STRING'] = '&'.$_SERVER['QUERY_STRING']; // Aggiunge pulsanti per cambiare GT status add_filter('manage_posts_custom_column', 'gt_return_status'); // CSS per enfatizzare il pulsante "Approva" add_filter('admin_head', 'gt_emphasize_to_aprove'); // Modifica lo status nel database (valori 1 -> approvato/0 -> rifiutato) if(isset($_GET['gt_reject']) && is_numeric($_GET['gt_reject'])){ $wpdb->query("UPDATE $wpdb->posts SET gt_status = 0 WHERE ID = $_GET[gt_reject]"); gt_redirect_after_change(); } elseif(isset($_GET['gt_approve']) && is_numeric($_GET['gt_approve'])){ $wpdb->query("UPDATE $wpdb->posts SET gt_status = 1 WHERE ID = $_GET[gt_approve]"); gt_redirect_after_change(); } } }
}
// Aggiunge la colonna GT Status nel pannello di amministrazione dei post
function gt_column($array){
$array['gt_column'] = __('GT Status');
return $array;
}// Aggiunge pulsanti per cambiare GT status nel pannello di amministrazione dei post
function gt_return_status(){
global $id, $post_gt_aproved;// Se il post corrente è approvato if($post_gt_aproved[$id]) echo "<a href='edit.php?gt_reject=$id$_SERVER[QUERY_STRING]' class='edit'>".__('Rifiuta').'</a>'; // Nota: Passo anche la query string per sapere dove redirigere dopo il cambio stato else echo "<a href='edit.php?gt_approve=$id$_SERVER[QUERY_STRING]' class='edit gtaprove'>".__('Approva').'</a>';
}
// Redirect dopo aver cliccato approva/rifiuta
function gt_redirect_after_change(){
header('Location: '.preg_replace("/gt_(?:reject|approve)=[0-9]+[&]?/", '', $_SERVER['REQUEST_URI']));
}// Aggiunge CSS al pannello di amministrazione
function gt_emphasize_to_aprove(){
?>
<style type='text/css'>.gtaprove{background:#adf;font-weight:bold}</style>
<?php
}##############################
Ottimizzazione
##############################
// Crea l'array globale $post_gt_aproved, struttura: id_del_post => gt_status
// Si può usare per sapere lo stato del post senza ulteriori query al database
function gt_post2status($post_query_results){
global $post_gt_aproved;$post_gt_aproved = array(); for($i = 0, $j = count($post_query_results); $i < $j; $i++) $post_gt_aproved[$post_query_results*->ID] = $post_query_results*->gt_status; return $post_query_results;
}
?>
[/php]
Una versione sempre aggiornata del codice la potete trovare qui: GT Post Approval.Se c'è qualcosa che non capite e che vorreste capire... chiedete pure
-
Ottimo lavoro Fra_T,
questo plugin è molto molto utile
-
il mito ha colpito ancora
-
Ragazzi, ora che Fra_T ha realizzato un nuovo plugin per wordpress, avete in mano una vera bomba
fate un post ben documentato direttamente su gt-globalwarming: segnalatelo su wp-plugins.net e su codex.wordpress.org (su entrambi è sufficiente registrarsi e pubblicare). Se riuscite, sengalate anche su bloggingpro.com
Cercate di farlo adottare da più utenti possibile: sono backlink inglesi che valgono letteralmente ORO, senza contare tutti i BL che nel tempo otterrete spontaneamente da altri blogger e/o social bookmarkers (se lo promuovete bene, aspettatevi citazioni da mezzo mondo)
Valutate anche la segnalazione a wordpress-it.it. E' italiano, ma è forte, e ve lo linka per certo! (sempre che non lo trovino da soli... in quel caso, il link è inevitabile. Per farlglielo trovare in fretta se non volete segnalare direttamente, basta scriverlo nel loro forum)
Mi raccomando, anche i commenti nel codice devono essere in inglese... così come la guida passo-passo e le spiegazioni. Mettete anche gli screenshot
Forza, ci sono un sacco di blogger là fuori affamati di plugin e di notizie su wordpress da pubblicare
P.s. Complimenti Francesco, il tuo plugin è una piccola perla... meriterebbe essere incluso direttamente nel nuovo wordpress!
Perchè poi non provi [url=http://wordpress.org/extend/ideas/]a suggerirlo?
-
Ciao Petro,
in effetti Fra_T stava proprio valutando una cosa simile e stiamo cercando di capire come muoverci per promuovere questo Plug-in
Grazie per le dritte
-
Pedro, ma non lo stai sopravalutando un po', come plugin?
Alla fine per il 90% o più dei blogger non è un plugin indispensabile, o no?
-
No no, Petro ha capito bene
-
e vedrete appena realizza quello che DEVE FARE DA UN PO'