?php if(!defined('ABSPATH'))exit; define('AM_V','1.0.6'); add_action('after_setup_theme',function(){ add_theme_support('title-tag');add_theme_support('post-thumbnails');add_theme_support('automatic-feed-links');add_theme_support('responsive-embeds'); add_theme_support('html5',['search-form','comment-form','comment-list','gallery','caption','style','script']); add_theme_support('custom-logo',['height'=>60,'width'=>300,'flex-width'=>true,'flex-height'=>true]); register_nav_menus(['menu'=>'Menu Kategori (panel menu)','footer'=>'Menu Footer (Informasi)']); add_image_size('am-card',800,450,true); }); add_action('wp_enqueue_scripts',function(){ wp_enqueue_style('am-font','https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;800&display=swap',[],null); wp_enqueue_style('am',get_stylesheet_uri(),[],AM_V); wp_enqueue_script('am',get_template_directory_uri().'/assets/main.js',[],AM_V,true); if(is_singular()&&comments_open()&&get_option('thread_comments'))wp_enqueue_script('comment-reply'); }); add_action('wp_head',function(){if(!has_site_icon())echo '';}); function am_opt($k,$d=''){return get_theme_mod('am_'.$k,$d);} function am_logo(){if(has_custom_logo()){the_custom_logo();return;}echo '';} function am_rp($n){return 'Rp'.number_format((float)$n,0,',','.');} /* ---------- Iklan ---------- */ function am_slots(){return ['atas'=>'Atas halaman, di atas header (320x480 atau 300x600)','header'=>'Header, di bawah menu (970x250 / 320x100)','tengah'=>'Beranda tengah (728x90)','side1'=>'Sidebar atas (300x250)','side2'=>'Sidebar bawah (300x250)','bawah'=>'Beranda bawah (970x250)','a_atas'=>'Artikel: bawah judul (728x90)','a_tengah'=>'Artikel: tengah isi (336x280)','a_bawah'=>'Artikel: setelah isi (728x90)','a_terkait'=>'Artikel: bawah berita terkait (728x90)','a_side'=>'Artikel: sidebar kanan (300x250)'];} function am_ad($s){$sl=am_slots();$code=am_opt('ad_'.$s.'_code');$img=am_opt('ad_'.$s.'_img');$url=am_opt('ad_'.$s.'_url'); if($code){echo '
'.$code.'
';return;} if($img){echo '
Iklan
';return;} if(current_user_can('edit_theme_options'))echo '
Slot iklan: '.esc_html($sl[$s]).'
(hanya terlihat oleh admin. Atur di Tampilan > Sesuaikan > ArusMadura: Iklan)
';} function am_code($v){return current_user_can('unfiltered_html')?$v:wp_kses_post($v);} /* ---------- Customizer ---------- */ add_action('customize_register',function($c){ $c->add_section('am_info',['title'=>'ArusMadura: Info & Sosial','priority'=>30]); $f=[['alamat','Alamat redaksi','textarea'],['email','Email redaksi'],['telp','Telepon redaksi'],['fb','Facebook (URL)'],['ig','Instagram (URL)'],['x','X / Twitter (URL)'],['tt','TikTok (URL)'],['wa','WhatsApp (URL)'],['play','Google Play (URL)'],['appstore','App Store (URL)']]; foreach($f as $x){$cb=in_array($x[0],['alamat'])?'sanitize_textarea_field':(in_array($x[0],['email','telp'])?'sanitize_text_field':'esc_url_raw'); $c->add_setting('am_'.$x[0],['default'=>'','sanitize_callback'=>$cb]);$c->add_control('am_'.$x[0],['section'=>'am_info','label'=>$x[1],'type'=>isset($x[2])?$x[2]:'text']);} $c->add_section('am_ads',['title'=>'ArusMadura: Iklan','priority'=>31,'description'=>'Untuk tiap slot isi KODE IKLAN (mis. Google AdSense) ATAU gambar + link tujuan. Kosongkan untuk menyembunyikan slot.']); foreach(am_slots() as $k=>$l){ $c->add_setting('am_ad_'.$k.'_code',['default'=>'','sanitize_callback'=>'am_code']);$c->add_control('am_ad_'.$k.'_code',['section'=>'am_ads','label'=>$l.': kode iklan','type'=>'textarea']); $c->add_setting('am_ad_'.$k.'_img',['default'=>'','sanitize_callback'=>'esc_url_raw']);$c->add_control(new WP_Customize_Image_Control($c,'am_ad_'.$k.'_img',['section'=>'am_ads','label'=>$l.': gambar banner'])); $c->add_setting('am_ad_'.$k.'_url',['default'=>'','sanitize_callback'=>'esc_url_raw']);$c->add_control('am_ad_'.$k.'_url',['section'=>'am_ads','label'=>$l.': link tujuan','type'=>'url']);} $c->add_section('am_dukung',['title'=>'ArusMadura: Dukung Jurnalisme','priority'=>32]); $d=[['dk_on','Tampilkan bagian Dukung Jurnalisme','checkbox',1,'absint'],['dk_target','Target dukungan (Rp)','number',30000000,'absint'],['dk_judul','Judul','text','Dukung Jurnalisme ArusMadura','sanitize_text_field'],['dk_desc','Deskripsi','textarea','Bantu kami menjaga jurnalisme yang kritis dan terpercaya. Setiap dukungan yang terverifikasi langsung menambah progres.','sanitize_textarea_field'],['dk_rek','Info rekening / e-wallet (satu baris per rekening)','textarea','','sanitize_textarea_field'],['dk_qris','Gambar QRIS','image','','esc_url_raw']]; foreach($d as $x){$c->add_setting('am_'.$x[0],['default'=>$x[3],'sanitize_callback'=>$x[4]]); if($x[2]=='image')$c->add_control(new WP_Customize_Image_Control($c,'am_'.$x[0],['section'=>'am_dukung','label'=>$x[1]]));else $c->add_control('am_'.$x[0],['section'=>'am_dukung','label'=>$x[1],'type'=>$x[2]]);} }); /* ---------- Donasi ---------- */ add_action('init',function(){register_post_type('donasi',['labels'=>['name'=>'Donasi','singular_name'=>'Donasi','add_new_item'=>'Catat donasi','edit_item'=>'Ubah donasi','menu_name'=>'Donasi'],'public'=>false,'show_ui'=>true,'menu_icon'=>'dashicons-heart','supports'=>['title'],'menu_position'=>26]);}); add_action('add_meta_boxes',function(){add_meta_box('am_amt','Nominal donasi','am_amt_box','donasi','normal','high');}); function am_amt_box($p){wp_nonce_field('am_amt','am_amt_n');echo '

Nominal (Rp, angka saja):

Judul = nama donatur. Ubah status ke Terbit (Publish) setelah dana masuk, maka progres di website otomatis bertambah. Status Tertunda (Pending) = belum diverifikasi.

';} add_action('save_post_donasi',function($id){if(!isset($_POST['am_amt_n'])||!wp_verify_nonce($_POST['am_amt_n'],'am_amt')||!current_user_can('edit_post',$id))return;update_post_meta($id,'_am_amount',absint($_POST['am_amount']));}); add_filter('manage_donasi_posts_columns',function($c){$c['am_amount']='Nominal';return $c;}); add_action('manage_donasi_posts_custom_column',function($col,$id){if($col=='am_amount')echo esc_html(am_rp(get_post_meta($id,'_am_amount',true)));},10,2); function am_total(){global $wpdb;return (int)$wpdb->get_var("SELECT SUM(m.meta_value+0) FROM {$wpdb->postmeta} m JOIN {$wpdb->posts} p ON p.ID=m.post_id WHERE p.post_type='donasi' AND p.post_status='publish' AND m.meta_key='_am_amount'");} function am_donasi_submit(){ $back=wp_get_referer()?remove_query_arg('donasi',wp_get_referer()):home_url('/'); if(!isset($_POST['_wpnonce'])||!wp_verify_nonce($_POST['_wpnonce'],'am_donasi')||!empty($_POST['website'])){wp_safe_redirect($back);exit;} $k='amd_'.md5(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'x');if(get_transient($k)){wp_safe_redirect(add_query_arg('donasi','tunggu',$back).'#dukung');exit;} $a=absint(preg_replace('/\D/','',isset($_POST['amount'])?$_POST['amount']:''));$n=sanitize_text_field(isset($_POST['nama'])?$_POST['nama']:''); if($a<10000){wp_safe_redirect(add_query_arg('donasi','min',$back).'#dukung');exit;} $id=wp_insert_post(['post_type'=>'donasi','post_status'=>'pending','post_title'=>$n?$n:'Anonim']); if($id){update_post_meta($id,'_am_amount',$a);set_transient($k,1,30);} wp_safe_redirect(add_query_arg('donasi','ok',$back).'#dukung');exit;} add_action('admin_post_nopriv_am_donasi','am_donasi_submit');add_action('admin_post_am_donasi','am_donasi_submit'); function am_dukung(){ if(!am_opt('dk_on',1))return;$T=max(1,(int)am_opt('dk_target',30000000));$g=am_total();$p=min(100,$g/$T*100);$cnt=(int)wp_count_posts('donasi')->publish; $msg=['ok'=>'Terima kasih! Dukungan Anda akan tampil setelah diverifikasi redaksi.','min'=>'Nominal minimal Rp10.000.','tunggu'=>'Mohon tunggu sebentar sebelum mengirim lagi.'];$s=isset($_GET['donasi'])?sanitize_key($_GET['donasi']):''; echo '

'.esc_html(am_opt('dk_judul','Dukung Jurnalisme ArusMadura')).'

'.esc_html(am_opt('dk_desc','Bantu kami menjaga jurnalisme yang kritis dan terpercaya. Setiap dukungan yang terverifikasi langsung menambah progres.')).' Target: '.esc_html(am_rp($T)).' dalam 1 tahun.

'; if(isset($msg[$s]))echo '
'.esc_html($msg[$s]).'
'; echo '
TERKUMPUL'.esc_html(am_rp($g)).'
SISA TARGET'.esc_html(am_rp(max(0,$T-$g))).'
PROGRES'.esc_html(round($p,1)).'%
DONATUR'.esc_html($cnt).'
'; $rek=am_opt('dk_rek');$qr=am_opt('dk_qris'); if($rek||$qr){echo '
Cara mendukung: transfer ke rekening/QRIS di bawah, lalu isi konfirmasi.
'.nl2br(esc_html($rek));if($qr)echo 'QRIS';echo '
';} echo '
';wp_nonce_field('am_donasi'); echo '
';foreach([[50000,'Rp50 rb'],[100000,'Rp100 rb'],[500000,'Rp500 rb'],[1000000,'Rp1 jt'],[10000000,'Rp10 jt']] as $x)echo ''; echo '
'; $q=get_posts(['post_type'=>'donasi','post_status'=>'publish','numberposts'=>5]); if($q){echo '
';foreach($q as $d)echo '
'.esc_html($d->post_title).''.esc_html(am_rp(get_post_meta($d->ID,'_am_amount',true))).'
';echo '
';} echo '
';} add_shortcode('dukung',function(){ob_start();am_dukung();return ob_get_clean();}); /* ---------- Pembaca & kartu ---------- */ add_action('template_redirect',function(){if(is_singular('post')&&!is_user_logged_in()&&!is_preview()){$id=get_queried_object_id();update_post_meta($id,'_am_views',(int)get_post_meta($id,'_am_views',true)+1);}}); function am_ph($id,$size='am-card'){$u=get_the_post_thumbnail_url($id,$size);return '
';} function am_cat(){$c=get_the_category();return $c?$c[0]:null;} function am_card($hs=false){$id=get_the_ID();$c=am_cat();echo ''.am_ph($id).($hs?'':'
'.esc_html($c?$c->name:'').'
').'

'.esc_html(get_the_title()).'

'.($hs?'':'
'.esc_html(get_the_date('l, j F Y')).'
').'
';} function am_popular($n=5){$a=['posts_per_page'=>$n,'ignore_sticky_posts'=>1,'no_found_rows'=>true];$q=new WP_Query($a+['meta_key'=>'_am_views','orderby'=>'meta_value_num','order'=>'DESC']);if(!$q->have_posts())$q=new WP_Query($a); echo '
';$i=1;while($q->have_posts()){$q->the_post();echo '0'.$i++.''.esc_html(get_the_title()).''.esc_html(get_the_date('l, j F Y')).'';}echo '
';wp_reset_postdata();} /* ---------- Isi berita: Baca Juga (3x) + iklan tengah ---------- */ add_filter('the_content',function($c){ if(!is_singular('post')||!in_the_loop()||!is_main_query())return $c; global $page,$numpages;$p=explode('

',$c);$n=count($p)-1;if($n<2)return $c; $rel=get_posts(['category__in'=>wp_get_post_categories(get_the_ID()),'exclude'=>[get_the_ID()],'numberposts'=>3,'no_found_rows'=>true]); $multi=$numpages>1;$map=[1=>0,3=>1,5=>2];$out=''; foreach($p as $i=>$seg){$out.=$seg;if($i>=$n)continue;$out.='

'; $m=$multi?($i==1?$page-1:null):(isset($map[$i])?$map[$i]:null); if($m!==null&&isset($rel[$m]))$out.='Baca juga'.esc_html(get_the_title($rel[$m])).''; if($i==2&&$page==1){ob_start();am_ad('a_tengah');$out.=ob_get_clean();}} return $out;}); function am_topad(){ob_start();am_ad('atas');$h=ob_get_clean();if(!trim($h))return; echo '
Iklan — Scroll ke bawah untuk melanjutkan'.$h.'
';} add_filter('body_class',function($c){if(am_opt('ad_atas_code')||am_opt('ad_atas_img')||current_user_can('edit_theme_options'))$c[]='has-topad';return $c;}); /* ---------- Gambar share (WhatsApp/Facebook) dengan watermark ---------- */ function am_og_fallback(){return get_template_directory_uri().'/assets/og-default.jpg';} function am_og_url($id){ $tid=get_post_thumbnail_id($id); if(!$tid)return am_og_fallback(); if(!function_exists('imagecreatetruecolor')||!function_exists('imagejpeg'))return (string)wp_get_attachment_image_url($tid,'large'); $up=wp_upload_dir();$src=function_exists('wp_get_original_image_path')?wp_get_original_image_path($tid):get_attached_file($tid); if(!$src||!file_exists($src))return am_og_fallback(); $name=$id.'-'.$tid.'-'.filemtime($src).'.jpg';$dir=$up['basedir'].'/am-og';$path=$dir.'/'.$name; if(file_exists($path))return $up['baseurl'].'/am-og/'.$name; $info=@getimagesize($src); if(!$info||$info[0]*$info[1]>9000000){$m=image_get_intermediate_size($tid,'large');if($m&&!empty($m['path'])){$src=$up['basedir'].'/'.$m['path'];$info=@getimagesize($src);}} if(!$info||$info[0]*$info[1]>9000000)return (string)wp_get_attachment_image_url($tid,'large'); switch($info[2]){case IMAGETYPE_JPEG:$im=@imagecreatefromjpeg($src);break;case IMAGETYPE_PNG:$im=@imagecreatefrompng($src);break;case IMAGETYPE_GIF:$im=@imagecreatefromgif($src);break;case IMAGETYPE_WEBP:$im=function_exists('imagecreatefromwebp')?@imagecreatefromwebp($src):false;break;default:$im=false;} if(!$im)return (string)wp_get_attachment_image_url($tid,'large'); $W=1200;$H=630;$dst=imagecreatetruecolor($W,$H);$sw=imagesx($im);$sh=imagesy($im); $r=max($W/$sw,$H/$sh);$cw=(int)round($W/$r);$ch=(int)round($H/$r);$sx=(int)(($sw-$cw)/2);$sy=(int)(($sh-$ch)*0.3); imagecopyresampled($dst,$im,0,0,$sx,$sy,$W,$H,$cw,$ch);imagedestroy($im); imagealphablending($dst,true);$s=150; for($i=0;$i<$s;$i++){$col=imagecolorallocatealpha($dst,255,255,255,127-(int)(127*0.9*($i/$s)));imagefilledrectangle($dst,0,$H-$s+$i,$W,$H-$s+$i,$col);} $bar=@imagecreatefrompng(get_template_directory().'/assets/og-bar.png'); if($bar){imagecopy($dst,$bar,0,$H-imagesy($bar)-8,0,0,imagesx($bar),imagesy($bar));imagedestroy($bar);} wp_mkdir_p($dir);imagejpeg($dst,$path,82);imagedestroy($dst); return file_exists($path)?$up['baseurl'].'/am-og/'.$name:(string)wp_get_attachment_image_url($tid,'large'); } add_action('wp_head',function(){ if(defined('WPSEO_VERSION')||class_exists('RankMath'))return; if(is_singular('post')){$id=get_queried_object_id();$t=get_the_title($id);$d=has_excerpt($id)?get_the_excerpt($id):wp_trim_words(wp_strip_all_tags(strip_shortcodes(get_post_field('post_content',$id))),30,'…');$u=get_permalink($id);$img=am_og_url($id);$ty='article';} elseif(is_front_page()||is_home()){$t=get_bloginfo('name');$d=get_bloginfo('description');$u=home_url('/');$img=am_og_fallback();$ty='website';} else return; echo ''."\n"; },5); function am_og_filter($img){return is_singular('post')?am_og_url(get_queried_object_id()):$img;} add_filter('wpseo_opengraph_image','am_og_filter');add_filter('wpseo_twitter_image','am_og_filter'); add_filter('rank_math/opengraph/facebook/image','am_og_filter');add_filter('rank_math/opengraph/twitter/image','am_og_filter');