Rewards with multiple winners in WordPress

First of all I am new with WordPress and PHP. I want a reward module where I can have multiple categories and for each category multiple winners.

I have achieved that in CI (CodeIgniter) but now wanted to implement the similar stuff in WordPress. Where I can Have one category and that category can have multiple winners with there respective position.And I will be able to perform simple crud functionality.
Any suggestion how can be this model can be implemented in WordPress or if there any plugin is available with somewhat similar functionality?

Read More

Should I create my own plugin for this and for the start I have tried this

 $your_db_name = $wpdb->prefix . 'your_db_name';

// function to create the DB / Options / Defaults                   
function your_plugin_options_install() {
    global $wpdb;
    global $your_db_name;

    // create the ECPT metabox database table
    if($wpdb->get_var("show tables like '$your_db_name'") != $your_db_name) 
    {
        $sql = "CREATE TABLE " . $your_db_name . " (
        `id` mediumint(9) NOT NULL AUTO_INCREMENT,
        `field_1` mediumtext NOT NULL,
        `field_2` tinytext NOT NULL,
        `field_3` tinytext NOT NULL,
        `field_4` tinytext NOT NULL,
        UNIQUE KEY id (id)
        );";

        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
    }

}
// run the install scripts upon plugin activation
register_activation_hook(__FILE__,'your_plugin_options_install');

Any suggestions? Thanks in advance

Related posts

Leave a Reply

1 comment

  1. There’s no need to create a custom database table to do this.

    plugin

    There are good plugins to manage CPTs and Custom Fields that make this easy, but here’s the small plugin outlined above:

    <?php
    /**
     * Plugin Name: (SO) Awards, prizes and winners
     * Plugin URI:  http://stackoverflow.com/q/25936506/1287812
     * Version:     0.1
     * Author:      brasofilo 
     */
    
    class SO_25936506
    {
        private $cpt = 'reward';
    
        public function __construct()
        {
            add_action( 'init', array( $this, 'init' ) );
            add_action( 'save_post', array( $this, 'save' ), 10, 2 );
        }
    
         public function init() {
            $labels = array(
                'name' => _x( 'Rewards', 'post type general name' ),
                'singular_name' => _x( 'Reward', 'post type singular name' ),
                'add_new' => _x( 'Add New', 'reward' ),
                'add_new_item' => __( 'Add New Reward' ),
                'edit_item' => __( 'Edit Reward' ),
                'new_item' => __( 'New Reward' ),
                'all_items' => __( 'All Rewards' ),
                'view_item' => __( 'View Reward' ),
                'search_items' => __( 'Search Rewards' ),
                'not_found' =>  __( 'No rewards found' ),
                'not_found_in_trash' => __( 'No rewards found in Trash' ), 
                'parent_item_colon' => '',
                'menu_name' => __( 'Rewards' )
            );
            $args = array(
                'labels' => $labels,
                'public' => true,
                'publicly_queryable' => true,
                'show_ui' => true, 
                'show_in_menu' => true, 
                'query_var' => true,
                'rewrite' => array( 'slug' => _x( 'reward', 'URL slug' ) ),
                'capability_type' => 'page',
                'has_archive' => true, 
                'hierarchical' => false,
                'menu_position' => null,
                'taxonomies' => array('prize'),
                'supports' => array( 'title', 'editor', 'thumbnail' ),
                'register_meta_box_cb' => array( $this, 'add_metabox' )
            );
            register_post_type( $this->cpt, $args );
    
            register_taxonomy('prize', $this->cpt, array(
                // Hierarchical taxonomy (like categories)
                'hierarchical' => true,
                // This array of options controls the labels displayed in the WordPress Admin UI
                'labels' => array(
                    'name' => _x( 'Prizes', 'taxonomy general name' ),
                    'singular_name' => _x( 'Prize', 'taxonomy singular name' ),
                    'search_items' =>  __( 'Search Prizes' ),
                    'all_items' => __( 'All Prizes' ),
                    'parent_item' => __( 'Parent Prize' ),
                    'parent_item_colon' => __( 'Parent Prize:' ),
                    'edit_item' => __( 'Edit Prize' ),
                    'update_item' => __( 'Update Prize' ),
                    'add_new_item' => __( 'Add New Prize' ),
                    'new_item_name' => __( 'New Prize Name' ),
                    'menu_name' => __( 'Prizes' ),
                ),
                // Control the slugs used for this taxonomy
                'rewrite' => array(
                    'slug' => 'prizes', // 
                    'with_front' => false, 
                    'hierarchical' => true 
                ),
            ));
        }
    
        public function add_metabox()
        {
            add_meta_box( 
                'winners', 
                'Winners', 
                array( $this, 'do_metabox' ), 
                $this->cpt, 
                'normal', 
                'default', 
                array( // to build the custom fields
                    '_winner_gold' => array( 'title'=>'Gold', 'desc' => 'G desc' ),
                    '_winner_silver' => array( 'title'=>'Silver', 'desc' => 'S desc' ),
                    '_winner_bronze' => array( 'title'=>'Bronze', 'desc' => 'B desc' )
                )
            );
        }
    
        // back function of add meta box that displays the meta box in the post edit screen
        public function do_metabox( $post, $box )
        {
            wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_so_25936506' );
            foreach( $box['args'] as $field => $value )
                $this->print_field( $field, $value, $post->ID );
        }
    
        public function print_field( $field, $value, $post_id )
        {
            $post_meta = get_post_meta( $post_id, $field, true);
            $selected = ($post_meta) ? $post_meta : false;
            $users_dd = wp_dropdown_users(array(
                'name' => 'author', 
                'echo'=>false, 
                'name'=>$field, 
                'show_option_none'=>'Select winners'
            ));
            printf(
                '<label>%s: </label>%s <small>%s</small><br/>',
                $value['title'],
                $users_dd,
                $value['desc']
            );
        }
    
        public function save( $post_id, $post_object ) 
        {
            // Verify auto save 
            if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
                return;
    
            // Security
            if ( 
                !isset( $_POST['noncename_so_25936506'] ) 
                || !wp_verify_nonce( $_POST['noncename_so_25936506'], plugin_basename( __FILE__ ) ) 
                )
                return;
    
            if ( $this->cpt !== $post_object->post_type )
                return;
    
            // Process post data
            foreach( array('_winner_gold','_winner_silver','_winner_bronze') as $field )
            {
                if ( isset( $_POST[$field] )  )
                    update_post_meta( $post_id, $field, $_POST[$field] );
                else 
                    delete_post_meta( $post_id, $field );
            }
        }
    }
    new SO_25936506();