• User Attivo

    [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 🙂


  • Community Manager

    Ottimo lavoro Fra_T,

    questo plugin è molto molto utile 😉

    :ciauz:


  • Super User

    il mito ha colpito ancora 🙂


  • User Attivo

    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?


  • Community Manager

    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 🙂


  • User Attivo

    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? 😛


  • Community Manager

    No no, Petro ha capito bene 😄


  • Super User

    e vedrete appena realizza quello che DEVE FARE DA UN PO' 😛 😛