自定义 WordPress

本页面集合了 WordPress 使用过程中积累的一些用法和小技巧。页面将会以滚动方式更新,每次更新都会注明当前的日期。

本页面的代码,如果没有另外交待,基本上都是在主题根目录的 functions.php 文件里面部署。

编辑并保存好 PHP 文件,记得刷新一下缓存插件的文件缓存,以及 OPCache 的目录。

移除 devicepx

添加: 2017/07/23
更新: 2017/07/23
为提高国内用户的访问速度,要移除向域名 wp.com 获取资源的 URL ,这里移除由 Jetpack 插件带来的 devicepx ,解决方案如下:
编辑主题的 functions.php 文件,添加勾子,代码如下:

function remove_devicepx() {
    wp_dequeue_script( 'devicepx' );
}
add_action( 'wp_enqueue_scripts', 'remove_devicepx');
add_action( 'admin_enqueue_scripts', 'remove_devicepx' );

移除前端页面头部的 dns-prefetch

添加: 2017/07/23

更新: 2017/07/23

这里是移除 Jetpack 插件生成的 dns-prefetch,方案:

在 Jetpack 插件目录中以 dns-prefetch 为关键词查找文件内容,我找到输出 dns-prefetch HTML link 元素的语句:

printf( "\r\n", esc_attr( $this_prefetch_url ));

jetpack/class.jetpack.php 文件中,注释掉这行语句所在的方法里面的所有内容。

从前端页面移除 rel=”next” and rel=”prev”

添加: 2017/07/24

更新: 2017/07/24

将下面的代码添加到主题目录的 functions.php 文件中:

function wpseo_disable_rel_next_home( $link ) {
    if (is_front_page()) {
        return false;
    }
}
add_filter( 'wpseo_next_rel_link', 'wpseo_disable_rel_next_home' );

将 Gravatar 头像源改为国内 V2ex CDN

添加:2017/08/01

更新:2017/08/01

编辑主题的 functions.php 文件:

if (!function_exists('replace_to_v2ex_avatar')) {
    function replace_to_v2ex_avatar($avatarUrl) {
        return preg_replace(["/[0-9].gravatar.com(\/|%2F)avatar/", "/secure.gravatar.com\/avatar/"], "cdn.v2ex.com/gravatar", $avatarUrl);
    }
}
add_filter('get_avatar', 'replace_to_v2ex_avatar');

前台首页移除 jQuery 库

给 jQuery 应用境内 CDN

添加:2017/08/01

更新:2020/08/03

并且在前台非首页应用 jQuery 库。

在主题的 functions.php 文件添加:

<?php
// 表示在非登录情况下
if (!is_admin()) {
    // 表示在不登录情况下的非网站首页
    if (!(is_home() || is_front_page())) {
        wp_deregister_script('jquery');
        wp_deregister_script('jquery-migrate');
        /*
        wp_register_script('jquery', ("https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js"), false);
        wp_register_script('jquery-migrate', ("https://cdn.bootcdn.net/ajax/libs/jquery-migrate/1.4.1/jquery-migrate.min.js"), false);
        */
        wp_register_script('jquery', ("https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"), false);
        wp_register_script('jquery-migrate', ("https://cdn.jsdelivr.net/npm/jquery-migrate@1.4.1/dist/jquery-migrate.min.js"), false);
        wp_enqueue_script('jquery');
        wp_enqueue_script('jquery-migrate');
    }
}

add_action('wp_enqueue_scripts', 'no_more_jquery');
function no_more_jquery(){
    // 表示非管理员登录用户
    if (!is_admin()) {
        // 表示首页
        if (is_home()) {
            wp_deregister_script('jquery');
        }
    }
}

感谢: https://mariushosting.com/how-to-completely-remove-jquery-from-wordpress/

对 jQuery 使用站外源,并且最终修改为国内源

添加:2017/08/01

更新:2017/08/01

如果直接修改 wp-include/script-loader.php 文件中JQuery的本地源,后台管理页面会出现异常,那么要借助 WP jQuery CDN 插件,然后在插件配置页面將源设为 Google Ajax API jQuery CDN ,并修改该插件目录下的 WP-jQuery-CDN.php 文件,将 google api 源 URI 改为以下这样:

