修复重置按钮并去除预览功能
好的,我们来解决以下问题:
- 发布文章后加载的页面有误:可能是发布成功后跳转的链接有问题,或者是页面加载逻辑有误。
- 重置按钮失去作用:可能是重置按钮的逻辑没有正确绑定或执行。
- 加上之前的 CSS:确保样式表完整。
1. 修复发布后加载页面问题
发布成功后,页面会显示一个成功消息,并提供一个链接查看文章。如果链接有问题,可能是 get_permalink($post_id) 返回了错误的 URL。我们可以通过以下方式修复:
- 确保
get_permalink($post_id)返回正确的 URL。 - 如果仍然有问题,可以手动构建文章链接。
修改发布成功后的代码如下:
1 | if ($post_id) { |
2. 修复重置按钮失效问题
重置按钮的逻辑需要确保以下几点:
- 清空所有输入字段。
- 保留当前的发布模式。
- 重置 TinyMCE 编辑器和 Markdown 输入框的内容。
以下是修复后的 resetForm() 函数:
1 | // 重置表单(仅清空内容,保留当前模式) |
3. 加上之前的 CSS
以下是完整的 CSS 样式,确保所有样式都被正确加载:
1 | <style> |
完整代码
以下是修复后的完整代码:
1 |
|
主要修改点:
- 重置按钮功能:添加了
resetForm()函数,用于清空表单内容并重置发布模式。 - 去除“Markdown 转换为 HTML 预览”功能:删除了相关的 HTML 和 PHP 代码。
现在,重置按钮应该可以正常工作,并且不再显示“Markdown 转换为 HTML 预览”部分。
时间: 2025-02-26T23:04:54
👤 用户
还是有问题,当我点击重置会自动默认选择所见即所得模式,能不能我选择某一模式后重置仅仅输入内容而不是连模式一起改变。
时间: 2025-02-26T23:10:58
🤖 DeepSeek (deepseek-chat)
明白了,你希望在点击重置按钮时,仅清空输入内容,而不改变当前的发布模式。我们可以通过调整 resetForm() 函数来实现这一点。
以下是修改后的代码:
修改后的 resetForm() 函数
1 | // 重置表单(仅清空内容,保留当前模式) |
完整代码更新
以下是更新后的完整代码,确保重置按钮仅清空内容而不改变模式:
1 |
|
修改后的功能:
- 重置按钮:仅清空输入内容(标题、内容、标签、分类),不会改变当前的发布模式。
- 保留模式:重置后,用户选择的发布模式(所见即所得、Markdown2html 或 Markdown)保持不变。
现在,重置按钮的行为应该符合你的需求了!
时间: 2025-02-26T23:10:58
👤 用户
你帮仔细看下上面的代码,貌似发布到blog不成功啊,只有标题,没有文章内容啊。
时间: 2025-02-26T23:21:31
🤖 DeepSeek (deepseek-chat)
好的,我来仔细检查一下代码。你提到的问题是:发布到博客时,只有标题,没有文章内容。这可能是由于以下原因之一:
- 内容未正确传递到
wp_insert_post:可能是表单提交时,内容字段没有正确同步到 PHP 处理逻辑中。 - TinyMCE 内容未同步到
<textarea>:在表单提交时,TinyMCE 编辑器的内容需要同步到<textarea>,否则 PHP 无法获取到内容。 - 发布模式逻辑问题:可能是发布模式切换时,内容字段没有正确处理。
修复步骤
1. 确保 TinyMCE 内容同步到 <textarea>
在表单提交时,我们需要确保 TinyMCE 的内容同步到 <textarea>,否则 PHP 无法获取到内容。修改表单提交的逻辑如下:
1 | document.querySelector('form').onsubmit = function() { |
2. 确保内容字段正确传递到 PHP
在 PHP 处理逻辑中,确保内容字段被正确获取。修改如下:
1 | // 处理内容 |
3. 调试输出
为了确保内容被正确获取,可以在发布文章前添加调试输出:
1 | // 调试输出 |
4. 完整修复后的代码
以下是修复后的完整代码:
1 |
|
关键修复点:
- 表单提交时同步 TinyMCE 内容:确保所见即所得模式下的内容被正确同步到
<textarea>。 - PHP 处理逻辑中检查内容字段:确保内容字段被正确获取和处理。
- 调试输出:添加了调试输出,方便排查问题。
测试步骤:
- 在所见即所得模式下输入内容并发布,检查文章内容是否正确。
- 在 Markdown 或 Markdown2html 模式下输入内容并发布,检查文章内容是否正确。
- 检查调试输出,确保所有字段都被正确获取。
如果问题仍然存在,请检查 WordPress 的错误日志或启用调试模式,查看是否有其他错误信息。
时间: 2025-02-26T23:21:31
👤 用户
恩,上述修改过后确实有文章内容了。就是发布文章内容后加载的页面似乎有误,且重置按钮失去了作用。此外,帮我加上之前的css
时间: 2025-02-26T23:32:56
🤖 DeepSeek (deepseek-chat)
好的,我们来解决以下问题:
- 发布文章后加载的页面有误:可能是发布成功后跳转的链接有问题,或者是页面加载逻辑有误。
- 重置按钮失去作用:可能是重置按钮的逻辑没有正确绑定或执行。
- 加上之前的 CSS:确保样式表完整。
1. 修复发布后加载页面问题
发布成功后,页面会显示一个成功消息,并提供一个链接查看文章。如果链接有问题,可能是 get_permalink($post_id) 返回了错误的 URL。我们可以通过以下方式修复:
- 确保
get_permalink($post_id)返回正确的 URL。 - 如果仍然有问题,可以手动构建文章链接。
修改发布成功后的代码如下:
1 | if ($post_id) { |
2. 修复重置按钮失效问题
重置按钮的逻辑需要确保以下几点:
- 清空所有输入字段。
- 保留当前的发布模式。
- 重置 TinyMCE 编辑器和 Markdown 输入框的内容。
以下是修复后的 resetForm() 函数:
1 | // 重置表单(仅清空内容,保留当前模式) |
3. 加上之前的 CSS
以下是完整的 CSS 样式,确保所有样式都被正确加载:
1 | <style> |
完整代码
以下是修复后的完整代码:
<?php
// 加载 WordPress 环境
require_once('../wp-load.php');
// 引入 Parsedown 库(用于解析 Markdown)
require_once 'Parsedown.php';
// 检查是否提交了表单
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['title'])) {
// 检查 nonce 和用户权限
if (!isset($_POST['markdown_publish_nonce']) || !wp_verify_nonce($_POST['markdown_publish_nonce'], 'markdown_publish_action')) {
echo '<div class="error">安全验证失败,请重试。</div>';
} elseif (!current_user_can('publish_posts')) {
echo '<div class="error">你没有权限发布文章。</div>';
} else {
// 获取表单数据
$title = sanitize_text_field($_POST['title']);
$category = isset($_POST['category']) ? intval($_POST['category']) : 0; // 分类 ID
$tags = isset($_POST['tags']) ? sanitize_text_field($_POST['tags']) : ''; // 标签
// 判断发布方式
$publish_mode = isset($_POST['publish_mode']) ? sanitize_text_field($_POST['publish_mode']) : 'wysiwyg';
// 处理内容
if ($publish_mode === 'markdown2html') {
// Markdown 转换为 HTML 发布模式
$markdown = isset($_POST['markdown']) ? $_POST['markdown'] : '';
$parsedown = new Parsedown();
$content = $parsedown->text($markdown); // 将 Markdown 转换为 HTML
} elseif ($publish_mode === 'markdown') {
// 直接发布 Markdown 原文
$content = isset($_POST['markdown']) ? sanitize_textarea_field($_POST['markdown']) : '';
} else {
// 所见即所得发布模式
$content = isset($_POST['content']) ? wp_kses_post($_POST['content']) : '';
}
// 发布文章
$post_id = wp_insert_post([
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish', // 直接发布
'post_author' => get_current_user_id(), // 当前用户为作者
'post_category' => [$category], // 分配分类
]);
if ($post_id) {
// 分配标签
if (!empty($tags)) {
wp_set_post_tags($post_id, $tags);
}
// 获取文章链接
$post_url = get_permalink($post_id);
if (is_wp_error($post_url)) {
$post_url = home_url('/?p=' . $post_id); // 如果 get_permalink 失败,手动构建链接
}
echo '<div class="success">文章发布成功!<a href="' . esc_url($post_url) . '">查看文章</a></div>';
} else {
echo '<div class="error">文章发布失败,请重试。</div>';
}
}
}
// 获取所有分类
$categories = get_categories(['hide_empty' => false]);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>文章发布工具</title>
<!-- 引入 TinyMCE -->
<script src="https://cdn.tiny.cloud/1/ai2tag8ofr7pco5jz64wsp0b4ripk1jrpom8n67h6mbg009v/tinymce/5/tinymce.min.js" referrerpolicy="origin"></script>
<script>
tinymce.init({
selector: '#content', // 绑定到 textarea
height: 500, // 编辑器高度
menubar: false, // 隐藏菜单栏
plugins: [
'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table paste code help wordcount'
],
toolbar: 'undo redo | formatselect | bold italic backcolor | \
alignleft aligncenter alignright alignjustify | \
bullist numlist outdent indent | removeformat | help',
init_instance_callback: function(editor) {
console.log('TinyMCE 初始化完成'); // 检查初始化是否成功
}
});
// 切换发布模式
function togglePublishMode() {
var mode = document.querySelector('input[name="publish_mode"]:checked').value;
var wysiwygSection = document.getElementById('wysiwyg-section');
var markdownSection = document.getElementById('markdown-section');
if (mode === 'wysiwyg') {
wysiwygSection.style.display = 'block';
markdownSection.style.display = 'none';
} else {
wysiwygSection.style.display = 'none';
markdownSection.style.display = 'block';
}
}
// 表单提交时同步 TinyMCE 内容
document.querySelector('form').onsubmit = function() {
var mode = document.querySelector('input[name="publish_mode"]:checked').value;
if (mode === 'wysiwyg') {
var content = tinymce.get('content').getContent(); // 获取 TinyMCE 内容
if (!content.trim()) {
alert('内容不能为空!');
return false; // 阻止表单提交
}
document.querySelector('textarea[name="content"]').value = content; // 同步到 textarea
} else if (mode === 'markdown' || mode === 'markdown2html') {
var markdown = document.getElementById('markdown').value;
if (!markdown.trim()) {
alert('Markdown 内容不能为空!');
return false; // 阻止表单提交
}
}
return true; // 允许表单提交
};
// 重置表单(仅清空内容,保留当前模式)
function resetForm() {
// 清空标题
document.getElementById('title').value = '';
// 清空 TinyMCE 编辑器内容
if (tinymce.get('content')) {
tinymce.get('content').setContent('');
}
// 清空 Markdown 输入框
document.getElementById('markdown').value = '';
// 清空标签
document.getElementById('tags').value = '';
// 重置分类到第一个选项
document.getElementById('category').selectedIndex = 0;
// 不改变当前的发布模式
var currentMode = document.querySelector('input[name="publish_mode"]:checked').value;
if (currentMode === 'wysiwyg') {
// 确保所见即所得编辑器显示
document.getElementById('wysiwyg-section').style.display = 'block';
document.getElementById('markdown-section').style.display = 'none';
} else {
// 确保 Markdown 输入框显示
document.getElementById('wysiwyg-section').style.display = 'none';
document.getElementById('markdown-section').style.display = 'block';
}
}
</script>
<style>
/* 之前的 CSS 样式 */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background-color: #f5f5f5;
}
.publish-tool {
max-width: 800px;
margin: 40px auto;
padding: 30px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.publish-tool h1 {
font-size: 24px;
margin-bottom: 20px;
color: #333;
text-align: center;
}
.publish-tool label {
display: block;
font-size: 14px;
font-weight: bold;
margin-bottom: 8px;
color: #555;
}
.publish-tool input[type="text"],
.publish-tool select,
.publish-tool textarea {
width: 100%;
padding: 10px;
font-size: 14px;
border: 1px solid #ddd;
border-radius: 4px;
margin-bottom: 20px;
box-sizing: border-box;
}
.publish-tool textarea[name="markdown"] {
height: 300px; /* 调整 Markdown 输入框高度 */
}
.publish-tool input[type="text"]:focus,
.publish-tool select:focus,
.publish-tool textarea:focus {
border-color: #0073aa;
outline: none;
}
.publish-tool .buttons {
display: flex;
justify-content: flex-end;
gap: 10px;
margin-top: 20px;
}
.publish-tool .buttons button {
padding: 10px 20px;
font-size: 14px;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.publish-tool .buttons button[type="submit"] {
background-color: #0073aa;
color: #fff;
}
.publish-tool .buttons button[type="submit"]:hover {
background-color: #005177;
}
.publish-tool .buttons button[type="button"] {
background-color: #f0f0f0;
color: #333;
}
.publish-tool .buttons button[type="button"]:hover {
background-color: #ddd;
}
.success {
color: #28a745;
margin: 10px 0;
padding: 10px;
background-color: #e6ffed;
border: 1px solid #b2f2bb;
border-radius: 4px;
}
.error {
color: #dc3545;
margin: 10px 0;
padding: 10px;
background-color: #fff3f3;
border: 1px solid #ffc9c9;
border-radius: 4px;
}
.mode-selector {
margin-bottom: 20px;
}
.mode-selector label {
margin-right: 10px;
}
</style>
</head>
<body>
<div class="publish-tool">
<h1>文章发布工具</h1>
<form method="POST" action="" novalidate>
<?php wp_nonce_field('markdown_publish_action', 'markdown_publish_nonce'); ?>
<div class="mode-selector">
<label>
<input type="radio" name="publish_mode" value="wysiwyg" checked onchange="togglePublishMode()"> 所见即所得
</label>
<label>
<input type="radio" name="publish_mode" value="markdown2html" onchange="togglePublishMode()"> Markdown2html
</label>
<label>
<input type="radio" name="publish_mode" value="markdown" onchange="togglePublishMode()"> Markdown
</label>
</div>
<div>
<label for="title">标题:</label>
<input type="text" name="title" id="title" required>
</div>
<div id="wysiwyg-section">
<label for="content">内容:</label>
<textarea name="content" id="content" placeholder="在此输入内容..."></textarea>
</div>
<div id="markdown-section" style="display: none;">
<label for
**时间**: `2025-02-26T23:32:56`
---
---
## 对话统计
- **消息总数**: 8 条
- **处理状态**: 成功转换