feat: initial commit - 汽车贴膜门店 WordPress 主题 (B2B Trade v2.0.0)

- WordPress classic theme for car tinting/foil shop
- 13 homepage template parts
- Customizer panel with 13 sections
- RFQ inquiry form handler
- Bootstrap 5.3 + AOS + Colorbox frontend
- 13 SVG placeholder images
- Chinese content defaults
This commit is contained in:
zhs123
2026-07-24 13:52:59 +08:00
commit 2a64ce8daa
82 changed files with 3344 additions and 0 deletions
+154
View File
@@ -0,0 +1,154 @@
<?php
/**
* Custom post types: service (服务项目/膜品) and case (案例作品集).
* 主题激活时把 Customizer 中的 7 个产品迁移为 service 文章,并创建默认页面。
*
* @package Fragrance_Trade
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/** Register the service and case post types plus the case_type taxonomy. */
function fragrance_trade_register_post_types() {
register_post_type(
'service',
array(
'labels' => array(
'name' => __( '服务项目', 'fragrance-trade' ),
'singular_name' => __( '服务项目', 'fragrance-trade' ),
'add_new' => __( '添加服务项目', 'fragrance-trade' ),
'edit_item' => __( '编辑服务项目', 'fragrance-trade' ),
'all_items' => __( '全部服务项目', 'fragrance-trade' ),
),
'public' => true,
'has_archive' => 'services',
'rewrite' => array( 'slug' => 'services' ),
'menu_position' => 20,
'menu_icon' => 'dashicons-admin-customizer',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'show_in_rest' => true,
)
);
register_post_type(
'case',
array(
'labels' => array(
'name' => __( '案例作品', 'fragrance-trade' ),
'singular_name' => __( '案例', 'fragrance-trade' ),
'add_new' => __( '添加案例', 'fragrance-trade' ),
'edit_item' => __( '编辑案例', 'fragrance-trade' ),
'all_items' => __( '全部案例', 'fragrance-trade' ),
),
'public' => true,
'has_archive' => 'cases',
'rewrite' => array( 'slug' => 'cases' ),
'menu_position' => 21,
'menu_icon' => 'dashicons-format-gallery',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'show_in_rest' => true,
)
);
register_taxonomy(
'case_type',
'case',
array(
'labels' => array(
'name' => __( '案例分类', 'fragrance-trade' ),
'singular_name' => __( '案例分类', 'fragrance-trade' ),
),
'public' => true,
'hierarchical' => false,
'show_in_rest' => true,
'rewrite' => array( 'slug' => 'case-type' ),
)
);
}
add_action( 'init', 'fragrance_trade_register_post_types' );
/** Filter the case archive by the case_type query argument. */
function fragrance_trade_filter_cases_archive( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_post_type_archive( 'case' ) && ! empty( $_GET['case_type'] ) ) {
$query->set( 'case_type', sanitize_text_field( wp_unslash( $_GET['case_type'] ) ) );
}
}
add_action( 'pre_get_posts', 'fragrance_trade_filter_cases_archive' );
/** One-time setup on theme activation: migrate products and create pages. */
function fragrance_trade_setup_site_on_activation() {
if ( get_option( 'fragrance_trade_setup_done' ) ) {
return;
}
$product_fallbacks = array(
'products/placeholder-01.svg',
'products/placeholder-02.svg',
'products/placeholder-03.svg',
'products/placeholder-04.svg',
'products/placeholder-05.svg',
'products/placeholder-06.svg',
'products/placeholder-07.svg',
);
for ( $index = 1; $index <= count( $product_fallbacks ); $index++ ) {
$title = fragrance_trade_get_mod( 'b2b_product_' . $index . '_title' );
if ( ! $title ) {
continue;
}
$post_id = wp_insert_post(
array(
'post_type' => 'service',
'post_title' => $title,
'post_content' => fragrance_trade_get_mod( 'b2b_product_' . $index . '_text' ),
'post_excerpt' => fragrance_trade_get_mod( 'b2b_product_' . $index . '_specs' ),
'post_status' => 'publish',
)
);
if ( $post_id && ! is_wp_error( $post_id ) ) {
$image = fragrance_trade_get_mod( 'b2b_product_' . $index . '_image', '' );
if ( $image ) {
update_post_meta( $post_id, '_service_image', $image );
}
}
}
$pages = array(
'home' => array( 'post_title' => __( '首页', 'fragrance-trade' ), 'template' => '' ),
'about' => array( 'post_title' => __( '关于门店', 'fragrance-trade' ), 'template' => 'page-about.php' ),
'faq' => array( 'post_title' => __( '常见问题', 'fragrance-trade' ), 'template' => 'page-faq.php' ),
'contact' => array( 'post_title' => __( '预约/联系', 'fragrance-trade' ), 'template' => 'page-contact.php' ),
);
$created = array();
foreach ( $pages as $slug => $data ) {
$existing = get_page_by_path( $slug );
if ( $existing ) {
$created[ $slug ] = $existing->ID;
continue;
}
$id = wp_insert_post(
array(
'post_type' => 'page',
'post_name' => $slug,
'post_title' => $data['post_title'],
'post_status' => 'publish',
'page_template' => $data['template'],
)
);
if ( $id && ! is_wp_error( $id ) ) {
$created[ $slug ] = $id;
}
}
if ( ! empty( $created['home'] ) ) {
update_option( 'page_on_front', $created['home'] );
update_option( 'show_on_front', 'page' );
}
update_option( 'fragrance_trade_setup_done', 1 );
}
add_action( 'after_switch_theme', 'fragrance_trade_setup_site_on_activation' );
+158
View File
@@ -0,0 +1,158 @@
<?php
/** WordPress Customizer controls for the B2B factory homepage. @package Fragrance_Trade */
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function fragrance_trade_sanitize_checkbox( $checked ) {
return isset( $checked ) && true === (bool) $checked;
}
function fragrance_trade_customize_add_field( $wp_customize, $id, $section, $label, $type = 'text', $priority = 10 ) {
$sanitizers = array(
'text' => 'sanitize_text_field',
'textarea' => 'sanitize_textarea_field',
'url' => 'esc_url_raw',
'email' => 'sanitize_email',
'checkbox' => 'fragrance_trade_sanitize_checkbox',
'image' => 'esc_url_raw',
);
$wp_customize->add_setting(
$id,
array(
'default' => fragrance_trade_get_default( $id ),
'sanitize_callback' => $sanitizers[ $type ],
'transport' => 'refresh',
)
);
if ( 'image' === $type ) {
$wp_customize->add_control(
new WP_Customize_Image_Control(
$wp_customize,
$id,
array( 'label' => $label, 'section' => $section, 'priority' => $priority )
)
);
return;
}
$wp_customize->add_control( $id, array( 'label' => $label, 'section' => $section, 'type' => $type, 'priority' => $priority ) );
}
function fragrance_trade_customize_register( $wp_customize ) {
$wp_customize->add_panel(
'fragrance_b2b_homepage',
array(
'title' => __( 'B2B 企业首页', 'fragrance-trade' ),
'description' => __( '编辑固定布局的 OEM/ODM 汽车贴膜企业首页。上线前请将所有演示文案替换为经验证的工厂信息。', 'fragrance-trade' ),
'priority' => 30,
)
);
$sections = array(
'fragrance_b2b_hero' => __( '首屏定位', 'fragrance-trade' ),
'fragrance_b2b_trust' => __( '信任栏', 'fragrance-trade' ),
'fragrance_b2b_services' => __( '服务项目', 'fragrance-trade' ),
'fragrance_b2b_products' => __( '产品能力', 'fragrance-trade' ),
'fragrance_b2b_customization' => __( '定制选项', 'fragrance-trade' ),
'fragrance_b2b_factory' => __( '工厂证明与参观', 'fragrance-trade' ),
'fragrance_b2b_quality' => __( '品质管控', 'fragrance-trade' ),
'fragrance_b2b_process' => __( '项目流程', 'fragrance-trade' ),
'fragrance_b2b_projects' => __( '项目案例', 'fragrance-trade' ),
'fragrance_b2b_documents' => __( '文档支持', 'fragrance-trade' ),
'fragrance_b2b_faq' => __( '常见问题', 'fragrance-trade' ),
'fragrance_b2b_rfq' => __( '询价表单', 'fragrance-trade' ),
'fragrance_contact_social' => __( '联系方式与社交链接', 'fragrance-trade' ),
);
$priority = 10;
foreach ( $sections as $id => $title ) {
$wp_customize->add_section( $id, array( 'title' => $title, 'panel' => 'fragrance_b2b_homepage', 'priority' => $priority ) );
$priority += 10;
}
$fields = array(
array( 'b2b_hero_eyebrow', 'fragrance_b2b_hero', __( '眉标', 'fragrance-trade' ), 'text' ),
array( 'b2b_hero_title', 'fragrance_b2b_hero', __( '主标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_hero_text', 'fragrance_b2b_hero', __( '简介文案', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_hero_primary_label', 'fragrance_b2b_hero', __( '主按钮文字', 'fragrance-trade' ), 'text' ),
array( 'b2b_hero_primary_url', 'fragrance_b2b_hero', __( '主按钮链接', 'fragrance-trade' ), 'url' ),
array( 'b2b_hero_secondary_label', 'fragrance_b2b_hero', __( '次按钮文字', 'fragrance-trade' ), 'text' ),
array( 'b2b_hero_secondary_url', 'fragrance_b2b_hero', __( '次按钮链接', 'fragrance-trade' ), 'url' ),
array( 'b2b_trust_title', 'fragrance_b2b_trust', __( '信任栏标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_services_title', 'fragrance_b2b_services', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_services_text', 'fragrance_b2b_services', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_products_title', 'fragrance_b2b_products', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_products_text', 'fragrance_b2b_products', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_custom_title', 'fragrance_b2b_customization', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_custom_text', 'fragrance_b2b_customization', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_factory_eyebrow', 'fragrance_b2b_factory', __( '眉标', 'fragrance-trade' ), 'text' ),
array( 'b2b_factory_title', 'fragrance_b2b_factory', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_factory_text', 'fragrance_b2b_factory', __( '工厂简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_show_video', 'fragrance_b2b_factory', __( '显示工厂视频', 'fragrance-trade' ), 'checkbox' ),
array( 'b2b_video_title', 'fragrance_b2b_factory', __( '视频标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_video_text', 'fragrance_b2b_factory', __( '视频描述', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_video_url', 'fragrance_b2b_factory', __( 'YouTube、Vimeo 或视频链接', 'fragrance-trade' ), 'url' ),
array( 'b2b_video_image', 'fragrance_b2b_factory', __( '视频封面图', 'fragrance-trade' ), 'image' ),
array( 'b2b_quality_title', 'fragrance_b2b_quality', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_quality_text', 'fragrance_b2b_quality', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_process_title', 'fragrance_b2b_process', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_process_text', 'fragrance_b2b_process', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_show_projects', 'fragrance_b2b_projects', __( '显示项目案例', 'fragrance-trade' ), 'checkbox' ),
array( 'b2b_projects_title', 'fragrance_b2b_projects', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_projects_text', 'fragrance_b2b_projects', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_show_documents', 'fragrance_b2b_documents', __( '显示文档板块', 'fragrance-trade' ), 'checkbox' ),
array( 'b2b_documents_title', 'fragrance_b2b_documents', __( '板块标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_documents_text', 'fragrance_b2b_documents', __( '板块简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_show_faq', 'fragrance_b2b_faq', __( '显示常见问题', 'fragrance-trade' ), 'checkbox' ),
array( 'b2b_faq_title', 'fragrance_b2b_faq', __( '常见问题标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_rfq_title', 'fragrance_b2b_rfq', __( '询价标题', 'fragrance-trade' ), 'text' ),
array( 'b2b_rfq_text', 'fragrance_b2b_rfq', __( '询价简介', 'fragrance-trade' ), 'textarea' ),
array( 'b2b_rfq_button_label', 'fragrance_b2b_rfq', __( '提交按钮文字', 'fragrance-trade' ), 'text' ),
array( 'inquiry_email', 'fragrance_contact_social', __( '询价收件邮箱', 'fragrance-trade' ), 'email' ),
array( 'whatsapp', 'fragrance_contact_social', __( 'WhatsApp 号码(含国家代码)', 'fragrance-trade' ), 'text' ),
array( 'facebook_url', 'fragrance_contact_social', __( 'Facebook 链接', 'fragrance-trade' ), 'url' ),
array( 'twitter_url', 'fragrance_contact_social', __( 'X / Twitter 链接', 'fragrance-trade' ), 'url' ),
array( 'youtube_url', 'fragrance_contact_social', __( 'YouTube 链接', 'fragrance-trade' ), 'url' ),
array( 'linkedin_url', 'fragrance_contact_social', __( 'LinkedIn 链接', 'fragrance-trade' ), 'url' ),
array( 'instagram_social_url', 'fragrance_contact_social', __( 'Instagram 链接', 'fragrance-trade' ), 'url' ),
array( 'footer_text', 'fragrance_contact_social', __( '页脚定位文案', 'fragrance-trade' ), 'text' ),
);
for ( $index = 1; $index <= 4; $index++ ) {
$fields[] = array( 'b2b_metric_' . $index . '_value', 'fragrance_b2b_trust', sprintf( __( '信任点 %d 数值', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_metric_' . $index . '_label', 'fragrance_b2b_trust', sprintf( __( '信任点 %d 标签', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_service_' . $index . '_title', 'fragrance_b2b_services', sprintf( __( '服务 %d 标题', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_service_' . $index . '_text', 'fragrance_b2b_services', sprintf( __( '服务 %d 描述', 'fragrance-trade' ), $index ), 'textarea' );
$fields[] = array( 'b2b_factory_point_' . $index, 'fragrance_b2b_factory', sprintf( __( '工厂证明点 %d', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_factory_image_' . $index, 'fragrance_b2b_factory', sprintf( __( '工厂图片 %d', 'fragrance-trade' ), $index ), 'image' );
$fields[] = array( 'b2b_document_' . $index . '_title', 'fragrance_b2b_documents', sprintf( __( '文档卡片 %d 标题', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_document_' . $index . '_text', 'fragrance_b2b_documents', sprintf( __( '文档卡片 %d 描述', 'fragrance-trade' ), $index ), 'textarea' );
}
for ( $index = 1; $index <= 7; $index++ ) {
$fields[] = array( 'b2b_product_' . $index . '_title', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 标题', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_product_' . $index . '_text', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 描述', 'fragrance-trade' ), $index ), 'textarea' );
$fields[] = array( 'b2b_product_' . $index . '_specs', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 规格行', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_product_' . $index . '_image', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 图片', 'fragrance-trade' ), $index ), 'image' );
}
for ( $index = 1; $index <= 8; $index++ ) {
$fields[] = array( 'b2b_custom_' . $index . '_title', 'fragrance_b2b_customization', sprintf( __( '定制项 %d', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_process_' . $index . '_title', 'fragrance_b2b_process', sprintf( __( '流程步骤 %d 标题', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_process_' . $index . '_text', 'fragrance_b2b_process', sprintf( __( '流程步骤 %d 描述', 'fragrance-trade' ), $index ), 'textarea' );
$fields[] = array( 'b2b_faq_' . $index . '_question', 'fragrance_b2b_faq', sprintf( __( '问题 %d', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_faq_' . $index . '_answer', 'fragrance_b2b_faq', sprintf( __( '回答 %d', 'fragrance-trade' ), $index ), 'textarea' );
}
for ( $index = 1; $index <= 6; $index++ ) {
$fields[] = array( 'b2b_quality_' . $index . '_title', 'fragrance_b2b_quality', sprintf( __( '品质步骤 %d 标题', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_quality_' . $index . '_text', 'fragrance_b2b_quality', sprintf( __( '品质步骤 %d 描述', 'fragrance-trade' ), $index ), 'textarea' );
}
for ( $index = 1; $index <= 3; $index++ ) {
$fields[] = array( 'b2b_project_' . $index . '_title', 'fragrance_b2b_projects', sprintf( __( '项目案例 %d 标题', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_project_' . $index . '_meta', 'fragrance_b2b_projects', sprintf( __( '项目案例 %d 标签', 'fragrance-trade' ), $index ), 'text' );
$fields[] = array( 'b2b_project_' . $index . '_text', 'fragrance_b2b_projects', sprintf( __( '项目案例 %d 描述', 'fragrance-trade' ), $index ), 'textarea' );
}
foreach ( $fields as $field ) {
fragrance_trade_customize_add_field( $wp_customize, $field[0], $field[1], $field[2], $field[3] );
}
}
add_action( 'customize_register', 'fragrance_trade_customize_register' );
+182
View File
@@ -0,0 +1,182 @@
<?php
/**
* 汽车贴膜企业 B2B 通用模板默认值。
*
* @package Fragrance_Trade
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/** Return all theme defaults. */
function fragrance_trade_defaults() {
return array(
'b2b_hero_eyebrow' => __( '汽车贴膜 · 专业制造', 'fragrance-trade' ),
'b2b_hero_title' => __( '专业汽车贴膜制造商,为品牌提供一站式贴膜解决方案', 'fragrance-trade' ),
'b2b_hero_text' => __( '从膜料研发、色彩定制到裁切包装和出口支持,我们帮助客户将概念转化为市场领先的汽车贴膜产品。', 'fragrance-trade' ),
'b2b_hero_primary_label' => __( '获取报价', 'fragrance-trade' ),
'b2b_hero_primary_url' => '#rfq',
'b2b_hero_secondary_label' => __( '了解生产能力', 'fragrance-trade' ),
'b2b_hero_secondary_url' => '#capabilities',
'b2b_trust_title' => __( '从概念到交付的专业制造伙伴', 'fragrance-trade' ),
'b2b_metric_1_value' => __( 'OEM / ODM', 'fragrance-trade' ),
'b2b_metric_1_label' => __( '灵活合作模式', 'fragrance-trade' ),
'b2b_metric_2_value' => __( '一站式', 'fragrance-trade' ),
'b2b_metric_2_label' => __( '从膜料到成品包装', 'fragrance-trade' ),
'b2b_metric_3_value' => __( '批次质检', 'fragrance-trade' ),
'b2b_metric_3_label' => __( '出货前品质检验', 'fragrance-trade' ),
'b2b_metric_4_value' => __( '全球覆盖', 'fragrance-trade' ),
'b2b_metric_4_label' => __( '出口项目支持', 'fragrance-trade' ),
'b2b_services_title' => __( '围绕您的项目定制的贴膜服务', 'fragrance-trade' ),
'b2b_services_text' => __( '选择与您的品牌、产品和上市计划匹配的合作起点。', 'fragrance-trade' ),
'b2b_service_1_title' => __( '品牌贴膜定制', 'fragrance-trade' ),
'b2b_service_1_text' => __( '从现有膜料、颜色和规格中选择,打造您的品牌贴膜系列。', 'fragrance-trade' ),
'b2b_service_2_title' => __( 'OEM 代工生产', 'fragrance-trade' ),
'b2b_service_2_text' => __( '根据您认可的配方、参考样品或产品规格进行生产制造。', 'fragrance-trade' ),
'b2b_service_3_title' => __( 'ODM 产品开发', 'fragrance-trade' ),
'b2b_service_3_text' => __( '涵盖膜料选型、颜色开发、样品制作和量产准备的全程项目支持。', 'fragrance-trade' ),
'b2b_service_4_title' => __( '包装与定制', 'fragrance-trade' ),
'b2b_service_4_text' => __( '协调卷芯、外包装、标签和运输包装,贴合您的品牌定位。', 'fragrance-trade' ),
'b2b_products_title' => __( '工厂生产的贴膜产品参考', 'fragrance-trade' ),
'b2b_products_text' => __( '以下为我们工厂生产的部分产品。客户品牌信息已做模糊处理以保护保密性,产品质感和工艺细节完整可见。', 'fragrance-trade' ),
'b2b_product_1_title' => __( '隐形车衣(TPU 保护膜)', 'fragrance-trade' ),
'b2b_product_1_text' => __( '高透明度 TPU 材质,具备自修复功能,有效保护车漆免受石子划伤和紫外线损伤。', 'fragrance-trade' ),
'b2b_product_1_specs' => __( 'TPU 材质 · 自修复 · 高透光 · 抗黄变', 'fragrance-trade' ),
'b2b_product_1_image' => '',
'b2b_product_2_title' => __( '彩色改色膜', 'fragrance-trade' ),
'b2b_product_2_text' => __( '丰富色彩选择,高分子 PVC 材质,贴合度高,可实现哑光、亮面、珠光等多种表面效果。', 'fragrance-trade' ),
'b2b_product_2_specs' => __( 'PVC 材质 · 多色可选 · 哑光/亮面 · 高贴合', 'fragrance-trade' ),
'b2b_product_2_image' => '',
'b2b_product_3_title' => __( '隔热防爆膜', 'fragrance-trade' ),
'b2b_product_3_text' => __( '高效隔热阻紫外线,提升车内舒适度,多层金属镀膜工艺确保清晰视野与安全性。', 'fragrance-trade' ),
'b2b_product_3_specs' => __( '多层金属 · 隔热阻紫 · 高透光 · 防爆', 'fragrance-trade' ),
'b2b_product_3_image' => '',
'b2b_product_4_title' => __( '陶瓷隔热膜', 'fragrance-trade' ),
'b2b_product_4_text' => __( '纳米陶瓷技术,不屏蔽信号,隔热性能卓越,适合高端车型及电子设备密集车辆。', 'fragrance-trade' ),
'b2b_product_4_specs' => __( '纳米陶瓷 · 不挡信号 · 超强隔热 · 持久耐用', 'fragrance-trade' ),
'b2b_product_4_image' => '',
'b2b_product_5_title' => __( '天窗冰甲', 'fragrance-trade' ),
'b2b_product_5_text' => __( '专为全景天窗设计,高隔热率搭配防爆功能,降低车内温度同时提升安全性。', 'fragrance-trade' ),
'b2b_product_5_specs' => __( '天窗专用 · 高隔热 · 防爆 · 降噪', 'fragrance-trade' ),
'b2b_product_5_image' => '',
'b2b_product_6_title' => __( '前挡专用膜', 'fragrance-trade' ),
'b2b_product_6_text' => __( '前挡风玻璃专用配方,高透光率符合国家标准,兼顾隔热性能与驾驶视野。', 'fragrance-trade' ),
'b2b_product_6_specs' => __( '前挡专用 · 高透光 · 符合国标 · 隔热', 'fragrance-trade' ),
'b2b_product_6_image' => '',
'b2b_product_7_title' => __( '个性定制彩绘膜', 'fragrance-trade' ),
'b2b_product_7_text' => __( '支持图案定制、品牌 LOGO 印刷,适用于商业车队包装和个性化改装需求。', 'fragrance-trade' ),
'b2b_product_7_specs' => __( '图案定制 · LOGO 印刷 · 车队包装 · 个性改装', 'fragrance-trade' ),
'b2b_product_7_image' => '',
'b2b_custom_title' => __( '定制产品的每一个细节', 'fragrance-trade' ),
'b2b_custom_text' => __( '选择并确认影响产品性能、外观和成本的关键要素。', 'fragrance-trade' ),
'b2b_custom_1_title' => __( '膜料选型', 'fragrance-trade' ),
'b2b_custom_2_title' => __( '颜色定制', 'fragrance-trade' ),
'b2b_custom_3_title' => __( '厚度规格', 'fragrance-trade' ),
'b2b_custom_4_title' => __( '宽度规格', 'fragrance-trade' ),
'b2b_custom_5_title' => __( '表面工艺', 'fragrance-trade' ),
'b2b_custom_6_title' => __( '图案定制', 'fragrance-trade' ),
'b2b_custom_7_title' => __( '包装设计', 'fragrance-trade' ),
'b2b_custom_8_title' => __( '出口标识', 'fragrance-trade' ),
'b2b_factory_eyebrow' => __( '工厂与生产', 'fragrance-trade' ),
'b2b_factory_title' => __( '可验证的生产实力', 'fragrance-trade' ),
'b2b_factory_text' => __( '在正式上线前,请用经过验证的工厂数据、生产照片和能力说明替换以下演示内容。', 'fragrance-trade' ),
'b2b_factory_point_1' => __( '自有涂布与分切生产线', 'fragrance-trade' ),
'b2b_factory_point_2' => __( '量产前样品确认制度', 'fragrance-trade' ),
'b2b_factory_point_3' => __( '原材料与包装协调管理', 'fragrance-trade' ),
'b2b_factory_point_4' => __( '生产与发货进度透明沟通', 'fragrance-trade' ),
'b2b_factory_image_1' => '',
'b2b_factory_image_2' => '',
'b2b_factory_image_3' => '',
'b2b_factory_image_4' => '',
'b2b_show_video' => true,
'b2b_video_title' => __( '汽车贴膜生产流程', 'fragrance-trade' ),
'b2b_video_text' => __( '了解涂布、分切、质检和包装如何在一条生产线上协同完成。', 'fragrance-trade' ),
'b2b_video_url' => '',
'b2b_video_image' => '',
'b2b_quality_title' => __( '每个生产环节的品质管控', 'fragrance-trade' ),
'b2b_quality_text' => __( '具体检验方案根据每份已确认的产品规格和目的地要求制定。', 'fragrance-trade' ),
'b2b_quality_1_title' => __( '来料检验', 'fragrance-trade' ),
'b2b_quality_1_text' => __( '生产前对原材料、基膜和包装材料进行验收。', 'fragrance-trade' ),
'b2b_quality_2_title' => __( '样品确认', 'fragrance-trade' ),
'b2b_quality_2_text' => __( '以已确认的样品和规格作为生产基准。', 'fragrance-trade' ),
'b2b_quality_3_title' => __( '生产过程检验', 'fragrance-trade' ),
'b2b_quality_3_text' => __( '监控涂布厚度、贴合度和工艺一致性。', 'fragrance-trade' ),
'b2b_quality_4_title' => __( '色差检测', 'fragrance-trade' ),
'b2b_quality_4_text' => __( '使用分光仪对颜色一致性进行检测。', 'fragrance-trade' ),
'b2b_quality_5_title' => __( '成品外观检验', 'fragrance-trade' ),
'b2b_quality_5_text' => __( '检查膜面瑕疵、分切边缘和包装外观。', 'fragrance-trade' ),
'b2b_quality_6_title' => __( '出货前复查', 'fragrance-trade' ),
'b2b_quality_6_text' => __( '发货前复核成品、包装和运输标识。', 'fragrance-trade' ),
'b2b_process_title' => __( '清晰的 OEM/ODM 项目流程', 'fragrance-trade' ),
'b2b_process_text' => __( '每个阶段都有明确的客户输入和工厂输出,确保决策过程透明。', 'fragrance-trade' ),
'b2b_process_1_title' => __( '提交需求', 'fragrance-trade' ),
'b2b_process_1_text' => __( '提供市场定位、产品类型、数量、包装和上市计划。', 'fragrance-trade' ),
'b2b_process_2_title' => __( '项目评估', 'fragrance-trade' ),
'b2b_process_2_text' => __( '确认可行性、信息缺口和报价所需资料。', 'fragrance-trade' ),
'b2b_process_3_title' => __( '选择膜料与规格', 'fragrance-trade' ),
'b2b_process_3_text' => __( '确定膜料类型、颜色、厚度、宽度和包装方案。', 'fragrance-trade' ),
'b2b_process_4_title' => __( '打样', 'fragrance-trade' ),
'b2b_process_4_text' => __( '按需制备膜料和包装样品供评审。', 'fragrance-trade' ),
'b2b_process_5_title' => __( '样品确认', 'fragrance-trade' ),
'b2b_process_5_text' => __( '锁定已确认的参考样和生产规格。', 'fragrance-trade' ),
'b2b_process_6_title' => __( '订单确认', 'fragrance-trade' ),
'b2b_process_6_text' => __( '确认商务条款、数量、图案和交期。', 'fragrance-trade' ),
'b2b_process_7_title' => __( '生产与质检', 'fragrance-trade' ),
'b2b_process_7_text' => __( '按计划生产、检验并同步关键节点。', 'fragrance-trade' ),
'b2b_process_8_title' => __( '发货与售后', 'fragrance-trade' ),
'b2b_process_8_text' => __( '准备发货资料,保留已确认的项目档案。', 'fragrance-trade' ),
'b2b_show_projects' => true,
'b2b_projects_title' => __( '典型项目案例', 'fragrance-trade' ),
'b2b_projects_text' => __( '以下卡片说明不同类型的客户如何与工厂合作,不代表已验证的客户业绩。', 'fragrance-trade' ),
'b2b_project_1_title' => __( '新品牌首批产品', 'fragrance-trade' ),
'b2b_project_1_meta' => __( '从概念到首批产品', 'fragrance-trade' ),
'b2b_project_1_text' => __( '协调膜料选型、规格确定、样品制作和上市包装。', 'fragrance-trade' ),
'b2b_project_2_title' => __( '经销商贴牌定制', 'fragrance-trade' ),
'b2b_project_2_meta' => __( '规格驱动的定制开发', 'fragrance-trade' ),
'b2b_project_2_text' => __( '将渠道定位、目标成本和货架需求转化为可控的产品方案。', 'fragrance-trade' ),
'b2b_project_3_title' => __( '定制礼品装项目', 'fragrance-trade' ),
'b2b_project_3_meta' => __( '产品与包装协调', 'fragrance-trade' ),
'b2b_project_3_text' => __( '围绕交付窗口协调膜料、套装配置和礼品包装。', 'fragrance-trade' ),
'b2b_show_documents' => true,
'b2b_documents_title' => __( '文档与出口支持', 'fragrance-trade' ),
'b2b_documents_text' => __( '可提供的文件视产品、目的地和项目而定。下单前请确认所需文件清单。', 'fragrance-trade' ),
'b2b_document_1_title' => __( '产品规格书', 'fragrance-trade' ),
'b2b_document_1_text' => __( '已确认的膜料、规格和包装参考文件。', 'fragrance-trade' ),
'b2b_document_2_title' => __( '批次质检报告', 'fragrance-trade' ),
'b2b_document_2_text' => __( '按约定的项目要求维护的生产和检验记录。', 'fragrance-trade' ),
'b2b_document_3_title' => __( '材料证明文件', 'fragrance-trade' ),
'b2b_document_3_text' => __( '如适用且可提供,包括 MSDS 或 COA 等支持性文件。', 'fragrance-trade' ),
'b2b_document_4_title' => __( '出口贸易文件', 'fragrance-trade' ),
'b2b_document_4_text' => __( '按目的地需求协调装箱单、运输标识和出口信息。', 'fragrance-trade' ),
'b2b_show_faq' => true,
'b2b_faq_title' => __( '常见问题', 'fragrance-trade' ),
'b2b_faq_1_question' => __( '最低起订量是多少?', 'fragrance-trade' ),
'b2b_faq_1_answer' => __( '起订量取决于膜料、颜色、厚度和包装方案。请提交目标配置以获取准确答复。', 'fragrance-trade' ),
'b2b_faq_2_question' => __( '可以从现有颜色中选择吗?', 'fragrance-trade' ),
'b2b_faq_2_answer' => __( '现有颜色可缩短开发周期。所选膜料和颜色通过打样确认后进入量产。', 'fragrance-trade' ),
'b2b_faq_3_question' => __( '可以按我的参考样品生产吗?', 'fragrance-trade' ),
'b2b_faq_3_answer' => __( '参考样品可用于评估开发方向。精确匹配的可行性需评审后确认。', 'fragrance-trade' ),
'b2b_faq_4_question' => __( '打样需要多长时间?', 'fragrance-trade' ),
'b2b_faq_4_answer' => __( '时间取决于膜料调配、颜色开发和包装复杂度。评审需求后会提供项目时间表。', 'fragrance-trade' ),
'b2b_faq_5_question' => __( '膜料和包装可以定制吗?', 'fragrance-trade' ),
'b2b_faq_5_answer' => __( '项目可包含膜料选型、颜色、厚度、图案、标签和外包装选项,具体取决于数量和供应商可行性。', 'fragrance-trade' ),
'b2b_faq_6_question' => __( '量产前可以申请样品吗?', 'fragrance-trade' ),
'b2b_faq_6_answer' => __( '可以。打样范围、费用和交付方式按项目需求确认。', 'fragrance-trade' ),
'b2b_faq_7_question' => __( '报价需要提供哪些信息?', 'fragrance-trade' ),
'b2b_faq_7_answer' => __( '请提供联系方式、所需产品或服务及简要需求说明,其余规格可在后续跟进中补充。', 'fragrance-trade' ),
'b2b_faq_8_question' => __( '出口可以提供哪些文件?', 'fragrance-trade' ),
'b2b_faq_8_answer' => __( '文件清单取决于产品和目的地。请告知进口市场,以便下单前确认可提供的支持文件。', 'fragrance-trade' ),
'b2b_rfq_title' => __( '提交简单询价', 'fragrance-trade' ),
'b2b_rfq_text' => __( '提供一些基本信息,我们的项目团队将跟进详细规格、数量和包装需求。', 'fragrance-trade' ),
'b2b_rfq_button_label' => __( '发送询价', 'fragrance-trade' ),
'inquiry_email' => '',
'whatsapp' => '',
'facebook_url' => '',
'twitter_url' => '',
'youtube_url' => '',
'linkedin_url' => '',
'instagram_social_url' => '',
'footer_text' => __( '为全球品牌和采购商提供汽车贴膜定制制造服务。', 'fragrance-trade' ),
);
}
+85
View File
@@ -0,0 +1,85 @@
<?php
/** Reusable B2B theme helpers. @package Fragrance_Trade */
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function fragrance_trade_get_default( $key, $fallback = '' ) {
$defaults = fragrance_trade_defaults();
return array_key_exists( $key, $defaults ) ? $defaults[ $key ] : $fallback;
}
function fragrance_trade_get_mod( $key, $fallback = null ) {
$default = null === $fallback ? fragrance_trade_get_default( $key ) : $fallback;
return get_theme_mod( $key, $default );
}
function fragrance_trade_asset_uri( $relative_path ) {
return trailingslashit( get_template_directory_uri() ) . 'assets/' . ltrim( $relative_path, '/' );
}
function fragrance_trade_image_uri( $setting, $fallback_filename ) {
$image = fragrance_trade_get_mod( $setting, '' );
return $image ? $image : fragrance_trade_asset_uri( 'images/' . $fallback_filename );
}
function fragrance_trade_show_section( $setting ) {
return (bool) fragrance_trade_get_mod( $setting, true );
}
function fragrance_trade_fallback_menu( $args = array() ) {
$items = array(
'#intro' => __( '首页', 'fragrance-trade' ),
'#services' => __( '服务', 'fragrance-trade' ),
'#capabilities' => __( '产品', 'fragrance-trade' ),
'#factory' => __( '工厂', 'fragrance-trade' ),
'#quality' => __( '品质', 'fragrance-trade' ),
'#process' => __( '流程', 'fragrance-trade' ),
'#rfq' => __( '获取报价', 'fragrance-trade' ),
);
$class = isset( $args['menu_class'] ) ? $args['menu_class'] : 'navbar-nav';
echo '<ul class="' . esc_attr( $class ) . '">';
foreach ( $items as $anchor => $label ) {
$url = is_front_page() ? $anchor : home_url( '/' ) . $anchor;
echo '<li class="nav-item"><a class="nav-link p-0" href="' . esc_url( $url ) . '">' . esc_html( $label ) . '</a></li>';
}
echo '</ul>';
}
function fragrance_trade_whatsapp_number() {
return preg_replace( '/[^0-9]/', '', (string) fragrance_trade_get_mod( 'whatsapp', '' ) );
}
function fragrance_trade_inquiry_email() {
$email = sanitize_email( fragrance_trade_get_mod( 'inquiry_email', '' ) );
return is_email( $email ) ? $email : sanitize_email( get_option( 'admin_email' ) );
}
function fragrance_trade_get_inquiry_url( $project = '' ) {
$message = $project
? sprintf( __( '您好,我想咨询 %s 的 OEM/ODM 项目。', 'fragrance-trade' ), $project )
: __( '您好,我想咨询汽车贴膜定制项目。', 'fragrance-trade' );
$number = fragrance_trade_whatsapp_number();
if ( $number ) {
return add_query_arg( 'text', $message, 'https://wa.me/' . $number );
}
return 'mailto:' . antispambot( fragrance_trade_inquiry_email() ) . '?subject=' . rawurlencode( __( '汽车贴膜项目询价', 'fragrance-trade' ) ) . '&body=' . rawurlencode( $message );
}
function fragrance_trade_get_notice() {
if ( empty( $_GET['fragrance_notice'] ) ) {
return '';
}
return sanitize_key( wp_unslash( $_GET['fragrance_notice'] ) );
}
function fragrance_trade_notice_message( $code ) {
$messages = array(
'success' => __( '感谢您的提交,项目需求已发送。', 'fragrance-trade' ),
'invalid' => __( '请检查必填项后重新提交。', 'fragrance-trade' ),
'rate_limited' => __( '请稍候片刻再重新提交。', 'fragrance-trade' ),
'mail_failed' => __( '发送失败,请通过邮件或 WhatsApp 联系我们。', 'fragrance-trade' ),
);
return isset( $messages[ $code ] ) ? $messages[ $code ] : '';
}
+87
View File
@@ -0,0 +1,87 @@
<?php
/** Secure B2B RFQ handling. @package Fragrance_Trade */
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function fragrance_trade_post_value( $key ) {
if ( ! isset( $_POST[ $key ] ) || ! is_scalar( $_POST[ $key ] ) ) {
return '';
}
return (string) wp_unslash( $_POST[ $key ] );
}
function fragrance_trade_limit_text( $value, $length ) {
return function_exists( 'mb_substr' ) ? mb_substr( $value, 0, $length ) : substr( $value, 0, $length );
}
function fragrance_trade_form_redirect_url() {
$fallback = home_url( '/' );
$referer = wp_get_referer();
return wp_validate_redirect( $referer ? $referer : $fallback, $fallback );
}
function fragrance_trade_redirect_notice( $notice ) {
$url = remove_query_arg( 'fragrance_notice', fragrance_trade_form_redirect_url() );
$url = add_query_arg( 'fragrance_notice', sanitize_key( $notice ), $url );
wp_safe_redirect( $url . '#rfq' );
exit;
}
function fragrance_trade_is_rate_limited( $action ) {
$address = isset( $_SERVER['REMOTE_ADDR'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) ) : 'unknown';
$key = 'fragrance_' . sanitize_key( $action ) . '_' . substr( hash( 'sha256', $address . wp_salt( 'nonce' ) ), 0, 32 );
if ( get_transient( $key ) ) {
return true;
}
set_transient( $key, 1, MINUTE_IN_SECONDS );
return false;
}
function fragrance_trade_honeypot_filled() {
return '' !== trim( fragrance_trade_post_value( 'fragrance_website' ) );
}
function fragrance_trade_handle_rfq() {
check_admin_referer( 'fragrance_rfq', 'fragrance_rfq_nonce' );
if ( fragrance_trade_honeypot_filled() ) {
fragrance_trade_redirect_notice( 'invalid' );
}
if ( fragrance_trade_is_rate_limited( 'rfq' ) ) {
fragrance_trade_redirect_notice( 'rate_limited' );
}
$fields = array(
'name' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'name' ) ), 100 ),
'email' => fragrance_trade_limit_text( sanitize_email( fragrance_trade_post_value( 'email' ) ), 190 ),
'company' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'company' ) ), 150 ),
'whatsapp' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'whatsapp' ) ), 100 ),
'product_type' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'product_type' ) ), 150 ),
'message' => fragrance_trade_limit_text( sanitize_textarea_field( fragrance_trade_post_value( 'message' ) ), 2000 ),
);
if ( ! $fields['name'] || ! is_email( $fields['email'] ) || ! $fields['product_type'] || ! $fields['message'] ) {
fragrance_trade_redirect_notice( 'invalid' );
}
$labels = array(
'name' => __( '姓名', 'fragrance-trade' ), 'email' => __( '企业邮箱', 'fragrance-trade' ),
'company' => __( '公司名称', 'fragrance-trade' ), 'whatsapp' => __( 'WhatsApp 或电话', 'fragrance-trade' ),
'product_type' => __( '需求产品或服务', 'fragrance-trade' ), 'message' => __( '简要需求描述', 'fragrance-trade' ),
);
$body_lines = array();
foreach ( $labels as $key => $label ) {
$body_lines[] = $label . ': ' . ( $fields[ $key ] ? $fields[ $key ] : __( '未提供', 'fragrance-trade' ) );
}
$site_name = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
$safe_name = str_replace( array( "\r", "\n" ), ' ', $fields['name'] );
$safe_email = str_replace( array( "\r", "\n" ), '', $fields['email'] );
$context = $fields['company'] ? $fields['company'] : $fields['product_type'];
$subject = sprintf( '[%s] %s - %s', $site_name, __( '汽车贴膜项目询价', 'fragrance-trade' ), $context );
$headers = array( 'Content-Type: text/plain; charset=UTF-8', 'Reply-To: ' . $safe_name . ' <' . $safe_email . '>' );
$sent = wp_mail( fragrance_trade_inquiry_email(), $subject, implode( "\n\n", $body_lines ), $headers );
fragrance_trade_redirect_notice( $sent ? 'success' : 'mail_failed' );
}
add_action( 'admin_post_fragrance_rfq', 'fragrance_trade_handle_rfq' );
add_action( 'admin_post_nopriv_fragrance_rfq', 'fragrance_trade_handle_rfq' );
+65
View File
@@ -0,0 +1,65 @@
<?php
/**
* Theme setup and frontend assets.
*
* @package Fragrance_Trade
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/** Register theme features and menus. */
function fragrance_trade_setup() {
load_theme_textdomain( 'fragrance-trade', get_template_directory() . '/languages' );
add_theme_support( 'title-tag' );
add_theme_support( 'custom-logo', array( 'height' => 96, 'width' => 260, 'flex-height' => true, 'flex-width' => true ) );
add_theme_support( 'post-thumbnails' );
add_theme_support( 'automatic-feed-links' );
add_theme_support( 'responsive-embeds' );
add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'style', 'script' ) );
add_image_size( 'fragrance-capability', 760, 720, true );
register_nav_menus(
array(
'primary' => __( '主导航', 'fragrance-trade' ),
)
);
}
add_action( 'after_setup_theme', 'fragrance_trade_setup' );
/**
* Return a cache-busting version for a local theme asset.
*
* @param string $relative_path Path relative to the theme root.
* @param string $fallback Version used when the file cannot be read.
* @return string
*/
function fragrance_trade_asset_version( $relative_path, $fallback ) {
$file = get_theme_file_path( '/' . ltrim( $relative_path, '/' ) );
return file_exists( $file ) ? (string) filemtime( $file ) : $fallback;
}
/** Load theme styles and scripts through the WordPress dependency system. */
function fragrance_trade_enqueue_assets() {
$version = wp_get_theme()->get( 'Version' );
wp_enqueue_style( 'fragrance-bootstrap', 'https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/css/bootstrap.min.css', array(), '5.3.0-alpha3' );
wp_enqueue_style( 'fragrance-fonts', 'https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@200;300;400;500;600;700&family=Jost:wght@200;300;400;500&family=Noto+Sans+SC:wght@300;400;500;700&display=swap', array(), null );
wp_enqueue_style( 'fragrance-normalize', get_template_directory_uri() . '/assets/css/normalize.css', array(), fragrance_trade_asset_version( 'assets/css/normalize.css', $version ) );
wp_enqueue_style( 'fragrance-vendor', get_template_directory_uri() . '/assets/css/vendor.css', array(), fragrance_trade_asset_version( 'assets/css/vendor.css', $version ) );
wp_enqueue_style( 'fragrance-base', get_stylesheet_uri(), array( 'fragrance-bootstrap', 'fragrance-vendor' ), fragrance_trade_asset_version( 'style.css', $version ) );
wp_enqueue_style( 'fragrance-theme', get_template_directory_uri() . '/assets/css/theme.css', array( 'fragrance-base' ), fragrance_trade_asset_version( 'assets/css/theme.css', $version ) );
wp_enqueue_script( 'fragrance-bootstrap', 'https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/js/bootstrap.bundle.min.js', array(), '5.3.0-alpha3', true );
wp_enqueue_script( 'fragrance-plugins', get_template_directory_uri() . '/assets/js/plugins.js', array( 'jquery' ), fragrance_trade_asset_version( 'assets/js/plugins.js', $version ), true );
wp_enqueue_script( 'fragrance-theme', get_template_directory_uri() . '/assets/js/theme.js', array( 'jquery', 'fragrance-bootstrap', 'fragrance-plugins' ), fragrance_trade_asset_version( 'assets/js/theme.js', $version ), true );
wp_localize_script(
'fragrance-theme',
'fragranceTrade',
array(
'motionQuery' => '(prefers-reduced-motion: reduce)',
)
);
}
add_action( 'wp_enqueue_scripts', 'fragrance_trade_enqueue_assets' );