通知设置 新通知
网页信噪比
百度SEO • Jonny 发表了文章 • 1 个评论 • 3586 次浏览 • 2018-05-24 11:20
WordPress文章删除时同时删除文章所包含的图片
WordPress • Bob 发表了文章 • 1 个评论 • 3727 次浏览 • 2018-05-24 10:43
/* 定义函数名称 */
function delete_post_and_attachments($post_ID) {
global $wpdb;
//删除文章特色图片
$thumbnails = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID" );
foreach ( $thumbnails as $thumbnail ) {
wp_delete_attachment( $thumbnail->meta_value, true );
}
//删除文章的图片附件
$attachments = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_parent = $post_ID AND post_type = 'attachment'" );
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
$wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID" );
}
add_action('before_delete_post', 'delete_post_and_attachments');只要将这段代码放在主题的functions.php文件里面就可以了。 查看全部
/* 删除文章时删除图片附件 */只要将这段代码放在主题的functions.php文件里面就可以了。
/* 定义函数名称 */
function delete_post_and_attachments($post_ID) {
global $wpdb;
//删除文章特色图片
$thumbnails = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID" );
foreach ( $thumbnails as $thumbnail ) {
wp_delete_attachment( $thumbnail->meta_value, true );
}
//删除文章的图片附件
$attachments = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_parent = $post_ID AND post_type = 'attachment'" );
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
$wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID" );
}
add_action('before_delete_post', 'delete_post_and_attachments');
instagram内容同步到网站上,点击出现弹框
WordPress • lena 发表了文章 • 1 个评论 • 4118 次浏览 • 2018-05-23 15:21
google adwords质量得分
SEM • Jonny 发表了文章 • 1 个评论 • 4424 次浏览 • 2018-05-22 11:33
我们还会通过 4 个统计信息列向您显示过往质量得分及其组成要素的历史记录,即:质量得分(历史)、着陆页体验(历史)、广告相关性(历史)和预计点击率(历史)。 查看全部
我们还会通过 4 个统计信息列向您显示过往质量得分及其组成要素的历史记录,即:质量得分(历史)、着陆页体验(历史)、广告相关性(历史)和预计点击率(历史)。
adwords的广告评级因素
SEM • Jonny 发表了文章 • 1 个评论 • 4124 次浏览 • 2018-05-22 11:32
在估算广告附加信息和广告格式的预计影响时,我们会考虑附加信息或格式在搜索结果页上的相关性、点击率和显眼程度等因素。因此,即使竞争对手的出价比您高,只要您的关键字和广告的相关性更胜一筹,您仍然可能赢得较高的排名。每当您的广告有资格进行展示并通过竞价竞争此展示机会时,系统都会重新计算广告评级。因此,根据当时的竞争情况、用户搜索情境以及广告质量,您的广告排名可能每次都会发生变动。 查看全部
在估算广告附加信息和广告格式的预计影响时,我们会考虑附加信息或格式在搜索结果页上的相关性、点击率和显眼程度等因素。因此,即使竞争对手的出价比您高,只要您的关键字和广告的相关性更胜一筹,您仍然可能赢得较高的排名。每当您的广告有资格进行展示并通过竞价竞争此展示机会时,系统都会重新计算广告评级。因此,根据当时的竞争情况、用户搜索情境以及广告质量,您的广告排名可能每次都会发生变动。
What does Cloudflare Development mode mean?
WordPress • Leo 发表了文章 • 1 个评论 • 3647 次浏览 • 2018-05-21 11:59
那么我这边就讲下开发者模式
What does Cloudflare Development mode mean?
所谓开发者模式,顾名思义,就是适合开发人员的模式;作为网站开发者,我们对于cloudflare,说实话,真的是又爱又恨,好处是增加全球网络节点,坏的是修改网站很麻烦,往往我们改一个样式就要清一次缓存,这样严重影响我们开发者的效率。
好在新版wp-rockets推出了针对cloudflare开发者模式,只需我们开发者在对网站进行修改的时候,开启按钮即可,而且默认三小时后会关闭按钮,这样我们就不用重复去清除cloudflare缓存了,大大提升了我们的效率。
彩蛋:另外针对之前图片的attachment页面问题,老版本yoast seo是在Advanced里面Redirect attachment URLs to parent post URL按钮开启,
其实新版本的yoast seo也有相关设置,search appearance里面的media,开启即可
查看全部
那么我这边就讲下开发者模式
What does Cloudflare Development mode mean?
所谓开发者模式,顾名思义,就是适合开发人员的模式;作为网站开发者,我们对于cloudflare,说实话,真的是又爱又恨,好处是增加全球网络节点,坏的是修改网站很麻烦,往往我们改一个样式就要清一次缓存,这样严重影响我们开发者的效率。
好在新版wp-rockets推出了针对cloudflare开发者模式,只需我们开发者在对网站进行修改的时候,开启按钮即可,而且默认三小时后会关闭按钮,这样我们就不用重复去清除cloudflare缓存了,大大提升了我们的效率。
彩蛋:另外针对之前图片的attachment页面问题,老版本yoast seo是在Advanced里面Redirect attachment URLs to parent post URL按钮开启,
其实新版本的yoast seo也有相关设置,search appearance里面的media,开启即可
分享一些slider以及一些布局上不错的小细节
WordPress • Leo 发表了文章 • 1 个评论 • 4966 次浏览 • 2018-05-16 17:29
由于插件比较多,这边就列部分效果截图
查看全部
由于插件比较多,这边就列部分效果截图
URL中“#” “?” &“”号的作用
Google SEO • Jonny 发表了文章 • 1 个评论 • 4136 次浏览 • 2018-05-14 16:41
10年9月,twitter改版。一个显著变化,就是URL加入了"#!"符号。比如,改版前的用户主页网址为http://twitter.com/username改版后,就变成了http://twitter.com/#!/username
这是主流网站第一次将"#"大规模用于重要URL中。这表明井号(Hash)的作用正在被重新认识。本文根据HttpWatch的文章,整理与井号有关的所有重要知识点。
一、#的涵义
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。
为网页位置指定标识符,有两个方法。一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print">。
二、HTTP请求不包括#
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
比如,访问下面的网址,http://www.example.com/index.html#print,浏览器实际发出的请求是这样的:
GET /index.html HTTP/1.1
Host: www.example.com
三、#后的字符
在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。
比如,下面URL的原意是指定一个颜色值:http://www.example.com/?color=#fff,但是,浏览器实际发出的请求是:
GET /?color= HTTP/1.1
Host: www.example.com
四、改变#不触发网页重载
单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。
比如,从http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,浏览器不会重新向服务器请求index.html。
五、改变#会改变浏览器的访问历史
每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。
六、window.location.hash读取#值
window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。
七、onhashchange事件
这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。
它的使用方法有三种:
window.onhashchange = func;<body onhashchange="func();">window.addEventListener("hashchange", func, false);
对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。
八、Google抓取#的机制
默认情况下,Google的网络蜘蛛忽视URL的#部分。
但是,Google还规定,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符串_escaped_fragment_的值。
比如,Google发现新版twitter的URL:http://twitter.com/#!/username
就会自动抓取另一个URL:http://twitter.com/?_escaped_fragment_=/username
通过这种机制,Google就可以索引动态的Ajax内容。
注
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。AJAX 是一种用于创建快速动态网页的技术。
2. ?
1)连接作用:比如http://www.xxx.com/Show.asp%3F ... e%3D1
2)清除缓存:比如
http://www.xxxxx.com/index.html
http://www.xxxxx.com/index.html?test123123
两个url打开的页面一样,但是后面这个有问号,说明不调用缓存的内容,而认为是一个新地址,重新读取。
3. &
不同参数的间隔符 查看全部
10年9月,twitter改版。一个显著变化,就是URL加入了"#!"符号。比如,改版前的用户主页网址为http://twitter.com/username改版后,就变成了http://twitter.com/#!/username
这是主流网站第一次将"#"大规模用于重要URL中。这表明井号(Hash)的作用正在被重新认识。本文根据HttpWatch的文章,整理与井号有关的所有重要知识点。
一、#的涵义
#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。
为网页位置指定标识符,有两个方法。一是使用锚点,比如<a name="print"></a>,二是使用id属性,比如<div id="print">。
二、HTTP请求不包括#
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
比如,访问下面的网址,http://www.example.com/index.html#print,浏览器实际发出的请求是这样的:
GET /index.html HTTP/1.1
Host: www.example.com
三、#后的字符
在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。
比如,下面URL的原意是指定一个颜色值:http://www.example.com/?color=#fff,但是,浏览器实际发出的请求是:
GET /?color= HTTP/1.1
Host: www.example.com
四、改变#不触发网页重载
单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。
比如,从http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,浏览器不会重新向服务器请求index.html。
五、改变#会改变浏览器的访问历史
每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用"后退"按钮,就可以回到上一个位置。这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向用户给出可以访问某个状态的链接。值得注意的是,上述规则对IE 6和IE 7不成立,它们不会因为#的改变而增加历史记录。
六、window.location.hash读取#值
window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。
七、onhashchange事件
这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。
它的使用方法有三种:
- window.onhashchange = func;
- <body onhashchange="func();">
- window.addEventListener("hashchange", func, false);
对于不支持onhashchange的浏览器,可以用setInterval监控location.hash的变化。
八、Google抓取#的机制
默认情况下,Google的网络蜘蛛忽视URL的#部分。
但是,Google还规定,如果你希望Ajax生成的内容被浏览引擎读取,那么URL中可以使用"#!",Google会自动将其后面的内容转成查询字符串_escaped_fragment_的值。
比如,Google发现新版twitter的URL:http://twitter.com/#!/username
就会自动抓取另一个URL:http://twitter.com/?_escaped_fragment_=/username
通过这种机制,Google就可以索引动态的Ajax内容。
注
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。AJAX 是一种用于创建快速动态网页的技术。
2. ?
1)连接作用:比如http://www.xxx.com/Show.asp%3F ... e%3D1
2)清除缓存:比如
http://www.xxxxx.com/index.html
http://www.xxxxx.com/index.html?test123123
两个url打开的页面一样,但是后面这个有问号,说明不调用缓存的内容,而认为是一个新地址,重新读取。
3. &
不同参数的间隔符
电脑就像一个高贵冷艳的妹纸 -- 之‘http状态码篇’
休闲娱乐 • Leo 发表了文章 • 1 个评论 • 3811 次浏览 • 2018-05-14 14:44
400,是她冷冰冰地说:“我听不懂你在说什么”;
(由于语法格式有误,服务器无法理解此请求)
401,是她无情地转身:“我不认识你,别说那些奇怪的话”;
(一般来说该错误消息表明您首先需要登录‘输入有效的用户名和密码’,或者您的用户名密码中有至少一个错误)
403,是她残酷的拒绝:“我听懂你的话,也认出你的脸,可我不爱你”;
(表示资源不可用)
404,是她紧闭心门:“我这儿没有你想要的东西”;
(表示您所要的资源是不存在)
503,是“呵呵我去洗澡”。
(一般来说是服务器问题了,可能是资源不够用了、正在维护了、暂停了或者被攻击了等等原因) 查看全部
bootstrap modal实现视频的正常播放和关闭
WordPress • ellen 发表了文章 • 1 个评论 • 3814 次浏览 • 2018-05-10 11:01
<div class="modal fade" id="post-<?php the_ID(); ?>" tabindex="-1" role="dialog" aria-labelledby="videoModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<div>
<iframe width="100%" height="350" src=""></iframe>
</div>
</div>
</div>
</div>
</div>
autoPlayYouTubeModal();
//FUNCTION TO GET AND AUTO PLAY YOUTUBE VIDEO FROM DATATAG
function autoPlayYouTubeModal() {
var trigger = $("body").find('[data-toggle="modal"]');
trigger.click(function () {
var theModal = $(this).data("target"),
videoSRC = $(this).attr("data-theVideo"),
videoSRCauto = videoSRC + "?autoplay=1";
$(theModal + ' iframe').attr('src', videoSRCauto);
$(theModal + ' button.close').click(function () {
$(theModal + ' iframe').attr('src', videoSRC);
});
});
} 查看全部
<a href="#" class="btn btn-default" data-toggle="modal" data-target="#post-<?php the_ID(); ?>" data-theVideo="视频连接">VIDEO</a>
<div class="modal fade" id="post-<?php the_ID(); ?>" tabindex="-1" role="dialog" aria-labelledby="videoModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<div>
<iframe width="100%" height="350" src=""></iframe>
</div>
</div>
</div>
</div>
</div>
autoPlayYouTubeModal();
//FUNCTION TO GET AND AUTO PLAY YOUTUBE VIDEO FROM DATATAG
function autoPlayYouTubeModal() {
var trigger = $("body").find('[data-toggle="modal"]');
trigger.click(function () {
var theModal = $(this).data("target"),
videoSRC = $(this).attr("data-theVideo"),
videoSRCauto = videoSRC + "?autoplay=1";
$(theModal + ' iframe').attr('src', videoSRCauto);
$(theModal + ' button.close').click(function () {
$(theModal + ' iframe').attr('src', videoSRC);
});
});
}