...
if($options['jquery_cdn'] != "5"){
    if($options['jquery_cdn'] == "1"){
        //$jquery = 'http://ajax.lug.ustc.edu.cn/ajax/libs/jquery/' . $jquery . '/jquery.min.js';
        $jquery = '//cdn.bootcss.com/jquery/' . $jquery . '/jquery.min.js';
    }
}
...

WordPress 建议的 robots.txt

添加:2018/02/09

更新:2020/08/03

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-content/
Disallow: /wp-includes/
Disallow: /trackback/
Disallow: /comments/
Disallow: /attachment/
Disallow: /comments/feed
Disallow: /feed
Disallow: /feed
Disallow: /comment-page-*
Disallow: /?replytocom=
Disallow: /trackback
Disallow: /?s=
Disallow: /?s=
Disallow: /wp-*.php

Sitemap: https://icxzl.com/post-sitemap.xml
Sitemap: https://icxzl.com/page-sitemap.xml

给 img 的父元素 a 加上 target 属性

添加:2018/02/09

更新:2020/07/19

在主题目录下的 functions.php 文件添加以下代码:

<?php
// Added By Me
function autoblank($text) {
    $pat = '/<a href([^>]+)><img/';
    return preg_replace($pat, '<a target="_blank" href\1><img', $text);
}
add_filter('the_content', 'autoblank');

移除评论功能

添加:2018/02/09

更新:2018/02/09

因到网站跟帖评论实名制的国家政策的约束,网站的评论功能的开启需要审批,本人为了避免麻烦,所以就关闭了评论功能。在网上搜了一番,找到这个插件: Disable Comments ,启用这个插件可禁用日志的评论功能。

面包屑路径

添加: 2018/02/27

更新: 2018/02/27

首先安装 Breadcrumb NavXT 插件,然后编辑主题下的 header.php 文件在 这一行紧接着追加如下代码:

<?php if (!(is_home() || is_front_page())) :?>
    <?php if(function_exists('bcn_display')):?>
        <div class="breadcrumbs" typeof="BreadcrumbList" vocab="https://schema.org/">
            <?php bcn_display();?>
        </div>
    <?php endif; ?>
     <?php endif; ?>

参考资料: How to Add Breadcrumb Navigation to Your Theme

更改版本号

编辑 ./wp-includes/version.php 文件,然后找到

$wp_version = '版本号';

一行,把它注释掉再重新赋值给 $wp_version 即可。完成。

Note: 记得更新缓存

关闭前端页面 admin-ajax.php 的请求

添加:2019/03/29

更新:2019/03/29

编辑 wp-config.php 文件,添加以下代码:

<?php
...
if( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
  wp_die( '0', 400 );
}
...

显示文章最后更新时间

Created on: 2020-06-16

Updated on: 2020-06-25

vim /path/to/theme/theme_name/functions.php

然后把以下代码放置到文件内容的末尾:

function wpb_last_updated_date( $content ) {
    $u_time = get_the_time('U');
    $u_modified_time = get_the_modified_time('U');
    $custom_content = '';
    /*
    * 这里修改更新到页面的生效时间,把 86400 秒 换成安 60 秒。
    */
    // if ($u_modified_time >= $u_time + 86400) {
    if ($u_modified_time >= $u_time + 60) {
        $updated_date = get_the_modified_time('Y-m-d');
        $updatedtime = get_the_modified_time('H:i:s');
        $custom_content .= '<p class="last-updated">最后更新时间: '. $updated_date . ' ' . $updated_time .'</p>';
    }
    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'wpb_last_updated_date' );

再把以下的 CSS 代码放置到主题的样式文件(通常是 custom.css 文件)中:

.last-updated {
    color: #db7c22;
    background: #fff4b9;
    border: 1px solid #eac946;
    overflow: hidden;
    margin: 10px 0;
    padding: 15px 15px 15px 35px;
    font-size: 14px;
}

感谢: https://blog.naibabiji.com/skill/wordpress-xian-shi-zui-hou-geng-xin-shi-jian.html

如有侵权,烦请联系本人: admin@chengxuzhilu.com ,本人会及时处理。

关闭 WordPress 原有的搜索

