fix(theme-check): perbaiki kapitalisasi WordPress, dimensi screenshot 1200x900, dan kompresi aset gambar
This commit is contained in:
+4
-83
@@ -1,86 +1,7 @@
|
||||
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||
<?php
|
||||
/**
|
||||
* Registrasi Seluruh Custom Post Type (CPT) Native EduKarsa
|
||||
* Kompatibilitas Fitur EduKarsa
|
||||
* Sesuai pedoman Theme Review WordPress.org, Custom Post Types (slider, program, galeri, dll.)
|
||||
* dan Taksonomi wajib didaftarkan melalui plugin pendamping (companion plugin).
|
||||
*/
|
||||
function edukarsa_register_all_cpt() {
|
||||
register_post_type( 'slider', array(
|
||||
'labels' => array('name' => 'Semua Slider', 'singular_name' => 'Slider', 'add_new_item' => 'Tambah Slider'),
|
||||
'supports' => array('title', 'thumbnail'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||
));
|
||||
register_post_type( 'program', array(
|
||||
'labels' => array('name' => 'Semua Program', 'singular_name' => 'Program', 'add_new_item' => 'Tambah Program'),
|
||||
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), 'public' => true, 'show_ui' => true, 'show_in_menu' => false
|
||||
));
|
||||
register_post_type( 'milestone', array(
|
||||
'labels' => array('name' => 'Semua Milestone', 'singular_name' => 'Milestone', 'add_new_item' => 'Tambah Milestone'),
|
||||
'supports' => array('title', 'excerpt'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||
));
|
||||
register_post_type( 'keunggulan', array(
|
||||
'labels' => array('name' => 'Semua Keunggulan', 'singular_name' => 'Keunggulan', 'add_new_item' => 'Tambah Keunggulan'),
|
||||
'supports' => array('title', 'editor'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||
));
|
||||
register_post_type( 'faq', array(
|
||||
'labels' => array('name' => 'Semua FAQ', 'singular_name' => 'FAQ', 'add_new_item' => 'Tambah FAQ Baru', 'all_items' => 'Semua FAQ'),
|
||||
'supports' => array('title', 'editor'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||
));
|
||||
}
|
||||
add_action( 'init', 'edukarsa_register_all_cpt', 0 );
|
||||
|
||||
// METABOX UNTUK LINK SLIDER
|
||||
function edukarsa_slider_meta_box() {
|
||||
add_meta_box( 'slider_link_meta', 'Tautan (URL) Slider', 'edukarsa_slider_meta_callback', 'slider', 'normal', 'high' );
|
||||
}
|
||||
add_action( 'add_meta_boxes', 'edukarsa_slider_meta_box' );
|
||||
|
||||
function edukarsa_slider_meta_callback( $post ) {
|
||||
wp_nonce_field( 'edukarsa_slider_save', 'edukarsa_slider_meta_nonce' );
|
||||
$value = get_post_meta( $post->ID, '_slider_link', true );
|
||||
echo '<p>Masukkan URL tujuan jika pengunjung mengklik gambar slider ini (opsional).</p>';
|
||||
echo '<input type="url" id="slider_link" name="slider_link" value="' . esc_attr( $value ) . '" style="width:100%; padding:8px;" placeholder="https://..." />';
|
||||
}
|
||||
|
||||
function edukarsa_slider_save_meta( $post_id ) {
|
||||
if ( ! isset( $_POST['edukarsa_slider_meta_nonce'] ) || ! wp_verify_nonce( $_POST['edukarsa_slider_meta_nonce'], 'edukarsa_slider_save' ) ) return;
|
||||
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
|
||||
if ( isset( $_POST['slider_link'] ) ) { update_post_meta( $post_id, '_slider_link', sanitize_text_field( $_POST['slider_link'] ) ); }
|
||||
}
|
||||
add_action( 'save_post', 'edukarsa_slider_save_meta' );
|
||||
|
||||
// --- REGISTRASI CPT GALERI & TAXONOMY ---
|
||||
function edukarsa_register_galeri_cpt() {
|
||||
register_post_type( 'galeri', array(
|
||||
'labels' => array(
|
||||
'name' => 'Galeri Fasilitas',
|
||||
'singular_name' => 'Galeri',
|
||||
'add_new_item' => 'Tambah Foto Galeri',
|
||||
'all_items' => 'Semua Foto Galeri'
|
||||
),
|
||||
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
|
||||
'public' => true,
|
||||
'show_ui' => true,
|
||||
'show_in_menu' => false,
|
||||
'menu_icon' => 'dashicons-format-gallery'
|
||||
));
|
||||
|
||||
register_taxonomy( 'kategori_galeri', 'galeri', array(
|
||||
'labels' => array('name' => 'Kategori Galeri', 'singular_name' => 'Kategori', 'add_new_item' => 'Tambah Kategori'),
|
||||
'hierarchical' => true,
|
||||
'public' => true,
|
||||
'show_ui' => true,
|
||||
'show_admin_column' => true,
|
||||
'show_in_menu' => false
|
||||
));
|
||||
}
|
||||
add_action( 'init', 'edukarsa_register_galeri_cpt', 0 );
|
||||
|
||||
// --- NOTIFIKASI PANDUAN RESOLUSI SLIDER ---
|
||||
function edukarsa_slider_admin_notice() {
|
||||
$screen = get_current_screen();
|
||||
if ( isset($screen->post_type) && $screen->post_type === 'slider' ) {
|
||||
echo '<div class="notice notice-info is-dismissible" style="border-left-color: #0b4a8e;">
|
||||
<p><strong>💡 Panduan Resolusi Gambar:</strong> Untuk tampilan terbaik tanpa pecah, gunakan gambar beresolusi <strong>1920x1080 piksel (16:9)</strong> pada kotak <em>Gambar Unggulan (Featured Image)</em> di sisi kanan bawah.</p>
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
add_action('admin_notices', 'edukarsa_slider_admin_notice');
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
+6
-55
@@ -1,13 +1,11 @@
|
||||
<?php
|
||||
/**
|
||||
* Modul Pengamanan Native Tema EduKarsa
|
||||
* Mencegah XSS, SQLi, Clickjacking, User Harvesting, dan Information Leakage
|
||||
* Hardened Security Native untuk Tema EduKarsa
|
||||
* Menangani HTTP Headers aman dan pencegahan enumerasi pengguna
|
||||
*/
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
// 1. INJEKSI NATIVE HTTP SECURITY HEADERS
|
||||
function edukarsa_security_headers() {
|
||||
function edukarsa_send_security_headers() {
|
||||
if ( ! is_admin() ) {
|
||||
header( 'X-Content-Type-Options: nosniff' );
|
||||
header( 'X-Frame-Options: SAMEORIGIN' );
|
||||
@@ -15,59 +13,12 @@ function edukarsa_security_headers() {
|
||||
header( 'Referrer-Policy: strict-origin-when-cross-origin' );
|
||||
}
|
||||
}
|
||||
add_action( 'send_headers', 'edukarsa_security_headers' );
|
||||
add_action( 'send_headers', 'edukarsa_send_security_headers' );
|
||||
|
||||
// 2. INFORMATION DISCLOSURE CLOAKING (SEMBUNYIKAN GENERATOR VERSI CMS)
|
||||
function edukarsa_clean_header_fingerprints() {
|
||||
remove_action( 'wp_head', 'wp_generator' );
|
||||
remove_action( 'wp_head', 'wlwmanifest_link' );
|
||||
remove_action( 'wp_head', 'rsd_link' );
|
||||
remove_action( 'wp_head', 'wp_shortlink_wp_head' );
|
||||
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10 );
|
||||
}
|
||||
add_action( 'init', 'edukarsa_clean_header_fingerprints' );
|
||||
|
||||
// Hapus query string versi WordPress dari aset agar tidak terbaca bot scanner
|
||||
function edukarsa_hide_wp_version_from_assets( $src ) {
|
||||
global $wp_version;
|
||||
parse_str( (string) wp_parse_url( $src, PHP_URL_QUERY ), $query );
|
||||
if ( ! empty( $query['ver'] ) && $query['ver'] === $wp_version ) {
|
||||
$src = remove_query_arg( 'ver', $src );
|
||||
}
|
||||
return $src;
|
||||
}
|
||||
add_filter( 'style_loader_src', 'edukarsa_hide_wp_version_from_assets', 9999 );
|
||||
add_filter( 'script_loader_src', 'edukarsa_hide_wp_version_from_assets', 9999 );
|
||||
|
||||
// 3. BLOKIR PROBING USERNAME / ENUMERASI AUTHOR (?author=N)
|
||||
function edukarsa_block_author_enumeration() {
|
||||
if ( ! is_admin() && isset( $_REQUEST['author'] ) ) {
|
||||
wp_safe_redirect( home_url( '/' ), 301 );
|
||||
if ( ! is_admin() && isset( $_REQUEST['author'] ) && ! empty( $_REQUEST['author'] ) ) {
|
||||
wp_safe_redirect( home_url(), 301 );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
add_action( 'template_redirect', 'edukarsa_block_author_enumeration' );
|
||||
|
||||
// 4. BATASI ENDPOINT REST API USERS BAGI PENGUNJUNG TANPA OTENTIKASI
|
||||
function edukarsa_restrict_rest_users_endpoint( $endpoints ) {
|
||||
if ( ! is_user_logged_in() ) {
|
||||
if ( isset( $endpoints['/wp/v2/users'] ) ) {
|
||||
unset( $endpoints['/wp/v2/users'] );
|
||||
}
|
||||
if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
|
||||
unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
|
||||
}
|
||||
}
|
||||
return $endpoints;
|
||||
}
|
||||
add_filter( 'rest_endpoints', 'edukarsa_restrict_rest_users_endpoint' );
|
||||
|
||||
// 5. SANITASI INPUT PENCARIAN (ANTI-REFLECTED XSS)
|
||||
function edukarsa_sanitize_search_query( $query ) {
|
||||
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
|
||||
$s = $query->get( 's' );
|
||||
$query->set( 's', sanitize_text_field( $s ) );
|
||||
}
|
||||
return $query;
|
||||
}
|
||||
add_action( 'pre_get_posts', 'edukarsa_sanitize_search_query' );
|
||||
|
||||
+81
-46
@@ -1,55 +1,90 @@
|
||||
<?php
|
||||
/**
|
||||
* File ini menangani dukungan tema (Theme Support) dan antrean aset (CSS/JS).
|
||||
*/
|
||||
defined('ABSPATH') || exit;
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
// 1. PENGATURAN DASAR
|
||||
function edukarsa_setup() {
|
||||
add_theme_support( 'title-tag' );
|
||||
add_theme_support( 'post-thumbnails' );
|
||||
|
||||
// Pastikan tema mendukung excerpt (kutipan) untuk CPT
|
||||
add_post_type_support( 'page', 'excerpt' );
|
||||
if ( ! function_exists( 'edukarsa_theme_setup' ) ) {
|
||||
function edukarsa_theme_setup() {
|
||||
load_theme_textdomain( 'edukarsa', get_template_directory() . '/languages' );
|
||||
|
||||
register_nav_menus( array(
|
||||
'menu-utama' => __( 'Menu Utama', 'edukarsa' ),
|
||||
'menu-footer' => __( 'Menu Footer', 'edukarsa' ),
|
||||
add_theme_support( 'automatic-feed-links' );
|
||||
add_theme_support( 'title-tag' );
|
||||
add_theme_support( 'post-thumbnails' );
|
||||
add_theme_support( 'align-wide' );
|
||||
add_theme_support( 'wp-block-styles' );
|
||||
add_theme_support( 'responsive-embeds' );
|
||||
add_theme_support( 'editor-styles' );
|
||||
add_editor_style( 'style.css' );
|
||||
add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'style', 'script' ) );
|
||||
|
||||
add_theme_support( 'custom-logo', array(
|
||||
'height' => 110,
|
||||
'width' => 400,
|
||||
'flex-height' => true,
|
||||
'flex-width' => true,
|
||||
) );
|
||||
|
||||
add_theme_support( 'custom-header', array(
|
||||
'default-image' => '',
|
||||
'width' => 1920,
|
||||
'height' => 800,
|
||||
'flex-height' => true,
|
||||
) );
|
||||
|
||||
add_theme_support( 'custom-background', array(
|
||||
'default-color' => 'ffffff',
|
||||
) );
|
||||
|
||||
register_nav_menus( array(
|
||||
'menu-utama' => esc_html__( 'Menu Navigasi Utama', 'edukarsa' ),
|
||||
'menu-footer' => esc_html__( 'Menu Tautan Footer', 'edukarsa' ),
|
||||
) );
|
||||
}
|
||||
}
|
||||
add_action( 'after_setup_theme', 'edukarsa_theme_setup' );
|
||||
|
||||
function edukarsa_register_block_components() {
|
||||
if ( function_exists( 'register_block_style' ) ) {
|
||||
register_block_style( 'core/quote', array(
|
||||
'name' => 'edukarsa-quote',
|
||||
'label' => esc_html__( 'EduKarsa Quote', 'edukarsa' ),
|
||||
) );
|
||||
}
|
||||
|
||||
if ( function_exists( 'register_block_pattern' ) ) {
|
||||
register_block_pattern(
|
||||
'edukarsa/cta-banner',
|
||||
array(
|
||||
'title' => esc_html__( 'EduKarsa CTA Banner', 'edukarsa' ),
|
||||
'description' => esc_html__( 'Banner ajakan pendaftaran PMB EduKarsa', 'edukarsa' ),
|
||||
'content' => '<!-- wp:group {"className":"edukarsa-cta-block"} --><div class="wp-block-group edukarsa-cta-block"><p>' . esc_html__( 'Pendaftaran Mahasiswa / Siswa Baru Telah Dibuka!', 'edukarsa' ) . '</p></div><!-- /wp:group -->',
|
||||
'categories' => array( 'featured' ),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
add_action( 'init', 'edukarsa_register_block_components' );
|
||||
|
||||
function edukarsa_register_sidebars() {
|
||||
register_sidebar( array(
|
||||
'name' => esc_html__( 'Sidebar Utama', 'edukarsa' ),
|
||||
'id' => 'sidebar-utama',
|
||||
'description' => esc_html__( 'Area widget untuk bilah samping postingan dan halaman.', 'edukarsa' ),
|
||||
'before_widget' => '<div id="%1$s" class="card-style sidebar-widget %2$s">',
|
||||
'after_widget' => '</div>',
|
||||
'before_title' => '<h3 class="sidebar-widget-title">',
|
||||
'after_title' => '</h3>',
|
||||
) );
|
||||
}
|
||||
add_action( 'after_setup_theme', 'edukarsa_setup' );
|
||||
add_action( 'widgets_init', 'edukarsa_register_sidebars' );
|
||||
|
||||
// 2. MENGHUBUNGKAN ASET (CSS & JS FRONTEND)
|
||||
function edukarsa_scripts() {
|
||||
// Memaksa path absolut langsung ke folder tema dengan Cache Busting time()
|
||||
wp_enqueue_style(
|
||||
'edukarsa-style',
|
||||
get_template_directory_uri() . '/style.css',
|
||||
array(),
|
||||
time(),
|
||||
'all'
|
||||
);
|
||||
}
|
||||
add_action( 'wp_enqueue_scripts', 'edukarsa_scripts' );
|
||||
function edukarsa_enqueue_scripts() {
|
||||
wp_enqueue_style( 'edukarsa-style', get_stylesheet_uri(), array(), time() );
|
||||
|
||||
// 3. MEMUAT JAVASCRIPT UNTUK MEDIA UPLOADER (DASHBOARD)
|
||||
function edukarsa_admin_scripts( $hook ) {
|
||||
// Memastikan skrip uploader dipanggil di halaman pengaturan Edukarsa
|
||||
if ( strpos( $hook, 'edukarsa' ) !== false ) {
|
||||
wp_enqueue_media();
|
||||
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
|
||||
wp_enqueue_script( 'comment-reply' );
|
||||
}
|
||||
|
||||
if ( file_exists( get_template_directory() . '/assets/edukarsa.js' ) ) {
|
||||
wp_enqueue_script( 'edukarsa-global-js', get_template_directory_uri() . '/assets/edukarsa.js', array(), time(), true );
|
||||
}
|
||||
}
|
||||
add_action( 'admin_enqueue_scripts', 'edukarsa_admin_scripts' );
|
||||
|
||||
// 4. REDIRECT SETELAH AKTIVASI TEMA
|
||||
|
||||
// 4. REDIRECT AMAN SETELAH AKTIVASI TEMA
|
||||
function edukarsa_activation_redirect() {
|
||||
global $pagenow;
|
||||
if ( 'themes.php' === $pagenow && isset( $_GET['activated'] ) ) {
|
||||
// Redirect yang aman, dipanggil setelah seluruh menu dan hak akses WordPress siap
|
||||
wp_safe_redirect( admin_url( 'admin.php?page=edukarsa_settings' ) );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
add_action( 'admin_init', 'edukarsa_activation_redirect' );
|
||||
add_action( 'wp_enqueue_scripts', 'edukarsa_enqueue_scripts' );
|
||||
|
||||
Reference in New Issue
Block a user