true ) );
}
$labels = array('name'=>'Purohit Assignments','singular_name'=>'Purohit Assignment','menu_name'=>'Purohit Assignments');
$args = array('labels'=>$labels,'public'=>false,'show_ui'=>true,'supports'=>array('title'),'menu_icon'=>'dashicons-calendar-alt');
register_post_type( 'purohit_assignment', $args );
}
add_action('init','pd_init_role_and_cpt');
/* -----------------------
2) Admin: Assign Puja simple page
------------------------*/
function pd_admin_menu_assign() {
add_users_page( 'Assign Puja to Purohit', 'Purohit Assign', 'manage_options', 'pd_assign_puja', 'pd_render_assign_puja_page' );
}
add_action('admin_menu','pd_admin_menu_assign');
function pd_get_purohit_users() {
return get_users( array( 'role' => 'purohit', 'orderby' => 'display_name' ) );
}
function pd_render_assign_puja_page() {
if ( ! current_user_can('manage_options') ) return;
if ( isset($_POST['pd_assign_nonce']) && wp_verify_nonce( $_POST['pd_assign_nonce'], 'pd_assign_action' ) ) {
$purohit_id = intval($_POST['purohit_id']);
$puja_type = sanitize_text_field($_POST['puja_type']);
$date = sanitize_text_field($_POST['puja_date']);
$time = sanitize_text_field($_POST['puja_time']);
$duration = sanitize_text_field($_POST['puja_duration']);
$customer_name = sanitize_text_field($_POST['customer_name']);
$customer_address = sanitize_textarea_field($_POST['customer_address']);
$credit_points = floatval($_POST['credit_points']);
$post_id = wp_insert_post(array('post_type'=>'purohit_assignment','post_title'=>$puja_type.' for '.$customer_name,'post_status'=>'publish'));
if($post_id){
update_post_meta($post_id,'purohit_id',$purohit_id);
update_post_meta($post_id,'puja_type',$puja_type);
update_post_meta($post_id,'puja_date',$date);
update_post_meta($post_id,'puja_time',$time);
update_post_meta($post_id,'puja_duration',$duration);
update_post_meta($post_id,'customer_name',$customer_name);
update_post_meta($post_id,'customer_address',$customer_address);
update_post_meta($post_id,'credit_points',$credit_points);
update_post_meta($post_id,'assignment_status','assigned');
echo '
';
}
}
$purohits = pd_get_purohit_users();
?>
Assign Puja to Purohit
Recent Assignments
| ID | Purohit | Puja | Date | Time | Credits | Status |
'purohit_assignment','posts_per_page'=>20));
foreach($assigns as $a){
$pid = get_post_meta($a->ID,'purohit_id',true);
$pname = $pid ? get_userdata($pid)->display_name : '-';
echo '';
echo '| '.esc_html($a->ID).' | ';
echo ''.esc_html($pname).' | ';
echo ''.esc_html(get_post_meta($a->ID,'puja_type',true)).' | ';
echo ''.esc_html(get_post_meta($a->ID,'puja_date',true)).' | ';
echo ''.esc_html(get_post_meta($a->ID,'puja_time',true)).' | ';
echo ''.esc_html(get_post_meta($a->ID,'credit_points',true)).' | ';
echo ''.esc_html(get_post_meta($a->ID,'assignment_status',true)).' | ';
echo '
';
}
?>
$label){
$new[$key] = $label;
if('dashboard' === $key) $new['purohit-dashboard'] = 'Purohit Dashboard';
}
return $new;
}
add_filter('woocommerce_account_menu_items','pd_add_account_menu_item');
/* -----------------------
4) Endpoint content (My Account)
------------------------*/
function pd_purohit_dashboard_content(){
if(!is_user_logged_in()){ echo '
Please login.
'; return; }
$user_id = get_current_user_id();
$user = wp_get_current_user();
// load usermeta
$age = get_user_meta($user_id,'pd_age',true);
$phone = get_user_meta($user_id,'pd_phone',true);
$experience = get_user_meta($user_id,'pd_experience',true);
$languages = get_user_meta($user_id,'pd_languages',true);
$puja_types = get_user_meta($user_id,'pd_puja_types',true);
$bio = get_user_meta($user_id,'pd_bio',true);
$photo = get_user_meta($user_id,'pd_photo',true);
// compute wallet (sum credits of completed assignments)
$assigns_completed = get_posts(array('post_type'=>'purohit_assignment','meta_query'=>array(
array('key'=>'purohit_id','value'=>$user_id,'compare'=>'='),
array('key'=>'assignment_status','value'=>'completed','compare'=>'=')
),'posts_per_page'=>-1));
$wallet = 0;
foreach($assigns_completed as $a) $wallet += floatval(get_post_meta($a->ID,'credit_points',true));
// output HTML similar to Option A but inside WC My Account
?>
display_name); ?>
'.esc_html($phone).''; ?>
Experience: '.esc_html($experience).' Yrs'; ?>
Assigned Pujas
'purohit_assignment','meta_key'=>'purohit_id','meta_value'=>$user_id,'posts_per_page'=>-1));
if(!$assigned){ echo '
No assignments yet.
'; }
foreach($assigned as $as){
$puja = get_post_meta($as->ID,'puja_type',true);
$date = get_post_meta($as->ID,'puja_date',true);
$time = get_post_meta($as->ID,'puja_time',true);
$cust = get_post_meta($as->ID,'customer_name',true);
$addr = get_post_meta($as->ID,'customer_address',true);
$credits = get_post_meta($as->ID,'credit_points',true);
$status = get_post_meta($as->ID,'assignment_status',true);
echo '
'.esc_html($puja).' ('.esc_html($status).')
';
echo '
Date: '.esc_html($date).' Time: '.esc_html($time).'
';
echo '
Customer: '.esc_html($cust).'
';
echo '
Address: '.nl2br(esc_html($addr)).'
';
echo '
Credit Points: '.esc_html($credits).'
';
}
?>
$uid,'display_name'=>sanitize_text_field($_POST['pd_name'])));
if(isset($_POST['pd_age'])) update_user_meta($uid,'pd_age',sanitize_text_field($_POST['pd_age']));
if(isset($_POST['pd_phone'])) update_user_meta($uid,'pd_phone',sanitize_text_field($_POST['pd_phone']));
if(isset($_POST['pd_experience'])) update_user_meta($uid,'pd_experience',sanitize_text_field($_POST['pd_experience']));
if(isset($_POST['pd_languages'])) update_user_meta($uid,'pd_languages',sanitize_text_field($_POST['pd_languages']));
if(isset($_POST['pd_puja_types'])) update_user_meta($uid,'pd_puja_types',sanitize_text_field($_POST['pd_puja_types']));
if(isset($_POST['pd_bio'])) update_user_meta($uid,'pd_bio',sanitize_textarea_field($_POST['pd_bio']));
if(isset($_POST['pd_photo'])) update_user_meta($uid,'pd_photo',esc_url_raw($_POST['pd_photo']));
wp_send_json_success();
}
add_action('wp_ajax_pd_save_profile','pd_ajax_save_profile');
function pd_ajax_save_settings(){
if(!is_user_logged_in()) wp_send_json_error();
$uid = intval($_POST['user_id']);
if($uid !== get_current_user_id() && ! current_user_can('manage_options')) wp_send_json_error();
update_user_meta($uid,'pd_notify', isset($_POST['pd_notify']) && $_POST['pd_notify'] == 1 ? 1 : 0);
update_user_meta($uid,'pd_show_phone', isset($_POST['pd_show_phone']) && $_POST['pd_show_phone'] == 1 ? 1 : 0);
update_user_meta($uid,'pd_auto_assign', isset($_POST['pd_auto_assign']) && $_POST['pd_auto_assign'] == 1 ? 1 : 0);
wp_send_json_success();
}
add_action('wp_ajax_pd_save_settings','pd_ajax_save_settings');
/* -----------------------
6) Optional: AJAX endpoint to return assignments + wallet for Option A
------------------------*/
function pd_ajax_get_assignments(){
if(!is_user_logged_in()) wp_send_json_error();
$uid = get_current_user_id();
$assigns = get_posts(array('post_type'=>'purohit_assignment','meta_key'=>'purohit_id','meta_value'=>$uid,'posts_per_page'=>-1));
$list = array();
$wallet = 0;
foreach($assigns as $a){
$puja = get_post_meta($a->ID,'puja_type',true);
$date = get_post_meta($a->ID,'puja_date',true);
$time = get_post_meta($a->ID,'puja_time',true);
$cust = get_post_meta($a->ID,'customer_name',true);
$addr = get_post_meta($a->ID,'customer_address',true);
$credits = floatval(get_post_meta($a->ID,'credit_points',true));
$status = get_post_meta($a->ID,'assignment_status',true);
$list[] = array(
'puja_type'=>$puja,
'puja_date'=>$date,
'puja_time'=>$time,
'customer_name'=>$cust,
'customer_address'=>$addr,
'credit_points'=>$credits,
'status'=>$status
);
if($status === 'completed') $wallet += $credits;
}
wp_send_json_success(array('assignments'=>$list,'wallet'=>$wallet));
}
add_action('wp_ajax_pd_get_assignments','pd_ajax_get_assignments');
/* -----------------------
7) Flush rewrite helper (call once or save permalinks)
------------------------*/
function pd_flush_rewrites_helper(){
pd_add_account_endpoint();
flush_rewrite_rules();
}
// call pd_flush_rewrites_helper() once after adding plugin, or just save permalinks manually
/* -----------------------
8) Shortcode for quick link
------------------------*/
function pd_dashboard_link_shortcode(){ return '
My Purohit Dashboard'; }
add_shortcode('purohit_dashboard_link','pd_dashboard_link_shortcode');
?>