WordPress 5.0 更新现已发布,全新编辑器,全新主题

WordPress 5.0 正式版已于 2018-12-07 发布,自建 WordPress 用户可以在 WordPress 后台的 Web 管理页面中进行升级。本次更新的最明显的两个特点就是:1. 后台管理使用了全新的编辑器,2. 新增了 2019 年的主题,该主题适配这个全新的编辑器。

这次的 5.0 是一个大版本更新,而不像之前的 4.9、4.8 更新那样,这从版本号就可以看出。

具体更新内容 https://guozeyu.com/2018/12/wordpress-5-0-update/

WordPress不用插件实现AJAX登陆

编辑footer.php在</body>前添加如下代码:

<form id="login" action="login" method="post">
  <h1>网站登陆</h1>
  <p class="status"></p>
  <label for="username">用户名</label>
  <input id="username" type="text" name="username"><label for="password">密码</label>
  <input id="password" type="password" name="password">
  <a class="lost" href="<?php echo wp_lostpassword_url(); ?>">忘记密码?</a>
  <input class="submit_button" type="submit" value="Login" name="submit">
  <a class="close" href="">(关闭)</a>
  <?php wp_nonce_field( 'ajax-login-nonce', 'security' ); ?>
</form>

在要显示登陆链接的地方,添加如下代码:

<?php if (is_user_logged_in()) { ?>
    <a class="login_button" href="<?php echo wp_logout_url( home_url() ); ?>">退出</a>
<?php } else { ?>
    <a class="login_button" id="show_login" href="">登陆</a>
<?php } ?>

CSS文件,添加至style.css

form#login{
    display: none;background-color: #FFFFFF;position: fixed;top: 200px;padding: 40px 25px 25px 25px;width: 350px;z-index: 999;left: 50%;margin-left: -200px;
}

form#login p.status{
    display: none;
}

.login_overlay{
    height: 100%;width: 100%;background-color: #F6F6F6;opacity: 0.9;position: fixed;z-index: 998;
}

在funcitons.php添加如下代码:

function ajax_login_init(){
    wp_register_script('ajax-login-script', get_template_directory_uri() . '/ajax-login-script.js', array('jquery') ); 
    wp_enqueue_script('ajax-login-script');

    wp_localize_script( 'ajax-login-script', 'ajax_login_object', array( 
        'ajaxurl' => admin_url( 'admin-ajax.php' ),'redirecturl' => home_url(),'loadingmessage' => __('正在登陆,请稍后...')));

    add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );
}

if (!is_user_logged_in()) {
    add_action('init', 'ajax_login_init');
}

function ajax_login(){
    check_ajax_referer( 'ajax-login-nonce', 'security' );

    $info = array();
    $info['user_login'] = $_POST['username'];
    $info['user_password'] = $_POST['password'];
    $info['remember'] = true;

    $user_signon = wp_signon( $info, false );if ( is_wp_error($user_signon) ){
        echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong username or password.')));
    } else {
        echo json_encode(array('loggedin'=>true, 'message'=>__('Login successful, redirecting...')));
    }

    die();
}

JS文件内容如下:

jQuery(document).ready(function($) {
    $('a#show_login').on('click', function(e){
        $('body').prepend('<div class="login_overlay"></div>');
        $('form#login').fadeIn(500);
        $('div.login_overlay, form#login a.close').on('click', function(){
            $('div.login_overlay').remove();
            $('form#login').hide();
        });
        e.preventDefault();
    });

    $('form#login').on('submit', function(e){
        $('form#login p.status').show().text(ajax_login_object.loadingmessage);
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajax_login_object.ajaxurl,
            data: { 
                'action': 'ajaxlogin',
                'password': $('form#login #password').val(), 
                'security': $('form#login #security').val()
            },
            success: function(data){
                $('form#login p.status').text(data.message);if (data.loggedin == true){
                    document.location.href = ajax_login_object.redirecturl;
                }
            }
        });
        e.preventDefault();
    });
});

WordPress任意文件删除漏洞

阿里云云盾应急响应中心监测到国外安全研究组织发布了一篇关于WordPress任意文件删除漏洞的预警文章,恶意攻击者可以利用该漏洞删除WordPress建站配置文件wp-config.php,从而导致界面进入网站安装页面。漏洞原因为WordPress程序 unlink() 函数在处理的用户输入传递给文件删除功能时,未进行适当判断处理,导致任意文件删除。

受影响范围:WordPress <= 4.9.6

漏洞研究者提供了临时止血方案,可以在当前活动的主题/子主题的 functions.php 文件中添加如下内容:

add_filter( 'wp_update_attachment_metadata''rips_unlink_tempfix' );
function rips_unlink_tempfix( $data ) {
    ifisset($data['thumb']) ) {
        $data['thumb'] = basename($data['thumb']);
    }
    return $data;
}

在WordPress后台隐藏自定义字段

如果你想在写博客的时候保持日志编辑页面尽量的简洁,你可以通过下面的代码把 WordPress 自定义字段隐藏起来。在你主题的 functions.php 文件中添加以下代码:

add_action('admin_init','hideMetaBoxes');
function hideMetaBoxes() {
	remove_meta_box('postcustom','post','normal');
}

如何从WordPress页面菜单中移除特定页面

从 wp_list_pages() 中生成的页面菜单中移除特定的页面是非常简单的,只需要把下面代码加入到主题的 functions.php 文件中:

// add page ids to the exclude list
add_filter( 'wp_list_pages_excludes', 'bannedPages' );
function bannedPages( $exclude_array ) {
  return array_merge( $exclude_array, array( 4, 17 ) );
}

只需要把数组中的数字改成你要移除页面 ID 就可。

