{"id":303,"date":"2026-06-25T06:10:02","date_gmt":"2026-06-25T06:10:02","guid":{"rendered":"https:\/\/tools.dwiyanti.com\/blog\/?p=303"},"modified":"2026-06-25T06:13:16","modified_gmt":"2026-06-25T06:13:16","slug":"schema-website","status":"publish","type":"post","link":"https:\/\/tools.dwiyanti.com\/blog\/schema-website","title":{"rendered":"Schema WebSite Gemini"},"content":{"rendered":"<pre style=\"white-space:pre-wrap;\">\n\nUntuk Functions.php Kode di perbaiki chat.deepseek.com\n\nadd_action( 'wp_head', 'gemini_homepage_with_posts_schema' );\nfunction gemini_homepage_with_posts_schema() {\n    if ( is_front_page() || is_home() ) {\n        \/\/ Ambil data user admin pertama\n        $admin_user = get_users(array(\n            'role' => 'administrator',\n            'number' => 1\n        ));\n        $user_data = !empty($admin_user) ? $admin_user[0] : null;\n        \n        \/\/ Ambil data user\n        $user_name = $user_data ? $user_data->display_name : 'Nama Anda';\n        $user_description = $user_data ? get_user_meta($user_data->ID, 'description', true) : '';\n        \n        \/\/ Ambil job title dari user meta (bisa diisi di dashboard user)\n        $user_job_title = $user_data ? get_user_meta($user_data->ID, 'job_title', true) : 'Web Developer \/ Designer';\n        if (empty($user_job_title)) {\n            $user_job_title = 'Web Developer \/ Designer';\n        }\n        \n        \/\/ Ambil skills dari user meta (bisa diisi di dashboard user, pisahkan dengan koma)\n        $user_skills = $user_data ? get_user_meta($user_data->ID, 'skills', true) : '';\n        if (empty($user_skills)) {\n            $user_skills = array(\"PHP\", \"WordPress\", \"SEO\", \"Web Design\");\n        } else {\n            \/\/ Ubah string menjadi array\n            if (is_string($user_skills)) {\n                $user_skills = array_map('trim', explode(',', $user_skills));\n            }\n        }\n        \n        \/\/ 1. Ambil 3 postingan terbaru secara dinamis\n        $recent_posts_query = new WP_Query(array(\n            'posts_per_page' => 3,\n            'post_status'    => 'publish'\n        ));\n        \n        $blog_posts_schema = array();\n        \n        if ( $recent_posts_query->have_posts() ) {\n            $position = 1;\n            while ( $recent_posts_query->have_posts() ) {\n                $recent_posts_query->the_post();\n                \n                \/\/ Ambil featured image jika ada\n                $post_image = get_the_post_thumbnail_url(get_the_ID(), 'full');\n                \n                \/\/ Ambil tanggal posting\n                $post_date = get_the_date('c');\n                \n                $blog_posts_schema[] = array(\n                    \"@type\" => \"ListItem\",\n                    \"position\" => $position,\n                    \"url\" => get_permalink(),\n                    \"name\" => get_the_title(),\n                    \"image\" => $post_image ? $post_image : get_site_icon_url(),\n                    \"datePublished\" => $post_date\n                );\n                $position++;\n            }\n            wp_reset_postdata();\n        }\n\n        \/\/ 2. Satukan semua ke dalam satu Schema Graph\n        $schema_graph = array(\n            \"@context\" => \"https:\/\/schema.org\",\n            \"@graph\" => array(\n                \/\/ Schema WebSite\n                array(\n                    \"@type\" => \"WebSite\",\n                    \"@id\" => get_home_url() . \"\/#website\",\n                    \"url\" => get_home_url(),\n                    \"name\" => get_bloginfo('name'),\n                    \"description\" => get_bloginfo('description'),\n                    \"publisher\" => array(\n                        \"@type\" => \"Person\",\n                        \"name\" => $user_name\n                    ),\n                    \"potentialAction\" => array(\n                        \"@type\" => \"SearchAction\",\n                        \"target\" => get_home_url() . \"\/?s={search_term_string}\",\n                        \"query-input\" => \"required name=search_term_string\"\n                    )\n                ),\n                \/\/ Schema WebPage \/ ProfilePage\n                array(\n                    \"@type\" => \"ProfilePage\",\n                    \"@id\" => get_home_url() . \"\/#webpage\",\n                    \"url\" => get_home_url(),\n                    \"name\" => get_bloginfo('name') . \" - Portfolio\",\n                    \"isPartOf\" => array(\"@id\" => get_home_url() . \"\/#website\"),\n                    \"about\" => array(\n                        \"@type\" => \"Person\",\n                        \"name\" => $user_name,\n                        \"description\" => !empty($user_description) ? $user_description : \"Deskripsi singkat dari section About Anda. Silakan update di dashboard user.\",\n                        \"jobTitle\" => $user_job_title,\n                        \"knowsAbout\" => $user_skills,\n                        \"url\" => get_home_url(),\n                        \"sameAs\" => array(\n                            \/\/ Tambahkan social media links di sini\n                            \/\/ \"https:\/\/www.linkedin.com\/in\/username\",\n                            \/\/ \"https:\/\/github.com\/username\",\n                            \/\/ \"https:\/\/twitter.com\/username\"\n                        )\n                    ),\n                    \"breadcrumb\" => array(\n                        \"@type\" => \"BreadcrumbList\",\n                        \"itemListElement\" => array(\n                            array(\n                                \"@type\" => \"ListItem\",\n                                \"position\" => 1,\n                                \"name\" => \"Home\",\n                                \"item\" => get_home_url()\n                            )\n                        )\n                    )\n                )\n            )\n        );\n\n        \/\/ Tambahkan mainEntity hanya jika ada postingan\n        if (!empty($blog_posts_schema)) {\n            $schema_graph[\"@graph\"][1][\"mainEntity\"] = array(\n                \"@type\" => \"ItemList\",\n                \"name\" => \"Latest Blog Posts\",\n                \"description\" => \"Daftar 3 artikel terbaru\",\n                \"itemListElement\" => $blog_posts_schema\n            );\n        }\n\n        \/\/ Cetak schema ke HTML\n        echo '<script type=\"application\/ld+json\">' . json_encode($schema_graph, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT) . '<\/script>';\n    }\n}\n\n\/\/ ============================================\n\/\/ FUNGSI TAMBAHAN: Tambahkan custom field ke user\n\/\/ ============================================\n\n\/\/ Tambahkan field job_title dan skills ke user profile\nadd_action('show_user_profile', 'add_user_custom_fields');\nadd_action('edit_user_profile', 'add_user_custom_fields');\nfunction add_user_custom_fields($user) {\n    ?>\n    <h3>Schema Profile Information<\/h3>\n    <table class=\"form-table\">\n        <tr>\n            <th><label for=\"job_title\">Job Title<\/label><\/th>\n            <td>\n                <input type=\"text\" name=\"job_title\" id=\"job_title\" \n                       value=\"<?php echo esc_attr(get_user_meta($user->ID, 'job_title', true)); ?>\" \n                       class=\"regular-text\" \/>\n                <p class=\"description\">Masukkan job title Anda (contoh: Web Developer, UI\/UX Designer)<\/p>\n            <\/td>\n        <\/tr>\n        <tr>\n            <th><label for=\"skills\">Skills<\/label><\/th>\n            <td>\n                <input type=\"text\" name=\"skills\" id=\"skills\" \n                       value=\"<?php echo esc_attr(get_user_meta($user->ID, 'skills', true)); ?>\" \n                       class=\"regular-text\" \/>\n                <p class=\"description\">Masukkan skills, pisahkan dengan koma (contoh: PHP, WordPress, JavaScript)<\/p>\n            <\/td>\n        <\/tr>\n    <\/table>\n    <?php\n}\n\n\/\/ Simpan custom field user\nadd_action('personal_options_update', 'save_user_custom_fields');\nadd_action('edit_user_profile_update', 'save_user_custom_fields');\nfunction save_user_custom_fields($user_id) {\n    if (!current_user_can('edit_user', $user_id)) {\n        return false;\n    }\n    \n    if (isset($_POST['job_title'])) {\n        update_user_meta($user_id, 'job_title', sanitize_text_field($_POST['job_title']));\n    }\n    \n    if (isset($_POST['skills'])) {\n        update_user_meta($user_id, 'skills', sanitize_text_field($_POST['skills']));\n    }\n}\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Untuk Functions.php Kode di perbaiki chat.deepseek.com add_action( &#8216;wp_head&#8217;, &#8216;gemini_homepage_with_posts_schema&#8217; ); function gemini_homepage_with_posts_schema() { if ( is_front_page() || is_home() ) { \/\/ Ambil data user admin pertama $admin_user = get_users(array( &#8216;role&#8217; => &#8216;administrator&#8217;, &#8216;number&#8217; => 1 )); $user_data = !empty($admin_user) ? $admin_user[0] : null; \/\/ Ambil data user $user_name = $user_data ? $user_data->display_name : &#8216;Nama Anda&#8217;; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-303","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts\/303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/comments?post=303"}],"version-history":[{"count":2,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts\/303\/revisions"}],"predecessor-version":[{"id":305,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts\/303\/revisions\/305"}],"wp:attachment":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/media?parent=303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/categories?post=303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/tags?post=303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}