You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

282 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 后台管理配置文件
* 包含评论禁用、后台菜单管理、管理员样式等功能
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
/**
* 加载后台样式
*/
function nenghui_admin_style() {
wp_enqueue_style('nenghui-admin-style', get_template_directory_uri() . '/assets/css/admin.css');
}
add_action('admin_enqueue_scripts', 'nenghui_admin_style');
/**
* 禁用评论功能 - 移除评论菜单
* 从后台管理菜单中移除评论管理页面
*/
function disable_comments_admin_menu() {
// 确保全局菜单变量是数组防止foreach错误
global $menu, $submenu;
if (!is_array($menu)) {
$menu = array();
}
if (!is_array($submenu)) {
$submenu = array();
}
remove_menu_page('edit-comments.php');
}
add_action('admin_init', 'disable_comments_admin_menu');
/**
* 禁用评论功能 - 重定向评论页面访问
* 如果用户直接访问评论管理页面,重定向到仪表盘
*/
function disable_comments_admin_menu_redirect() {
global $pagenow;
if ($pagenow === 'edit-comments.php') {
wp_redirect(admin_url());
exit;
}
}
add_action('admin_init', 'disable_comments_admin_menu_redirect');
/**
* 禁用评论功能 - 移除文章类型的评论支持
* 从所有支持评论的文章类型中移除评论和引用通告支持
*/
function disable_comments_post_types_support() {
// 确保在正确的时机调用,避免过早执行
if (!function_exists('get_post_types') || !function_exists('post_type_supports')) {
return;
}
try {
$post_types = get_post_types();
// 增强的数组验证
if (!is_array($post_types)) {
// 记录错误并使用安全的默认值
if (function_exists('nenghui_log_foreach_error')) {
nenghui_log_foreach_error(array(
'error_type' => E_WARNING,
'error_message' => 'get_post_types() returned non-array value: ' . gettype($post_types),
'error_file' => __FILE__,
'error_line' => __LINE__,
'timestamp' => date('Y-m-d H:i:s'),
'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'admin',
'user_agent' => 'disable_comments_post_types_support'
));
}
$post_types = array('post', 'page'); // 安全的默认值
}
if (empty($post_types)) {
return; // 如果没有文章类型,直接返回
}
// 使用安全的 foreach 循环
foreach ($post_types as $post_type) {
// 验证 post_type 是有效的字符串
if (!is_string($post_type) || empty($post_type)) {
continue;
}
// 检查函数是否存在并且文章类型支持评论
if (function_exists('post_type_supports') && post_type_supports($post_type, 'comments')) {
remove_post_type_support($post_type, 'comments');
remove_post_type_support($post_type, 'trackbacks');
}
}
} catch (Exception $e) {
// 捕获任何异常并记录
if (function_exists('nenghui_log_foreach_error')) {
nenghui_log_foreach_error(array(
'error_type' => E_ERROR,
'error_message' => 'Exception in disable_comments_post_types_support: ' . $e->getMessage(),
'error_file' => __FILE__,
'error_line' => __LINE__,
'timestamp' => date('Y-m-d H:i:s'),
'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'admin',
'user_agent' => 'disable_comments_post_types_support'
));
}
}
}
add_action('admin_init', 'disable_comments_post_types_support');
/**
* 禁用评论功能 - 移除工具栏菜单
*/
function disable_comments_admin_bar() {
if (is_admin_bar_showing()) {
remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
}
}
add_action('init', 'disable_comments_admin_bar');
/**
* 禁用评论功能 - 过滤器
*/
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);
add_filter('comments_array', '__return_empty_array', 10, 2);
/**
* 分类图片支持
*/
// 添加分类图片字段
function category_image_add_form_fields($taxonomy) {
?>
<div class="form-field term-group">
<label for="category-image-id">分类图片</label>
<input type="hidden" id="category-image-id" name="category-image-id" class="custom_media_url" value="">
<div id="category-image-wrapper"></div>
<p>
<input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="添加图片" />
<input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="移除图片" />
</p>
</div>
<?php
}
add_action('category_add_form_fields', 'category_image_add_form_fields', 10, 2);
// 编辑分类图片字段
function category_image_edit_form_fields($term, $taxonomy) {
$image_id = get_term_meta($term->term_id, 'category-image-id', true);
?>
<tr class="form-field term-group-wrap">
<th scope="row">
<label for="category-image-id">分类图片</label>
</th>
<td>
<input type="hidden" id="category-image-id" name="category-image-id" value="<?php echo esc_attr($image_id); ?>">
<div id="category-image-wrapper">
<?php if ($image_id) { echo wp_get_attachment_image($image_id, 'thumbnail'); } ?>
</div>
<p>
<input type="button" class="button button-secondary ct_tax_media_button" id="ct_tax_media_button" name="ct_tax_media_button" value="添加图片" />
<input type="button" class="button button-secondary ct_tax_media_remove" id="ct_tax_media_remove" name="ct_tax_media_remove" value="移除图片" />
</p>
</td>
</tr>
<?php
}
add_action('category_edit_form_fields', 'category_image_edit_form_fields', 10, 2);
// 保存分类图片
function save_category_image($term_id, $tt_id) {
if (isset($_POST['category-image-id']) && '' !== $_POST['category-image-id']){
$image = $_POST['category-image-id'];
update_term_meta($term_id, 'category-image-id', $image);
} else if (isset($_POST['category-image-id']) && '' === $_POST['category-image-id']){
update_term_meta($term_id, 'category-image-id', '');
}
}
add_action('created_category', 'save_category_image', 10, 2);
add_action('edited_category', 'save_category_image', 10, 2);
// 加载分类图片脚本
function category_image_script() {
// 只在分类编辑页加载
$screen = get_current_screen();
if ($screen && ($screen->base === 'term' || $screen->base === 'edit-tags')) {
wp_enqueue_media();
} else {
return;
}
?>
<script>
jQuery(document).ready(function($) {
function initMediaUploader() {
var _custom_media = true,
_orig_send_attachment = wp.media.editor.send.attachment;
$('body').on('click','.ct_tax_media_button',function(e) {
var send_attachment_bkp = wp.media.editor.send.attachment;
var button = $(this);
var id = button.attr('id').replace('_button', '');
_custom_media = true;
wp.media.editor.send.attachment = function(props, attachment) {
if (_custom_media) {
$('#category-image-id').val(attachment.id);
$('#category-image-wrapper').html('<img class="custom_media_image" src="" style="margin:0;padding:0;max-height:100px;float:none;" />');
$('#category-image-wrapper .custom_media_image').attr('src',attachment.url).css('display','block');
} else {
return _orig_send_attachment.apply(this, [props, attachment]);
}
}
wp.media.editor.open(button);
return false;
});
$('.add_media').on('click', function() {
_custom_media = false;
});
// 修复上传按钮点击
if(typeof ct_media_upload === 'function') {
ct_media_upload('.ct_tax_media_button.button');
}
$('body').on('click','.ct_tax_media_remove',function(){
$('#category-image-id').val('');
$('#category-image-wrapper').html('');
$('#ct_tax_media_button').val('添加图片');
});
// 页面加载时显示现有图片
$(document).ajaxComplete(function(event, xhr, settings) {
if (settings.data && settings.data.indexOf('action=add-tag') !== -1) {
var xml = xhr.responseXML;
if (xml) {
var response = $(xml).find('term_id').text();
if (response !== "") {
// 清空表单
$('#category-image-wrapper').html('');
$('#category-image-id').val('');
$('#ct_tax_media_button').val('添加图片');
}
}
}
});
}
// 延迟初始化,确保所有脚本都已加载
setTimeout(initMediaUploader, 500);
});
</script>
<?php
}
add_action('admin_footer', 'category_image_script');
// 获取分类图片的辅助函数
function get_category_image($category_id, $size = 'full') {
$image_id = get_term_meta($category_id, 'category-image-id', true);
if ($image_id) {
return wp_get_attachment_image_src($image_id, $size);
}
return false;
}
// 获取分类图片URL的辅助函数
function get_category_image_url($category_id, $size = 'full') {
$image = get_category_image($category_id, $size);
return $image ? $image[0] : '';
}
/**
* 集成区域跳转管理器 (Region Redirect Manager)
*/
require_once get_template_directory() . '/inc/redirect-manager/class-redirect-manager.php';
// 注册跳转管理器的自定义设置
add_action('customize_register', array('Nenghui_Redirect_Manager', 'register_customizer_settings'));