Created on: 2020-08-04

Updated on: 2020-08-04

<?php
// 关闭搜索排除后台搜索
if(!is_admin()){
    function fb_filter_query( $query, $error = true ) {
        if ( is_search() ) {
            $query->is_search = false;
            $query->query_vars[s] = false;
            $query->query[s] = false;
            if ( $error == true )
                $query->is_404 = true;
        }
    }
    add_action( 'parse_query', 'fb_filter_query' );
    add_filter( 'get_search_form', create_function( '$a', "return null;" ) );
}

感谢:https://www.wpcun.com/wordpressjc/925.html

百度站内搜索

Created on: 2020-08-04

Updated on: 2020-08-04

首先要到“百度站内搜索” 网站( https://ziyuan.baidu.com/cse/wiki/introduce )新增“搜索框”,然后在“查看代码”,找到一串数字,并把它填入到以下代码中的 一串数字 部分。

<input type="text" name="q" id="bdcsMain" value="" placeholder="请输入关键词以搜索本站内容"><button class="search-submit" id="btnPost" type="submit" onclick="window.open('http://zhannei.baidu.com/cse/search?s=一串数字&entry=1&q='+document.getElementById('bdcsMain').value)">搜索</button>

然后在管理后台找到 Appearance -> Widgets -> 把 Text Widget 拖放到 Main Sidebar 上面,再将以上代码复制粘贴到 Text 选项卡。然后点击 Saved 再点击 Done

最后一步同样是在管理后台找到 Appearance -> Cutomize -> Additional CSS ,然后将以下 CSS 代码复制粘贴入输入框:

/* 百度站内搜索 CSS */
div.textwidget {
    line-height: 0;
}

div.textwidget p {
    padding: 0 !important;
    width: 260px;
    height: 30px;
}
input#bdcsMain {
    width: 180px;
    height: 28px;
    border-color: #16A1E7;
    padding: 0;
    margin-left: 10px;
}
button#btnPost {
    width: 50px;
    height: 28px;
    color: #16A1E7;
    padding: 0;
    margin-left: 10px;
    border-color: #16A1E7;
}

感谢: https://www.txcstx.cn/post/1104.html

解决 “Rate my Post” Ajax 失效的问题

Created on: 2020-12-04

Updated on: 2020-12-04

编辑主题目录中的 functions.php 文件。

<?php
// 解决 invalid wp token 问题
add_filter( 'nonce_life', function () { return 24 * 360 * HOUR_IN_SECONDS; } );

限制帖子修订的数量

Created on: 2021-06-22

Updated on: 2021-06-22

<?php
//根据你的需求选择下面两行代码中的一行,
// 放置到 wp-config.php 文件的 “require_once ABSPATH . 'wp-settings.php';” 一行的前面。

// 限制帖子修订数量为 3
define('WP_POST_REVISIONS', 3);

// 禁用修订功能
define('WP_POST_REVISIONS', false);

如果启用了 OPcache ,修改好别忘了清除 OPcache 的缓存文件。

判断是否为用户已经登录的页面,并且不是前台首页

Created on: 2021-07-01

Updated on: 2021-07-01

if(!is_user_logged_in() && !is_home()) {

...

}

遇到 404 重定向到首页

Created on: 2021-07-02

Updated on: 2021-07-02

# 定位到 WordPress 的主题根目录
cd /path/wp-content/themes/theme_name/
# 备份一下旧的 404 处理代码
cp 404.php 404-old.php
# 编辑 404 文件
vim 404.php

清空原有的代码,
且在空文件中写入以下的内容

<!DOCTYPE html>
<html lang="zh-cmn-Hans">

    <head>
        <meta charset="UTF-8">
        <title>404 - 程序知路</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            div#location-404 {
                width: 300px;
                height: 100px;
                border: 10px double red;
                background-color: yellow;
                margin: 100px auto;
                padding: 10px;
            }

            div#location-404>p {
                text-align: center;
            }

            div#location-404 span#timeout {
                color: red;
            }
        </style>
    </head>

    <body>
        <div id="location-404">
            <p>页面飞走了耶!<span id="timeout">5</span> 秒后跳转到博客首页!</p>
        </div>
        <script>
            var count = 4;
            var interval = setInterval(function () {
                var timeout = document.getElementById("timeout");
                timeout.innerText = count;
                count--;
                if (0 === count) {
                    clearInterval(interval);
                    location.href = "/";
                }
            }, 1000);
        </script>
    </body>
