月度归档: 2020 年 3 月

  • WordPress 如何禁用找回密码功能

    WordPress 如何禁用找回密码功能

    在WordPress的一些开发场景中,不需要用户使用通过邮件重设密码,下面我们给出如何禁用找回密码功能。

    WordPress中如何去除找回密码功能?

    在主题的functions.php中(如何方便的在更新主题时保留 functions.php 里的自定义)添加如下代码

    function disable_password_reset() { 
        return false;
    }
    add_filter ( 'allow_password_reset', 'disable_password_reset' );

    WordPress如何在登陆页面中去除“忘记密码?”字样?

    同样需要在functions.php中添加如下代码

    function remove_lostpassword_text ( $text ) {
         if ($text == '忘记密码?'){$text = '';} 
            return $text; 
         }
    add_filter( 'gettext', 'remove_lostpassword_text' ); 

  • MacOS brew  fatal: unable to access ‘https://github.com/Homebrew/homebrew-core/’

    MacOS brew fatal: unable to access ‘https://github.com/Homebrew/homebrew-core/’

    问题描述

    MacOS在brew update更新时报错:

    ==> Tapping homebrew/core
    Cloning into ‘/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core’…
    fatal: unable to access ‘https://github.com/Homebrew/homebrew-core/’: LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
    Error: Failure while executing; git clone https://github.com/Homebrew/homebrew-core /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1 exited with 128.
    Error: Failure while executing; /usr/local/bin/brew tap homebrew/core exited with 1.

    解决方法

    // 执行下面这句命令,更换为中科院的镜像:
    git clone git://mirrors.ustc.edu.cn/homebrew-core.git/ /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1

    Mac下的brew切换到国内的镜像源

    // 更新
    brew update

  • MacOS brew update 升级系统时出现 pkg-config.rb:1: syntax error, unexpected 错误 解决办法

    MacOS brew update 升级系统时出现 pkg-config.rb:1: syntax error, unexpected 错误 解决办法

    问题描述

    在MacOS升级系统中使用 brew update 命令升级软件时出现 pkg-config.rb:1: syntax error, unexpected 错误

    brew upgrade
    ==> Upgrading 18 outdated packages:
    fribidi 1.0.7 -> 1.0.9
    gcc 9.2.0_1 -> 9.3.0
    glib 2.62.3 -> 2.64.1
    gmp 6.1.2_2 -> 6.2.0
    go 1.13.4 -> 1.14
    isl 0.21 -> 0.22.1
    libidn2 2.2.0_1 -> 2.3.0
    make 4.2.1_1 -> 4.3
    meson 0.52.0 -> 0.53.2
    ncurses 6.1 -> 6.2
    ninja 1.9.0 -> 1.10.0
    pcre 8.43 -> 8.44
    python 3.7.5 -> 3.7.7
    readline 8.0.1 -> 8.0.4
    sqlite 3.30.1 -> 3.31.1
    telnet 60 -> 63
    xz 5.2.4 -> 5.2.5
    zsh 5.7.1 -> 5.8
    Error: pkg-config: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/pkg-config.rb:1: syntax error, unexpected <<
    <<<<<<< HEAD
    ^~
    /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/pkg-config.rb:40: syntax error, unexpected ===, expecting end-of-input
    ^~~

    解决方案

    rm -rf /usr/local/Homebrew/.git
    brew update
    brew config

  • WordPress插件开发 常规设置页面添加新选项

    WordPress插件开发 常规设置页面添加新选项

    我们在开发一个分类目录对应用户角色的插件,我们需要添加一些额外的设置选项到常规设置(后台 > 设置 > 常规)页面,下面是一个简单的范例

    WordPress中如何在常规设置页面中添加一个自定义字段?

    可以在当前启用主题的目录中找到functions.php(如何方便的在更新主题时保留 functions.php 里的自定义)添加如下代码:

    //添加常规选项
    function jregister_fields() {
    	register_setting( 'general', 'jroles' );
    	add_settings_field( 'jroles', '<label for="jroles">自定义角色</label>', 'jfields_roles', 'general' );
    }
    function jfields_roles() {
    	$value = get_option( 'jroles' );
    	echo '<textarea name="jroles" id="jroles" class="large-text code" rows="3">' . $value . '</textarea>';
    	echo '<p class="jroles">自定义角色名。例:A区一层,A区二层,A区三层,B区一层,B区二层,B区三层</p>';
    	echo '<p class="jroles">需对应相同名称的分类目录。例:A区一层,A区二层,A区三层,B区一层,B区二层,B区三层</p>';
    	echo '<p class="jroles">自定义用户名与分类目录名一致时可以获得对应权限,浏览对应分类目录。自定义的用户角色对应的目录需要对应权限才能浏览。</p>';
    }
    add_filter( 'admin_init' , 'jregister_fields' );

    效果如下

    如何获取该设置?

    在前台,则使用<?php echo get_option('jroles'); ?>来调用该选项。

  • Linux 负载偏高 日志显示 nf_conntrack: table full, dropping packet 问题解决办法

    Linux 负载偏高 日志显示 nf_conntrack: table full, dropping packet 问题解决办法

    症状表现说明

    今天看到博客老是打不开, 一般情况下我们都会检查 web+db ,发现web的访问量并不是太高。下面我们记录一下处理过程。

    查看负载

    top

    查看web日志

    tailf /data/wwwlogs/www.jiloc.com_nginx.log

    发现访问量并不高,但是负载莫名其妙得很高。数据库mysql的进程高属正常。

    查看系统日志

    tailf /var/log/messages

    root@instance-642k0w3w:~# tailf /var/log/messages
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.460288] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.463060] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.464718] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.466232] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.467630] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.469126] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.470496] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.471864] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.473339] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:51:56 instance-642k0w3w kernel: [9113866.474759] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.464394] net_ratelimit: 27808 callbacks suppressed
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.464394] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.467535] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.469057] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.470924] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.473035] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.475067] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.476470] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.477816] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.479139] nf_conntrack: nf_conntrack: table full, dropping packet
    Mar 25 10:52:01 instance-642k0w3w kernel: [9113871.481024] nf_conntrack: nf_conntrack: table full, dropping packet

    发现很多这种 nf_conntrack 的报错信息。

    原因

    服务器访问量大,内核 netfilter 模块 conntrack 相关参数配置不合理,导致 IP 包被丢掉,连接无法建立。

    查看 nf_conntrack 设置

    sysctl -a | grep conntrack

    sysctl: reading key “net.ipv6.conf.all.stable_secret”
    sysctl: reading key “net.ipv6.conf.default.stable_secret”
    sysctl: reading key “net.ipv6.conf.ens3.stable_secret”
    sysctl: reading key “net.ipv6.conf.lo.stable_secret”
    net.netfilter.nf_conntrack_acct = 0
    net.netfilter.nf_conntrack_buckets = 8192
    net.netfilter.nf_conntrack_checksum = 1
    net.netfilter.nf_conntrack_count = 32768
    net.netfilter.nf_conntrack_events = 1
    net.netfilter.nf_conntrack_expect_max = 128
    net.netfilter.nf_conntrack_frag6_high_thresh = 262144
    net.netfilter.nf_conntrack_frag6_low_thresh = 196608
    net.netfilter.nf_conntrack_frag6_timeout = 60
    net.netfilter.nf_conntrack_generic_timeout = 600
    net.netfilter.nf_conntrack_helper = 0
    net.netfilter.nf_conntrack_icmp_timeout = 30
    net.netfilter.nf_conntrack_icmpv6_timeout = 30
    net.netfilter.nf_conntrack_log_invalid = 0
    net.netfilter.nf_conntrack_max = 32768
    net.netfilter.nf_conntrack_tcp_be_liberal = 0
    net.netfilter.nf_conntrack_tcp_loose = 1
    net.netfilter.nf_conntrack_tcp_max_retrans = 3
    net.netfilter.nf_conntrack_tcp_timeout_close = 10
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_established = 432000
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
    net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
    net.netfilter.nf_conntrack_timestamp = 0
    net.netfilter.nf_conntrack_udp_timeout = 30
    net.netfilter.nf_conntrack_udp_timeout_stream = 180
    net.nf_conntrack_max = 32768

    查看最大跟踪连接数

    进来的连接数超过这个值时,新连接的包会被丢弃。

    sudo sysctl net.netfilter.nf_conntrack_max
    # 默认 nf_conntrack_buckets * 4
    # max 是 bucket 的多少倍决定了每个桶里的链表有多长,因此默认链表长度为 4

    比较现代的系统(Ubuntu 16+, CentOS 7+)里,64 位,8G 内存的机器,max 通常默认为 262144,bucket 为 65536。随着内存大小翻倍这 2 个值也翻倍。

    更多详细的说明,请自行百度。

    解决办法

    临时解决办法, 将 net.nf_conntrack_max 参数调大,观察一下情况。如果正常的话。则在配置文件里修改。现在临时修改的参数重启以后就会消失。

    sysctl net.nf_conntrack_max=65535

    负载一下低了很多,而且 /var/log/messages 中,也没有再跳错误信息。

    修改配置文件

    vi /etc/sysctl.d/99-sysctl.conf

    找到 net.ipv4.tcp_max_orphans 设置将其设置成: 65535

    net.ipv4.tcp_max_orphans = 65535

    搞定,收工~

  • WordPress中判断用户是不是管理员

    WordPress中判断用户是不是管理员

    今天在写个WordPress插件,需要判断指定用户的角色是不是网站管理员,如知道用户的id是123,想要知道他是不是管理员。

    判断指定id的用户是不是管理员

    该需求实现起来非常简单,几行代码搞定,分享一下:

    function jis_administrator($user_id) {
      $user = get_userdata($user_id);
      if(!empty($user->roles) && in_array('administrator', $user->roles))
        return 1;  // 是管理员
      else
        return 0;  // 非管理员
    }

    判断当前登录用户是不是管理员

    如果是判断当前登录用户是不是管理员,可以使用下面的函数:

    function jis_administrator() {
      // wp_get_current_user函数仅限在主题的functions.php中使用
      $currentUser = wp_get_current_user();
      if(!empty($currentUser->roles) && in_array('administrator', $currentUser->roles)) 
        return 1;  // 是管理员
      else
        return 0;  // 非管理员
    }
  • WordPress中如何替换登录页面的图标链接等

    WordPress中如何替换登录页面的图标链接等

      默认情况下,使用WordPress系统的博客登录页面都比较简单,登陆页面显示的logoWordPresslogo,链接也是WordPress的链接。下面我们给出修改方法。

    修改WordPress的默认登录Logo

    修改登录页面默认的Logo使用到的钩子是login_head,我们可以在这里面自定义logo,如下:

    function jblog_login_logo() {
        echo '<style type="text/css">
            h1 a { background-image:url('. get_bloginfo('url').'/pic/blog_logo.png) !important; 
                   background-size: 100% !important;
                   width: 250px !important;
                   height: 60px !important;
            }
        </style>';
    }
    add_action('login_head', 'jblog_login_logo');

    这样默认的WordPressLogo替换成你自己定义的Logo图片。需要注意的是,我们一定要加上!important属性,否则将替换不掉。

    修改默认Logo的链接

    默认情况下,登录Logo的链接地址是https://cn.wordpress.org/,如果我们想将它修改成自己博客的主页,需要使用到login_headerurl钩子,使用如下:

    function laoji_loginlogo_url($url) {
            return 'https://laoji.org'; //修改URL地址
    }
    add_filter( 'login_headerurl', ' laoji_loginlogo_url ' );
    

    如果你上面的url地址是你博客的首页,你甚至可以简写成下面方式:

    add_filter('login_headerurl', create_function(false,"return home_url();"));

    修改默认Logo的title

    默认Logo的title是基于WordPress几个字,我们可以根据自己的需求设置这个title,可以使用login_headertitle钩子,如下:

    add_filter('login_headertitle', create_function(false,"return '老季博客';"));

    修改默认的登录和注册方式

    我们还可以根据自己的需求自定义登录和注册方式,比如本博客接入了微博、QQ等登录方式,这个可以分别使用register_formlogin_form钩子,关于如何自定义登录方式,这个我不介绍了,有点复杂。

  • WordPress 后台用户列表中如何删除邮箱列?

    WordPress 后台用户列表中如何删除邮箱列?

    前面的文章我们说到 WordPress 用户管理 完全移除email邮箱 代码实例 ,但是我们在用户列表中还是可以看到邮箱一列。这里我们给出方法将邮箱栏完全不显示。在 functions.php (如何方便的在更新主题时保留 functions.php 里的自定义)中添加如何如下代码:

    // 移除用户的邮箱栏,文章数目栏
    add_filter('manage_users_columns', 'add_user_nickname_column');
    function add_user_nickname_column($columns) {
    	unset($columns['email']);
    	unset($columns['posts']);
    	return $columns;
    }

  • WordPress用户登录后重定向到指定页面

    WordPress用户登录后重定向到指定页面

    一、重定向到网站管理面板。

    将以下代码添加到您的当前主题的 functions.php 文件中(如何方便的在更新主题时保留 functions.php 里的自定义):

    function soi_login_redirect($redirect_to, $request, $user){
        return (is_array($user->roles) && in_array('administrator', $user->roles)) ? admin_url() : site_url();
    }
    add_filter('login_redirect', 'soi_login_redirect', 10, 3);

    二、重定向到指定页面或者文章

    您还可以将用户重定向到特定页面,代码如下:

    function login_redirect( $redirect_to, $request, $user ){
        return home_url('custom-page');
    }
    add_filter( 'login_redirect', 'login_redirect', 10, 3 );

    修改代码中的custom-page为某个页面或者文章的链接(注:不包括站点域名),如果删除custom-page会直接跳转到站点首页。

    wordpress如何设置管理员登录和普通用户登录后跳转到不同页面呢?wordpress默认的是管理员登录地址和普通注册用户后台登录地址都是跳转到后台同一个界面,怎么设置呢?把下面代码粘贴到当前wordpress主题的function.php文件内即可实现wordpress根据不同的用户页跳转不同的页面。

    function my_login_redirect($redirect_to, $request, $user){
        if( is_array( $user->roles ) ) {
              // 检查用户的角色
              if( in_array( "administrator", $user->roles ) ) {
              // 跳转到管理员用户界面
                    return $redirect_to;
               } else {
                   // 跳转到其他用户界面
                   return home_url();
               }
         }
     }
     add_filter("login_redirect", "my_login_redirect", 10, 3);

    喜欢的伙伴们可以试一试,这样也可以避免一些垃圾评论哦!如果你的主题本身就自带有就不用了哈!

  • WordPress 用户管理 完全移除email邮箱 代码实例

    WordPress 用户管理 完全移除email邮箱 代码实例

    WordPress一般情况下用户的邮箱Email字段为必填项。我们记录一下在用户注册管理中,如何将email字段去除。

    在functions.php中添加如下代码( 如何方便的在更新主题时保留 functions.php 里的自定义 ):

    // This will suppress empty email errors when submitting the user form
    add_action('user_profile_update_errors', 'my_user_profile_update_errors', 10, 3 );
    function my_user_profile_update_errors($errors, $update, $user) {
        $errors->remove('empty_email');
    }
    // This will remove javascript required validation for email input
    // It will also remove the '(required)' text in the label
    // Works for new user, user profile and edit user forms
    add_action('user_new_form', 'my_user_new_form', 10, 1);
    add_action('show_user_profile', 'my_user_new_form', 10, 1);
    add_action('edit_user_profile', 'my_user_new_form', 10, 1);
    function my_user_new_form($form_type) {
        ?>
        <script type="text/javascript">
            jQuery('#email').closest('tr').removeClass('form-required').find('.description').remove();
            // Uncheck send new user email option by default
            <?php if (isset($form_type) && $form_type === 'add-new-user') : ?>
                jQuery('#send_user_notification').removeAttr('checked');
            <?php endif; ?>
        </script>
        <?php
    }
    remove_filter( 'authenticate', 'wp_authenticate_email_password', 20 );
  • WordPress 插件开发 如何注册新增用户组 代码实例

    WordPress 插件开发 如何注册新增用户组 代码实例

    我们在WordPress日常开发中如何新增用户组?下面我们给出代码实例,除了使用插件之外,我们可以在functions.php中新增以下代码:(如何方便的在更新主题时保留 functions.php 里的自定义

    add_role('basic_contributor', 'Basic Contributor', array(
        'read' => true, // 使用 true 表示包含这个权限
        'edit_posts' => false,
        'delete_posts' => false, // 使用 false 表示不包含这个权限
    ));
  • 微信模板消息换行 图文教程

    微信模板消息换行 图文教程

    微信模板消息换行,用 "\r\n" 就可以了,微信公众号模板消息有时候字段不够时就需要添加字段,需要换下行

    效果如下:

WeChat