文章目录[隐藏]
一步步教你,集成在线法律文书生成与合同智能审查工具到网站,通过WordPress程序的代码二次开发实现常用互联网小工具功能
引言:数字化时代下的法律工具集成需求
在当今数字化快速发展的时代,越来越多的企业和个人网站需要集成专业工具来提升用户体验和服务价值。特别是法律相关服务,如在线法律文书生成和合同智能审查,已成为许多商业网站、法律服务平台和企业门户的必备功能。通过将这些专业工具集成到网站中,不仅可以为用户提供即时、便捷的法律服务,还能显著提升网站的专业性和实用性。
WordPress作为全球最流行的内容管理系统,以其强大的扩展性和灵活性,成为实现这类功能集成的理想平台。本文将详细介绍如何通过WordPress代码二次开发,将在线法律文书生成与合同智能审查工具集成到您的网站中,并探讨如何实现其他常用互联网小工具功能,帮助您打造一个功能全面、用户体验卓越的专业网站。
第一部分:准备工作与环境搭建
1.1 确定需求与功能规划
在开始技术实现之前,首先需要明确您的具体需求:
- 法律文书生成功能:确定需要支持哪些类型的法律文书(如劳动合同、租赁合同、保密协议等)
- 合同智能审查功能:明确审查标准、风险点识别和修改建议的详细程度
- 用户权限管理:区分普通用户、会员用户和管理员的不同权限
- 数据安全与隐私保护:确保用户上传的合同文件和个人信息得到充分保护
- 界面与用户体验:设计直观易用的操作界面和流畅的用户流程
1.2 开发环境搭建
为了进行WordPress代码二次开发,您需要准备以下环境:
- 本地开发环境:安装XAMPP、MAMP或Local by Flywheel等本地服务器环境
- WordPress安装:下载最新版WordPress并完成基本配置
- 代码编辑器:选择适合的代码编辑器,如VS Code、Sublime Text或PHPStorm
- 版本控制:设置Git仓库以管理代码版本
- 调试工具:安装Query Monitor、Debug Bar等WordPress调试插件
1.3 创建自定义插件框架
为了避免主题更新导致功能丢失,我们建议通过创建自定义插件的方式实现功能:
<?php
/**
* Plugin Name: 法律工具集成套件
* Plugin URI: https://yourwebsite.com/
* Description: 集成在线法律文书生成与合同智能审查工具
* Version: 1.0.0
* Author: 您的名称
* License: GPL v2 or later
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
// 定义插件常量
define('LEGAL_TOOLS_VERSION', '1.0.0');
define('LEGAL_TOOLS_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('LEGAL_TOOLS_PLUGIN_URL', plugin_dir_url(__FILE__));
// 初始化插件
require_once LEGAL_TOOLS_PLUGIN_DIR . 'includes/class-legal-tools-init.php';
第二部分:在线法律文书生成功能实现
2.1 文书模板管理系统
首先,我们需要创建一个文书模板管理系统,用于存储和管理各种法律文书模板:
// 创建自定义文章类型用于存储文书模板
function legal_tools_register_document_type() {
$labels = array(
'name' => '法律文书模板',
'singular_name' => '文书模板',
'menu_name' => '文书模板',
'add_new' => '添加模板',
'add_new_item' => '添加新模板',
'edit_item' => '编辑模板',
'new_item' => '新模板',
'view_item' => '查看模板',
'search_items' => '搜索模板',
'not_found' => '未找到模板',
'not_found_in_trash' => '回收站中无模板'
);
$args = array(
'labels' => $labels,
'public' => false,
'publicly_queryable' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'document-template'),
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => false,
'menu_position' => 25,
'menu_icon' => 'dashicons-media-document',
'supports' => array('title', 'editor', 'custom-fields')
);
register_post_type('document_template', $args);
}
add_action('init', 'legal_tools_register_document_type');
2.2 动态表单生成系统
文书生成的核心是根据用户输入动态填充模板内容。我们需要创建一个表单生成系统:
// 表单生成器类
class Legal_Document_Form_Builder {
private $template_id;
private $fields;
public function __construct($template_id) {
$this->template_id = $template_id;
$this->fields = $this->get_template_fields($template_id);
}
// 获取模板字段定义
private function get_template_fields($template_id) {
$fields_meta = get_post_meta($template_id, '_document_fields', true);
if (empty($fields_meta)) {
// 默认字段结构
$fields = array(
'parties' => array(
'label' => '合同双方信息',
'type' => 'section',
'fields' => array(
'party_a_name' => array(
'label' => '甲方名称',
'type' => 'text',
'required' => true,
'placeholder' => '请输入甲方全称'
),
'party_b_name' => array(
'label' => '乙方名称',
'type' => 'text',
'required' => true,
'placeholder' => '请输入乙方全称'
)
)
),
'contract_terms' => array(
'label' => '合同条款',
'type' => 'section',
'fields' => array(
'effective_date' => array(
'label' => '生效日期',
'type' => 'date',
'required' => true
),
'contract_period' => array(
'label' => '合同期限(月)',
'type' => 'number',
'required' => true,
'min' => 1,
'max' => 120
)
)
)
);
// 保存默认字段到模板
update_post_meta($template_id, '_document_fields', $fields);
return $fields;
}
return $fields_meta;
}
// 渲染表单
public function render_form() {
$output = '<form id="legal-document-form" class="legal-document-form" method="post">';
$output .= wp_nonce_field('generate_legal_document', 'legal_document_nonce', true, false);
$output .= '<input type="hidden" name="template_id" value="' . esc_attr($this->template_id) . '">';
foreach ($this->fields as $section_key => $section) {
if ($section['type'] === 'section') {
$output .= '<div class="form-section">';
$output .= '<h3 class="section-title">' . esc_html($section['label']) . '</h3>';
if (isset($section['fields']) && is_array($section['fields'])) {
foreach ($section['fields'] as $field_key => $field) {
$output .= $this->render_field($field_key, $field);
}
}
$output .= '</div>';
} else {
$output .= $this->render_field($section_key, $section);
}
}
$output .= '<div class="form-submit">';
$output .= '<button type="submit" class="btn btn-primary">生成文书</button>';
$output .= '</div>';
$output .= '</form>';
return $output;
}
// 渲染单个字段
private function render_field($field_key, $field) {
$required = isset($field['required']) && $field['required'] ? ' required' : '';
$field_html = '';
switch ($field['type']) {
case 'text':
case 'email':
case 'number':
$field_html = sprintf(
'<div class="form-group">
<label for="%s">%s</label>
<input type="%s" id="%s" name="%s" class="form-control"%s placeholder="%s">
</div>',
esc_attr($field_key),
esc_html($field['label']),
esc_attr($field['type']),
esc_attr($field_key),
esc_attr($field_key),
$required,
isset($field['placeholder']) ? esc_attr($field['placeholder']) : ''
);
break;
case 'textarea':
$field_html = sprintf(
'<div class="form-group">
<label for="%s">%s</label>
<textarea id="%s" name="%s" class="form-control"%s rows="4" placeholder="%s"></textarea>
</div>',
esc_attr($field_key),
esc_html($field['label']),
esc_attr($field_key),
esc_attr($field_key),
$required,
isset($field['placeholder']) ? esc_attr($field['placeholder']) : ''
);
break;
case 'select':
if (isset($field['options']) && is_array($field['options'])) {
$options_html = '';
foreach ($field['options'] as $option_value => $option_label) {
$options_html .= sprintf(
'<option value="%s">%s</option>',
esc_attr($option_value),
esc_html($option_label)
);
}
$field_html = sprintf(
'<div class="form-group">
<label for="%s">%s</label>
<select id="%s" name="%s" class="form-control"%s>
%s
</select>
</div>',
esc_attr($field_key),
esc_html($field['label']),
esc_attr($field_key),
esc_attr($field_key),
$required,
$options_html
);
}
break;
}
return $field_html;
}
}
2.3 模板渲染与文档生成
当用户提交表单后,我们需要将用户数据填充到模板中,生成最终的法律文书:
// 文档生成处理器
class Legal_Document_Generator {
public function process_generation() {
// 验证非ce和权限
if (!isset($_POST['legal_document_nonce']) ||
!wp_verify_nonce($_POST['legal_document_nonce'], 'generate_legal_document')) {
return false;
}
// 获取模板ID和用户数据
$template_id = intval($_POST['template_id']);
$user_data = $_POST;
unset($user_data['legal_document_nonce']);
unset($user_data['template_id']);
// 获取模板内容
$template_post = get_post($template_id);
if (!$template_post || $template_post->post_type !== 'document_template') {
return false;
}
// 获取模板HTML
$template_content = $template_post->post_content;
// 替换模板变量
$generated_content = $this->replace_template_variables($template_content, $user_data);
// 保存生成的文档
$document_id = $this->save_generated_document($generated_content, $template_id, $user_data);
// 返回文档ID或内容
return array(
'document_id' => $document_id,
'content' => $generated_content
);
}
// 替换模板变量
private function replace_template_variables($template, $data) {
foreach ($data as $key => $value) {
$placeholder = '{{' . $key . '}}';
$template = str_replace($placeholder, esc_html($value), $template);
}
// 替换系统变量
$system_vars = array(
'{{current_date}}' => date('Y年m月d日'),
'{{generation_date}}' => date('Y年m月d日 H:i:s'),
'{{site_name}}' => get_bloginfo('name')
);
foreach ($system_vars as $placeholder => $value) {
$template = str_replace($placeholder, $value, $template);
}
return $template;
}
// 保存生成的文档
private function save_generated_document($content, $template_id, $user_data) {
$user_id = get_current_user_id();
$document_data = array(
'post_title' => '法律文书-' . date('YmdHis'),
'post_content' => $content,
'post_status' => 'private',
'post_type' => 'legal_document',
'post_author' => $user_id,
'meta_input' => array(
'_generated_from_template' => $template_id,
'_generation_data' => $user_data,
'_generation_date' => current_time('mysql'),
'_generated_by_user' => $user_id
)
);
$document_id = wp_insert_post($document_data);
return $document_id;
}
}
第三部分:合同智能审查功能实现
3.1 合同上传与解析系统
合同智能审查的第一步是允许用户上传合同文件并解析其内容:
// 合同上传处理器
class Contract_Upload_Handler {
public function handle_upload() {
// 检查文件上传
if (!isset($_FILES['contract_file']) || $_FILES['contract_file']['error'] !== UPLOAD_ERR_OK) {
return new WP_Error('upload_failed', '文件上传失败');
}
// 验证文件类型
$allowed_types = array('pdf', 'doc', 'docx', 'txt');
$file_ext = pathinfo($_FILES['contract_file']['name'], PATHINFO_EXTENSION);
if (!in_array(strtolower($file_ext), $allowed_types)) {
return new WP_Error('invalid_type', '不支持的文件类型');
}
// 验证文件大小(最大10MB)
$max_size = 10 * 1024 * 1024;
if ($_FILES['contract_file']['size'] > $max_size) {
return new WP_Error('file_too_large', '文件大小超过限制');
}
// 处理上传
$upload_result = $this->process_upload($_FILES['contract_file']);
if (is_wp_error($upload_result)) {
return $upload_result;
}
// 解析合同内容
$parsed_content = $this->parse_contract_content($upload_result['file_path'], $file_ext);
return array(
'file_info' => $upload_result,
'parsed_content' => $parsed_content
);
}
// 处理文件上传
private function process_upload($file) {
$upload_dir = wp_upload_dir();
$legal_dir = $upload_dir['basedir'] . '/legal-contracts/';
// 创建目录
if (!file_exists($legal_dir)) {
wp_mkdir_p($legal_dir);
}
// 生成唯一文件名
$filename = uniqid('contract_') . '_' . sanitize_file_name($file['name']);
$filepath = $legal_dir . $filename;
// 移动文件
if (move_uploaded_file($file['tmp_name'], $filepath)) {
return array(
'file_path' => $filepath,
'file_url' => $upload_dir['baseurl'] . '/legal-contracts/' . $filename,
'file_name' => $filename,
'original_name' => $file['name']
);
}
return new WP_Error('move_failed', '文件保存失败');
}
// 解析合同内容
private function parse_contract_content($file_path, $file_ext) {
$content = '';
switch (strtolower($file_ext)) {
case 'txt':
$content = file_get_contents($file_path);
break;
case 'pdf':
// 使用PDF解析库(需要安装适当的PHP扩展或库)
$content = $this->parse_pdf_content($file_path);
break;
case 'doc':
case 'docx':
// 使用Word文档解析库
$content = $this->parse_word_content($file_path);
break;
}
// 清理和标准化内容
$content = $this->clean_contract_content($content);
return $content;
}
// 清理合同内容
private function clean_contract_content($content) {
// 移除多余空格和换行
$content = preg_replace('/s+/', ' ', $content);
// 提取关键部分(这里可以根据需要扩展)
$sections = $this->extract_contract_sections($content);
return array(
'full_text' => $content,
'sections' => $sections
);
}
// 提取合同章节
private function extract_contract_sections($content) {
$sections = array();
// 常见合同章节模式
$section_patterns = array(
'parties' => '/(双方|甲方|乙方|当事人).*?(?=条款|约定|如下|:)/u',
'effective_date' => '/(生效|起始).*?(d{4}年d{1,2}月d{1,2}日|d{4}.d{1,2}.d{1,2})/u',
+(年|月|日|天))/u',
'payment_terms' => '/(付款|支付|价款).*?(?=违约责任|争议解决|其他)/u',
'liability' => '/(违约|责任).*?(?=争议解决|其他|附则)/u',
'dispute_resolution' => '/(争议|纠纷|仲裁|诉讼).*?(?=其他|附则|签字)/u'
);
foreach ($section_patterns as $section_key => $pattern) {
if (preg_match($pattern, $content, $matches)) {
$sections[$section_key] = $matches[0];
}
}
return $sections;
}
}
### 3.2 智能审查规则引擎
合同审查的核心是规则引擎,用于识别潜在风险和问题:
// 合同审查规则引擎
class Contract_Review_Engine {
private $rules;
private $risk_levels;
public function __construct() {
$this->risk_levels = array(
'high' => '高风险',
'medium' => '中风险',
'low' => '低风险',
'info' => '提示信息'
);
$this->initialize_rules();
}
// 初始化审查规则
private function initialize_rules() {
$this->rules = array(
// 缺失关键条款规则
'missing_essential_clauses' => array(
'name' => '缺失关键条款',
'description' => '检查合同是否缺少必要条款',
'risk_level' => 'high',
'check_method' => 'check_missing_clauses',
'keywords' => array('违约责任', '争议解决', '保密', '不可抗力', '终止条件')
),
// 模糊表述规则
'ambiguous_language' => array(
'name' => '模糊表述',
'description' => '识别合同中可能引起歧义的模糊表述',
'risk_level' => 'medium',
'check_method' => 'check_ambiguous_language',
'patterns' => array(
'/合理的|适当的|必要的/u',
'/重大变化|特殊情况/u',
'/及时通知|尽快办理/u'
)
),
// 权利义务不对等规则
'unbalanced_rights' => array(
'name' => '权利义务不对等',
'description' => '检查合同中双方权利义务是否对等',
'risk_level' => 'high',
'check_method' => 'check_rights_balance',
'indicators' => array(
'exclusive_rights' => array('独家', '排他'),
'unilateral_termination' => array('单方解除', '任意解除'),
'excessive_liability' => array('承担一切损失', '无限责任')
)
),
// 付款条款风险
'payment_risks' => array(
'name' => '付款条款风险',
'description' => '识别付款条款中的潜在风险',
'risk_level' => 'medium',
'check_method' => 'check_payment_terms',
'risk_patterns' => array(
'advance_full_payment' => '/预付全款|全额预付/u',
'vague_payment_time' => '/完成后付款|验收后付款/u',
'no_late_fee' => '/(?<!逾期)付款(?!.*违约金|滞纳金)/u'
)
),
// 法律引用检查
'legal_references' => array(
'name' => '法律引用检查',
'description' => '检查引用的法律法规是否准确有效',
'risk_level' => 'low',
'check_method' => 'check_legal_references',
'valid_laws' => array(
'《中华人民共和国民法典》',
'《中华人民共和国合同法》',
'《中华人民共和国劳动法》'
)
)
);
}
// 执行合同审查
public function review_contract($contract_content) {
$results = array(
'overall_risk' => 'low',
'issues' => array(),
'statistics' => array(
'total_issues' => 0,
'high_risk' => 0,
'medium_risk' => 0,
'low_risk' => 0
),
'recommendations' => array()
);
// 对每个规则执行检查
foreach ($this->rules as $rule_id => $rule) {
$method_name = $rule['check_method'];
if (method_exists($this, $method_name)) {
$rule_results = $this->$method_name($contract_content, $rule);
if (!empty($rule_results)) {
$results['issues'][$rule_id] = array(
'rule_name' => $rule['name'],
'risk_level' => $rule['risk_level'],
'description' => $rule['description'],
'findings' => $rule_results
);
// 更新统计
$results['statistics']['total_issues']++;
$results['statistics'][$rule['risk_level'] . '_risk']++;
}
}
}
// 确定总体风险等级
$results['overall_risk'] = $this->determine_overall_risk($results['statistics']);
// 生成建议
$results['recommendations'] = $this->generate_recommendations($results['issues']);
return $results;
}
// 检查缺失条款
private function check_missing_clauses($content, $rule) {
$missing_clauses = array();
foreach ($rule['keywords'] as $keyword) {
if (strpos($content, $keyword) === false) {
$missing_clauses[] = $keyword;
}
}
if (!empty($missing_clauses)) {
return array(
'message' => '合同可能缺少以下关键条款:' . implode('、', $missing_clauses),
'suggestion' => '建议补充相关条款以明确双方权利义务'
);
}
return array();
}
// 检查模糊表述
private function check_ambiguous_language($content, $rule) {
$ambiguous_phrases = array();
foreach ($rule['patterns'] as $pattern) {
if (preg_match_all($pattern, $content, $matches)) {
$ambiguous_phrases = array_merge($ambiguous_phrases, $matches[0]);
}
}
if (!empty($ambiguous_phrases)) {
$unique_phrases = array_unique($ambiguous_phrases);
return array(
'message' => '发现模糊表述:' . implode('、', array_slice($unique_phrases, 0, 5)),
'suggestion' => '建议将模糊表述具体化、量化,避免未来产生歧义'
);
}
return array();
}
// 确定总体风险等级
private function determine_overall_risk($statistics) {
if ($statistics['high_risk'] > 0) {
return 'high';
} elseif ($statistics['medium_risk'] > 2) {
return 'medium';
} elseif ($statistics['medium_risk'] > 0 || $statistics['low_risk'] > 3) {
return 'low';
} else {
return 'info';
}
}
// 生成建议
private function generate_recommendations($issues) {
$recommendations = array();
// 高风险问题建议
if (isset($issues['missing_essential_clauses'])) {
$recommendations[] = array(
'priority' => 'high',
'content' => '合同缺少关键条款,建议补充相关条款后再签署'
);
}
if (isset($issues['unbalanced_rights'])) {
$recommendations[] = array(
'priority' => 'high',
'content' => '合同权利义务不对等,建议重新协商相关条款'
);
}
// 中风险问题建议
$medium_issues = array_filter($issues, function($issue) {
return $issue['risk_level'] === 'medium';
});
if (!empty($medium_issues)) {
$recommendations[] = array(
'priority' => 'medium',
'content' => '合同中存在多处需要明确的表述,建议进一步细化'
);
}
// 通用建议
$recommendations[] = array(
'priority' => 'info',
'content' => '建议咨询专业律师对合同进行最终审查'
);
// 按优先级排序
usort($recommendations, function($a, $b) {
$priority_order = array('high' => 3, 'medium' => 2, 'low' => 1, 'info' => 0);
return $priority_order[$b['priority']] - $priority_order[$a['priority']];
});
return $recommendations;
}
}
### 3.3 审查结果可视化展示
将审查结果以直观的方式展示给用户:
// 审查结果展示器
class Contract_Review_Display {
public function display_results($review_results) {
$output = '<div class="contract-review-results">';
// 总体风险评估
$output .= $this->display_overall_risk($review_results['overall_risk']);
// 问题列表
$output .= $this->display_issues_list($review_results['issues']);
// 统计信息
$output .= $this->display_statistics($review_results['statistics']);
// 建议
$output .= $this->display_recommendations($review_results['recommendations']);
$output .= '</div>';
return $output;
}
// 显示总体风险评估
private function display_overall_risk($risk_level) {
$risk_classes = array(
'high' => 'risk-high',
'medium' => 'risk-medium',
'low' => 'risk-low',
'info' => 'risk-info'
);
$risk_labels = array(
'high' => '高风险',
'medium' => '中风险',
'low' => '低风险',
'info' => '信息提示'
);
$class = isset($risk_classes[$risk_level]) ? $risk_classes[$risk_level] : 'risk-info';
$label = isset($risk_labels[$risk_level]) ? $risk_labels[$risk_level] : '待评估';
return sprintf(
'<div class="overall-risk %s">
<h3>总体风险评估</h3>
<div class="risk-indicator">
<span class="risk-level">%s</span>
</div>
</div>',
esc_attr($class),
esc_html($label)
);
}
// 显示问题列表
private function display_issues_list($issues) {
if (empty($issues)) {
return '<div class="no-issues">
<h3>审查结果</h3>
<p>未发现明显风险问题,合同结构基本完整。</p>
</div>';
}
$output = '<div class="issues-list">
<h3>发现的问题</h3>
<div class="issues-container">';
foreach ($issues as $issue_id => $issue) {
$output .= $this->display_single_issue($issue_id, $issue);
}
$output .= '</div></div>';
return $output;
}
// 显示单个问题
private function display_single_issue($issue_id, $issue) {
$risk_class = 'risk-' . $issue['risk_level'];
$output = sprintf(
'<div class="issue-item %s" id="issue-%s">
<div class="issue-header">
<h4>%s</h4>
<span class="risk-badge">%s</span>
</div>
<div class="issue-description">
<p>%s</p>',
esc_attr($risk_class),
esc_attr($issue_id),
esc_html($issue['rule_name']),
esc_html($issue['risk_level'] === 'high' ? '高风险' :
($issue['risk_level'] === 'medium' ? '中风险' : '低风险')),
esc_html($issue['description'])
);
if (isset($issue['findings']['message'])) {
$output .= sprintf(
'<div class="issue-finding">
<strong>具体发现:</strong>
<p>%s</p>
</div>',
esc_html($issue['findings']['message'])
);
}
if (isset($issue['findings']['suggestion'])) {
$output .= sprintf(
'<div class="issue-suggestion">
<strong>修改建议:</strong>
<p>%s</p>
</div>',
esc_html($issue['findings']['suggestion'])
);
}
$output .= '</div></div>';
return $output;
}
// 显示统计信息
private function display_statistics($stats) {
return sprintf(
'<div class="review-statistics">
<h3>审查统计</h3>
<div class="stats-grid">
<div class="stat-item">
<span class="stat-number">%d</span>
<span class="stat-label">总问题数</span>
</div>
<div class="stat-item high-risk">
<span class="stat-number">%d</span>
<span class="stat-label">高风险</span>
</div>
<div class="stat-item medium-risk">
<span class="stat-number">%d</span>
<span class="stat-label">中风险</span>
</div>
<div class="stat-item low-risk">
<span class="stat-number">%d</span>
<span class="stat-label">低风险</span>
</div>
</div>
</div>',
esc_html($stats['total_issues']),
esc_html($stats['high_risk']),
esc_html($stats['medium_risk']),
esc_html($stats['low_risk'])
);
}
// 显示建议
private function display_recommendations($recommendations) {
if (empty($recommendations)) {
return '';
}
$output = '<div class="recommendations">
<h3>修改建议</h3>
<div class="recommendations-list">';
foreach ($recommendations as $index => $rec) {
$output .= sprintf(
'<div class="recommendation-item priority-%s">
<span class="recommendation-number">%d.</span>
<div class="recommendation-content">
<p>%s</p>
</div>
</div>',
esc_attr($rec['priority']),
$index + 1,
esc_html($rec['content'])
);
}
$output .= '</div></div>';
return $output;
}
}
## 第四部分:WordPress集成与用户界面
### 4.1 创建短代码系统
为了方便在文章和页面中调用功能,我们创建短代码系统:
// 短代码处理器
class Legal_Tools_Shortcodes {
public function __construct() {
// 注册短代码
add_shortcode('legal_document_generator', array($this, 'document_generator_shortcode'));
add_shortcode('contract_review_tool', array($this, 'contract_review_shortcode'));
add_shortcode('legal_tools_dashboard', array($this, 'dashboard_shortcode'));
}
// 文书生成器短代码
public function document_generator_shortcode($atts) {
$atts = shortcode_atts(array(
'template_id' => 0,
'category' => '',
'title' => '法律文书生成器'
), $atts, 'legal_document_generator');
ob_start();
// 检查用户权限
if (!is_user_logged_in()) {
echo $this->login_prompt();
return ob_get_clean();
}
// 获取模板
$template_id = intval($atts['template_id']);
if ($template_id === 0 && !empty($atts['category'])) {
$template_id = $this->get_template_by_category($atts['category']);
}
if ($template_id === 0) {
// 显示模板选择界面
$this->display_template_selector();
} else {
// 显示指定模板的表单
$this->display_document_form($template_id, $atts['title']);
}
return ob_get_clean();
}
// 合同审查工具短代码
public function contract_review_shortcode($atts) {
$atts = shortcode_atts(array(
'title' => '合同智能审查',
'max_size' => '10',
'allowed_types' => 'pdf,doc,docx,txt'
), $atts, 'contract_review_tool');
ob_start();
// 检查用户权限
if (!is_user_logged_in()) {
echo $this->login_prompt();
return ob_get_clean();
}
// 显示上传表单
$this->display_upload_form($atts);
// 处理上传和审查
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['contract_file'])) {
$this->process_contract_review();
}
return ob_get_clean();
}
// 仪表板短代码
public function dashboard_shortcode($atts) {
$atts = shortcode_atts(array(
'show_documents' => 'true',
'show_reviews' => 'true',
'limit' => '10'
), $atts, 'legal_tools_dashboard');
ob_start();
// 检查用户权限
if (!is_user_logged_in()) {
echo $this->login_prompt();
return ob_get_clean();
}
$user_id = get_current