</html>

保存文件。

然后清除 OPCache 缓存:

rm -rf /var/opcache/*

在 WP5.8 下禁用小部件管理的块编辑器

Created on: 2021-09-12

Updated on: 2021-09-12

function disable_block_editor_at_widgets_manager() {
    remove_theme_support( 'widgets-block-editor' );
}
add_action( 'after_setup_theme', 'disable_block_editor_at_widgets_manager' );

移除不必要的存档页面

Created on: 2022-03-28

Updated on: 2022-04-04

add_action('template_redirect', 'meks_remove_wp_archives');
function meks_remove_wp_archives(){
  //If we are on category or tag or date or author archive
  // if( is_category() || is_tag() || is_date() || is_author() ) {
  if( is_date() || is_attachment() || is_author()) {
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
    nocache_headers();
    include( get_query_template( '404' ) );
    die();
  }
}

后台文章列表显示文章 ID

Created on: 2022-03-28

Updated on: 2022-03-28

// 后台文章列表显示文章 ID
// 来源:https://devework.com/wordpress-posts-and-pages-show-id.html
add_filter('manage_posts_columns', 'posts_columns_id', 5);
add_action('manage_posts_custom_column', 'posts_custom_id_columns', 5, 2);
add_filter('manage_pages_columns', 'posts_columns_id', 5);
add_action('manage_pages_custom_column', 'posts_custom_id_columns', 5, 2);
function posts_columns_id($defaults){
    $defaults['wps_post_id'] = __('ID');
    return $defaults;
}
function posts_custom_id_columns($column_name, $id){
    if($column_name === 'wps_post_id'){
        echo $id;
    }
}

让你的WordPress后台文章列表支持文章 ID 搜索

Created on: 2022-03-28

Updated on: 2022-03-28

// 让你的WordPress后台文章列表支持文章ID搜索
// 来源: https://www.daimadog.com/6501.html
add_filter('posts_clauses', 'search_for_id', 2, 2);
function search_for_id ($clauses, $wp_query){
    if($wp_query->is_main_query() && $wp_query->is_search()){
        global $wpdb;
        $search_term = $wp_query->query['s'];

        // 当搜索关键词为数字时,
        // 系统只会匹配文章的 ID,
        // 不会再从标题和内容搜索。
        if(is_numeric($search_term)){
            $clauses['where'] = ' AND (' . $wpdb->posts.'.ID = '.$search_term . ')';
        }
    }
    return $clauses;
}

禁用文章编辑时的自动保存和修订

Created on: 2023-04-12

Updated on: 2023-04-12

// 100 小时自动保存一次
define('AUTOSAVE_INTERVAL', 360000);
define( 'AUTOMATIC_UPDATER_DISABLED', true );

# 限制帖子修订的数量
define('WP_POST_REVISIONS', false);

Yoast SEO Tools 面包屑路径代码

Created on: 2023-04-12

Updated on: 2023-04-12

将以下代码放置于主题的页眉合适的位置中:

<!-- .wrapper 是当前作者用的主题定义的类,有现成的 CSS 样式 -->
<div id="breadcrumb" class="wrapper">
    <!-- Breadcrumb Yoast BEGIN -->
<?php if (!(is_home() || is_front_page())) :
    if ( function_exists('yoast_breadcrumb') ) {
        yoast_breadcrumb( '<p id="breadcrumbs">','</p>' );
    }
 endif;
?>
    <!-- Breadcrumb Yoast END -->
</div>

配套的 CSS 样式:

/* 
    可将样式放置于主题的自定义样式文件中,
    像 custom.css。
    也可放在主题自定义模块的“额外CSS”中保存到数据库。
*/
p#breadcrumbs {
    margin-top: 5px;
}
p#breadcrumbs,div.header-warning {
    line-height: 1.2em;
    margin-left: 10px;
    margin-right: 10px;
    padding: 5px;
}

Created on: 2017-07-23

Updated on: 2023-04-12


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com