WordPress在Windows主机IIS下设置固定链接实现真正的伪静态方法

[ISAPI_Rewrite]
# Defend your computer from some worm attacks
#RewriteRule .*(?:global.asa|default.ida|root.exe|..).* . [F,I,O]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# Rules to ensure that normal content gets through
RewriteRule /software-files/(.*) /software-files/$1 [L]
RewriteRule /images/(.*) /images/$1 [L]
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /favicon.ico /favicon.ico [L]
# For file-based wordpress content (i.e. theme), admin, etc.
RewriteRule /wp-(.*) /wp-$1 [L]
# For normal wordpress content, via index.php
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]

保存为httpd.ini,传到web目录,然后在固定链接中设置为自己想要的就可以了

分享一下WordPress更改域名地址无需修改数据库的三种方法

大家知道,WP博客更改域名地址,在成功导入数据库和转移网站数据库后,还需要修改HOME和SITEURL两个地址。一般大家都是通过修改数据库,其实不用那么麻烦和危险,哈哈。通过修改配置文件也可以的。

第一种、修改wp-config.php

1、在wp-config.php中,添加以下两行内容:

define('WP_HOME','http://www.newdomain.com');
define('WP_SITEURL','http://www.newdomain.com');

www.newdomain.com 代表你的新地址

2、登录后台,在 “常规 -> 设置”重新配置新博客地址(HOME)和安装地址(SITEURL),成功后一定记得删除上面添加的内容。

第二种、修改functions.php

functions.php指的是位于当前博客主题目录内,可以自定义一些主题函数。

1、在functions.php中,添加以下两行内容:

update_option('siteurl','http://www.newdomain.com');
update_option('home','http://www.newdomain.com');

同样,www.newdomain.com代表你的新地址

2、登录后台,在 “常规 -> 设置”重新配置新博客地址(HOME)和安装地址(SITEURL),成功后一定记得删除上面添加的内容。

第三种、修改wp-config.php(自动更新地址)

1、在wp-config.php中,添加下面一行内容:

define('RELOCATE',true);

2、登录后台地址,WP将自动更新安装地址(SITEURL),手动修改博客地址(HOME)地址即可,成功后一定记得删除上面添加的内容。

总结

很显然,第三种是最简单的,无需填写新的博客域名地址,最重要的是一定记得删除添加过的内容咯。

无需输入FTP信息就能升级WordPress及插件

你是否碰到这样的情况:当添加,删除,升级 WordPress 插件或者直接升级 WordPress 的时候,WordPress 总是提示让你输入 FTP 帐号信息,非些烦人。如果你使用虚拟主机的话,一般不会出现这样的,但是如果你使用 VPS 或者 DV 的话,就很可能出现这种情况,因为 WordPress 是基于文件的所有者来判断的,如果你的服务器的用户名和文件的用户名不是一样的,那么 WordPress 就会让你通过 FTP 来进行更新。

但是每次输入 FTP 信息是非常烦人的,其实我们可以在 wp-config.php 中定义下面这些常量来让 WordPress 自动获取 FTP 信息,而无需每次手动输入:

//添加 FTP 信息,防止每次都提示输入
define('FTP_HOST', 'ftp.yoursite.com');
define('FTP_USER', 'Your_FTP_Username');
define('FTP_PASS', 'Your_FTP_password');
//如果你的 FTP 可以使用 SSL 连接,把下面设置为 True
define('FTP_SSL', true);

WordPress自动摘要的方法

修改 functions.php 文件

add_filter('the_content', 'autoExcerpts');
function autoExcerpts($content = false) {
  // If is the home page, an archive, or search results
  if(is_front_page() || is_archive() || is_search()) :
    global $post;
    $content = $post->post_excerpt;
    
    // If an excerpt is set in the Optional Excerpt box
    if($content) :
      $content = apply_filters('the_excerpt', $content);
    
    // If no excerpt is set
    else :
      $content = $post->post_content;
      $excerpt_length = 55;
      $words = explode(' ', $content, $excerpt_length + 1);
      if(count($words) > $excerpt_length) :
        array_pop($words);
        array_push($words, '...');
        $content = implode(' ', $words);
      endif;
      $content = '<p>' . $content . '</p>';
    endif;
  endif;
    
  // Make sure to return the content
  return $content;
}

当设置摘要的时候,会显示摘要。没有的时候就自动提取摘要

彻底解决WordPress中文截断产生乱码的方法

将以下两个函数写进主题所附带的functions.php文件中

function LimitChar($max_char = 200, $more_text = '...', $more_link_text = '', $limit_type = 'content') {
  if ($limit_type == 'title') {
    $limiter = get_the_title();
  } else {
    $limiter = get_the_content();
  }
  $limiter = apply_filters('the_content', $limiter);
  $limiter = strip_tags(str_replace(']]>', ']]>', $limiter));
  if (strlen($limiter) > $max_char) {
    $limiter = substr($limiter, 0, $max_char+1);
    $limiter = utf8Conver($limiter);
    echo $limiter;
    echo $more_text;
    if ($more_link_text != '') {
      echo ' <a href="'; echo the_permalink(); echo '">'.$more_link_text.'</a>';
    }
  } else {
    echo $limiter;
  }
}
      
function utf8Conver($str) {
  $len = strlen($str);
  for ($i=strlen($str)-1; $i>=0; $i-=1){
    $hex .= ' '.ord($str[$i]);
    $ch = ord($str[$i]);
    if (($ch & 128)==0) return(substr($str,0,$i));
    if (($ch & 192)==192) return(substr($str,0,$i));
  }
  return($str.$hex);
}

把模板文件中比如index.php中将截断函数替换成新的。

<?php LimitChar(200); ?>