屏蔽wordpress后台的自动升级失败提示信息

今天打开给客户做的一个wordpress网站时,发现网站后台出现了一行错误信息:自动升级 WordPress 失败 —— 请再试一次。如下图:

由于这个网站在开发时,为了不自动升级导致网站出问题,所以禁用了wordpress的自动升级功能,所以才会出现这个警告。

那么,怎么办呢?肯定不能把禁用自动升级的代码移除掉,那样就破坏了初衷了,再说如果移除掉自动升级代码,wordpress自动升级导致和环境不兼容,网站出错,那才麻烦。

所以,还是继续堆屎山,想办法把这个提示信息屏蔽掉。

通过F12查看这个提示的CSS类是notice-warning,那么只要使用CSS把它隐藏掉就好了。说干就干,直接上代码:

add_filter('pre_site_transient_update_core', function ($value) {
    if (isset($value->last_checked)) {
        // 模拟移除错误(不推荐修改核心,直接清空错误提示)
        unset($value->updates);
    }
    return $value;
});

add_action('admin_head', function () {
    echo '<style>
        .notice.notice-error, 
        .update-nag,
        .notice.notice-warning {
            display: none !important;
        }
    </style>';
});

把这段代码放到functions.php里面,刷新后台,提示消失!问题搞定!收工!

WordPress 网站支持多域名

正常情况下,一个 wordpress 网站只能支持使用在后台配置的域名,如果绑定了多个域名,点击会跳转到后台设置的那个域名。

但有时我们的网站可能需要同时使用多个域名,对于这个需求,我们有两种办法可以做到,一是使用插件,例如 WP Multidomain 和 Domain Mapping System ;第二种方法是小改wp-config.php文件,这种方法简单可控,并且不拖慢系统速度。具体操作如下:

找到你的 wp-config.php,在文件中加入下面这段:

// 在 wp-config.php 添加,让 WordPress 根据访问域名动态确定 URL
if (isset($_SERVER['HTTP_HOST'])) {
    $http_host = $_SERVER['HTTP_HOST'];
    define('WP_HOME', 'https://' . $http_host);
    define('WP_SITEURL', 'https://' . $http_host);
}

放在靠近 /* That's all, stop editing! Happy publishing. */ 上面就可以了。

这样,无论是 aaa.com、bbb.com,WordPress都会以当前访问的域名作为站点 URL,不会强制跳转,也不会出错。

注意事项

  • 这适合 多个域名访问同一内容 的场景。
  • 如果你要在不同域名下显示不同内容(比如 LOGO不同、文章不同),还要额外加逻辑判断。
  • 服务器(Nginx / Apache)那边,记得把所有域名都绑定到同一个目录。
  • SSL 证书(HTTPS)要支持所有域名。可以用通配符证书或者给每个域名申请单独证书。

wordpress之WP_Query函数

用法一、查询某一分类下的文章,代码如下:

<?php
$query = new WP_Query([
    'post_type' => 'product', // 文章类型是自定义类型 product 
    'posts_per_page' => 999, // 每页 999 条
    'order' => 'ASC', // 升序排序
    // 查询分类,即该自定义类型下的分类
    'tax_query' => [
        [
            // 分类的名字
            'taxonomy' => 'product_category',
            // 根据wp_terms表里的哪个字段进行查询,可以根据term_id或slug等
            'field' => 'term_id',
            // 上面字段的值
            'terms' => $sub->term_id,
        ]
    ],
]);

if ($query->have_posts()) :
    while ($query->have_posts()) :
        $query->the_post();
?>

        <a href="<?php the_permalink() ?>"><?php the_title() ?></a>

<?php
    endwhile;
endif;
// 使用 WP_Query 查询后,不要忘了进行重置查询,否则会影响后面代码的执行
wp_reset_query();
?>

wordpress之wp_list_categories函数

该函数用来输出一个某个分类法下的分类列表,输出的是html格式,默认是 <li>…</li>

$term = get_term_by('slug', 'software', 'product_category');
wp_list_categories([
    'taxonomy' => 'product_category', // 分类法
    'child_of' => $term->term_id, // 哪个分类的子分类
    'depth' => 0, 
    'hide_empty'=>false, // 如果该分类下没有文章,是否隐藏
    'title_li' => ''
] );

wordpress之the_xxx 系列的函数

该系列函数主要用于对单篇文章使用,获取单篇文章的相关信息,常用函数如下:

输出文章标题

<?php the_title() ?>

输出文章发布时间

<?php echo get_the_date( 'Y-m-d' ); ?>

输出文章简介,超出的部分用[…]来省略。

<?php the_excerpt(); ?>

输出文章的固定链接

<?php the_permalink() ?>

输出文章内容

<?php the_content() ?>

wordpress之sanitize_text_field函数

清理用户输入或者从数据库中获取的字符串。

检查是否合法的 UTF-8 字符,将 < 转换成 HTML 实体,去掉所有标签,删除所有换行符,占位符,以及额外的空格,去掉八位字节。

常用于后台meta box 保存内容时,但是使用了wp_editor就不能使用该函数进行过滤了,否则会导致生成的富文本格式不正确。

用法:

<?php sanitize_text_field($string); ?>

函数所在文件:wp-includes/formatting.php

参考:https://blog.wpjam.com/function_reference/sanitize_text_field/

wordpress函数之get_the_terms

该函数用于在已知文章ID和分类法的时候调用,常用于文章详情页面。用来获取分类信息

用法:

/** 
第一个参数表是当前文章的ID, 第二个参数表示所属的分类法,即taxonomy name。
在single页面时可以直接使用 $post->ID
**/
$terms = get_the_terms($post->ID, 'product_category');

wordpress函数之get_term_by

该函数用来获取一个分类的信息,实际是 wp_terms 和 wp_term_taxonomy 表的联合查询

第一个参数表示根据 wp_terms 表的哪个字段查询

第二个参数表示该字段的值

第三个参数表示分类法的名称,即 wp_term_taxonomy 表的 taxonomy

$term = get_term_by('slug', 'software', 'product_category');

wordpress函数之get_terms

该函数用来查询某一 taxonomy 下的所有分类,即wp_term_taxonomy和wp_terms表的联合查询结果。

用法如下 :

<?php  
    $terms = get_terms([
	    /* wp_term_taxonomy 表的 taxonomy 字段值
		   代码层面就是 register_taxonomy 注册的分类方法 */			
        'taxonomy' => 'product_category',
        // 如果该分类下没有文章,是否显示 
        'hide_empty' => false,
        /*该分类的上级分类,即 wp_term_taxonomy 表的 parent 字段,
         如果查询一级分类,设置为 0 即可。
         如果查询子分类,这里只需指定父分类的term_id即可
         wp_term_taxonomy 表的 parent 字段,指的是 term_id 字段 */         
        'parent' => 0,
        /* 根据哪个字段进行排序,网上找的代码这里写id就能排序,不知道这个id是哪个表的id
	       估计应该是 term_id 字段 */
        'orderby'=> 'id',
        // 升序排序
        'order'  => 'ASC'
    ]);
    foreach($terms as $term):
?>

<a href="javascript:void(0)" class=""><?php echo $term->name;  ?></a>

<?php endforeach; ?>