WP常用增强

后台显示id

// 文章
add_filter('manage_posts_columns', [$this, 'show_id_column']);
add_action('manage_posts_custom_column', [$this, 'show_id_value'], 10, 2);
// 页面
add_filter('manage_pages_columns', [$this, 'show_id_column']);
add_action('manage_pages_custom_column', [$this, 'show_id_value'], 10, 2);
// 媒体
add_filter('manage_media_columns', [$this, 'show_id_column']);
add_action('manage_media_custom_column', [$this, 'show_id_value'], 10, 2);
// 链接
add_filter('manage_link-manager_columns', [$this, 'show_id_column']);
add_action('manage_link_custom_column', [$this, 'show_id_value'], 10, 2);
// 分类
foreach (get_taxonomies() as $taxonomy) {
    add_action("manage_edit-" . $taxonomy . "_columns", [$this, 'show_id_column']);
    add_filter("manage_" . $taxonomy . "_custom_column", [$this, 'show_id_filter_id_value'], 10, 3);
}
// 用户
add_action('manage_users_columns', [$this, 'show_id_column']);
add_filter('manage_users_custom_column', [$this, 'show_id_filter_id_value'], 10, 3);
// 评论
add_action('manage_edit-comments_columns', [$this, 'show_id_column']);
add_action('manage_comments_custom_column', [$this, 'show_id_value'], 10, 2);
// 样式 ID列宽度
add_action('admin_head', function () {
    echo '<style type="text/css">#krjojo_tool_id { width: 50px; }</style>';
});

public function show_id_column($columns)
{
    if (count($columns) > 2) {
        $columns = array_merge(array_slice($columns, 0, 1), ['krjojo_tool_id' => 'ID'], array_slice($columns, 1));
    }
    // $columns['id'] = 'ID';
    return $columns;
}
public function show_id_value($column_name, $id)
{
    if ($column_name == 'krjojo_tool_id') echo $id;
}
public function show_id_filter_id_value($value, $column_name, $id)
{
    if ($column_name == 'krjojo_tool_id') $value = $id;
    return $value;
}

自动添加图片灯箱

add_filter('render_block_data', function ($parsed_block) {
    if (
        is_single() &&
        ($parsed_block['blockName'] ?? false) === "core/image" &&           // 判断图片古腾堡块
        ($parsed_block['attrs']["linkDestination"] ?? false) === "none" &&  // 判断图片没有连接到外部
        ($parsed_block['attrs']["lightbox"]["enabled"]  ?? false) !== true  // 判断图片没有启用灯箱
    ) {
        unset($parsed_block['attrs']['linkDestination']);
        $parsed_block['attrs']["lightbox"] = ["enabled" => true];
    }
    return $parsed_block;
});

邮件SMTP

add_action('phpmailer_init', function ($phpmailer) {
    $phpmailer->FromName = '手里有只毛毛虫'; //发件人名称
    $phpmailer->Host = 'smtp.qq.com';
    $phpmailer->Port = '465';
    $phpmailer->Username = 'krjojo@qq.com'; //发件人邮箱
    $phpmailer->Password = 'password'; //发件人邮箱密码
    $phpmailer->From = 'krjojo@qq.com'; //发件人邮箱
    $phpmailer->SMTPAuth = true;
    $phpmailer->SMTPSecure = 'ssl';
    $phpmailer->IsSMTP();
});
add_filter('wp_mail_from', function () {
    return 'krjojo@qq.com'; //发件人邮箱
});

页头展示keywords

在文章的header头展示分类的keywords,现在搜索引擎基本不看

add_action('wp_head', function () {
    if (is_single()) {
        global $post;
        $tags = get_the_tags($post->ID);
        if ($tags) {
            $keywords = [];
            foreach ($tags as $tag) {
                $keywords[] = $tag->name;
            }
            $keywords_string = implode(', ', $keywords);
            echo '<meta name="keywords" content="' . esc_attr($keywords_string) . '">' . "\n";
        }
    }
});

开启Wordpress对上传svg图片的支持

可以举一反三,添加其他格式支持

add_filter('upload_mimes', function ($mimes) {
    $mimes['svg'] = 'image/svg+xml';
    return $mimes;
});

开启Wordpress自带链接功能

默认关闭,属于旧互联网友链范畴

add_filter('pre_option_link_manager_enabled', '__return_true');

登录推送

add_action('wp_login', function ($user_login) {
    $message = '手里有只毛毛虫-服务器登陆提醒
    登陆IP:' . $_SERVER['REMOTE_ADDR'] . '
    登陆名:' . $user_login . '
    完整信息登录:' . json_encode($_SERVER, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    wp_mail('krjojo@qq.com', '手里有只毛毛虫登录提醒', $message);
}, 10);

本地头像

add_filter('pre_get_avatar_data', function ($args, $id_or_email) {
    if ($id_or_email == "1" || $id_or_email === "1456441157@qq.com" || ($id_or_email->user_id ?? "0") == "1") {
        $args['url'] = '/wp-content/uploads/2024/05/站长头像.avif';
    } else {
        $args['url'] = '/wp-content/uploads/2024/03/游客头像.webp';
    }
    return $args;
}, 10, 2);

登录页 一为主题样式

作者:一为

<?php

add_action('login_header', function () {
    echo '<div class="login-container">
            <div class="login-body">
                <div class="login-img shadow-lg position-relative flex-fill">
                    <div class="img-bg position-absolute">
                        <div class="login-info">
                            <h2>' . get_bloginfo('name') . '</h2>
                            <p>' . get_bloginfo('description') . '</p>
                        </div>
                    </div>
                </div>';
});

add_action('login_footer',  function () {
    echo '</div><!--login-body END-->
            </div><!--login-container END-->
            <div class="footer-copyright position-absolute">
                    <span>Copyright © <a href="' . esc_url(home_url()) . '" class="text-white-50" title="' . get_bloginfo('name') . '" rel="home">' . get_bloginfo('name') . '</a></span> 
            </div>';
});

//登录页面的LOGO链接为首页链接
add_filter('login_headerurl', function () {
    return esc_url(home_url());
});

add_action('login_head',  function () {
    function getRandomColorRGB()
    {
        $r = mt_rand(0, 255);
        $g = mt_rand(0, 255);
        $b = mt_rand(0, 255);
        return "rgb($r, $g, $b)";
    }

    $login_color = ['color-l' => getRandomColorRGB(), 'color-r' => getRandomColorRGB()];
    $ico = '/favicon.ico';
    $img = '/wp-content/uploads/2024/01/课室低码率.jpg';
    echo '<style type="text/css">
            body{background:' . $login_color['color-l'] . ';background:-o-linear-gradient(45deg,' . $login_color['color-l'] . ',' . $login_color['color-r'] . ');background:linear-gradient(45deg,' . $login_color['color-l'] . ',' . $login_color['color-r'] . ');height:100vh}
            .login h1 a{background-image:url(' . $ico . ');width:180px;background-position:center center;}
            .login-container{position:relative;display:flex;align-items:center;justify-content:center;height:100vh}
            .login-body{position:relative;display:flex;margin:0 1.5rem}
            .login-img{display:none}
            .img-bg{color:#fff;padding:2rem;bottom:-2rem;left:0;top:-2rem;right:0;border-radius:10px;background-image:url(' . $img . ');background-repeat:no-repeat;background-position:center center;background-size:cover}
            .img-bg h2{font-size:2rem;margin-bottom:1.25rem}
            #login{position:relative;background:#fff;border-radius:10px;padding:28px;width:280px;box-shadow:0 1rem 3rem rgba(0,0,0,.175)}
            .flex-fill{flex:1 1 auto}
            .position-relative{position:relative}
            .position-absolute{position:absolute}
            .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}
            .footer-copyright{bottom:0;color:rgba(255,255,255,.6);text-align:center;margin:20px;left:0;right:0}
            .footer-copyright a{color:rgba(255,255,255,.6);text-decoration:none}
            #login form{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:0;padding:0}
            #login form .forgetmenot{float:none}
            .login #login_error,.login .message,.login .success{border-left-color:#40b9f1;box-shadow:none;background:#d4eeff;border-radius:6px;color:#2e73b7}
            .login #login_error{border-left-color:#f1404b;background:#ffd4d6;color:#b72e37}
            #login form p.submit{padding:20px 0 0}
            #login form p.submit .button-primary{float:none;background-color:#f1404b;font-weight:bold;color:#fff;width:100%;height:40px;border-width:0;text-shadow:none!important;border-color:none;transition:.5s}
            #login form input{box-shadow:none!important;outline:none!important}
            #login form p.submit .button-primary:hover{background-color:#444}
            .login #backtoblog,.login #nav{padding:0}
            @media screen and (min-width:768px){.login-body{width:1200px}
            .login-img{display:block}
            #login{margin-left:-60px;padding:40px}
            }
        </style>';
});

// 关闭多语言切换
add_filter('login_display_language_dropdown', '__return_false');

评论过滤

符合关键词和非中文评论,自动移至垃圾评论,不会再收到邮件打扰了。

add_filter('pre_comment_approved', 'pre_comment_approved', 99, 2);

public function pre_comment_approved($approved, $commentdata)
    {
        $comment = $commentdata['comment_content'];
        $keyword = [
            '这里填',
            '敏感词',
            '广告网址',
        ];
        foreach ($keyword as $value) {
            if (strpos($comment, $value) !== false) {
                return 'spam';
            }
        }
        // 非中文
        if (!preg_match('/[一-龥]/u', $comment)) {
            return 'spam';
        }

        return $approved;
    }