wordpress引流教程,发布文章后自动同步图文到新浪微博

经常上新浪微博并且关注了不少官网认证号的小伙伴一定会发现很多官方性质的微博都会把网站的最新文章或者动态同步到新浪微博这样一来就可以让微博用户快速的了解到网站的最新动态,并且也为网站增加了一个曝光以及流量入口,对于更新频繁的网站来说增加一个同步网站动态到微博的功能是非常有必要的,也不扯淡了,直接上代码:

class sync_sina {
    
    public $access_token = "";//access_token
       
    public $default_image = "";//默认图片地址
    
    public $host = "https://api.weibo.com/2/";
          
    public static $boundary = '';
          
    function __construct(){
        /**
         ** 事件绑定
         **/
        add_action('publish_post', array($this, 'new_post_photo'));
    }
    
    function do_mu_post($url, $data) {
        $ch = curl_init ();
        $headers = array("Content-Type:multipart/form-data;boundary=". self::$boundary);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, TRUE );
        curl_setopt ( $ch, CURLOPT_POST, TRUE );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
        curl_setopt ( $ch, CURLOPT_URL, $url );
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        $ret = curl_exec ( $ch );
        curl_close ( $ch );
        return $ret;
    }
    
    function build_http_query_multi($params) {
        if (!$params) return '';
        uksort($params, 'strcmp');
        $pairs = array();
        self::$boundary = $boundary = uniqid('------------------');
        $MPboundary = '--'.$boundary;
        $endMPboundary = $MPboundary. '--';
        $multipartbody = '';
        foreach ($params as $parameter => $value) {
            if( in_array($parameter, array('pic', 'image')) && $value{0} == '@' ) {
                $url = ltrim( $value, '@' );
                $content = file_get_contents( $url );
                $array = explode( '?', basename( $url ) );
                $filename = $array[0];
                $multipartbody .= $MPboundary . "\r\n";
                $multipartbody .= 'Content-Disposition: form-data; name="' . $parameter . '"; filename="' . $filename . '"'. "\r\n";
                $multipartbody .= "Content-Type: image/unknown\r\n\r\n";
                $multipartbody .= $content. "\r\n";
            } else {
                $multipartbody .= $MPboundary . "\r\n";
                $multipartbody .= 'content-disposition: form-data; name="' . $parameter . "\"\r\n\r\n";
                $multipartbody .= $value."\r\n";
            }
        }
        $multipartbody .= $endMPboundary;
        return $multipartbody;
    }
    
    function get_image($post_id){
        if( has_post_thumbnail($post_id) ){
            $timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post_id),'full');
            $output = $timthumb_src[0];
        } else {
            $content = get_post_field('post_content', $post_id);
            $defaltthubmnail = $this->default_image;
            preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);
            $n = count($strResult[1]);
            if($n > 0){
                $output = $strResult[1][0];
            } else {
                $output = $defaltthubmnail;
            }
        }
        return $output;
    }
    
    function new_post_photo($post) {
        global $post;
        if( $post->post_status != "publish" ){
            $token = $this->access_token;
            $url = $this->host ."statuses/upload.json";
            $status = "我刚刚发布了新文章《".get_the_title()."》。".get_permalink();
            $status .= mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0,180,"..."); //顺手加了个文章摘要,不喜欢就去掉啦
            $pic_path = self::get_image($post->ID);
            $params = array();
            $params['access_token'] = $token;
            $params['status'] = $status;
            $params['pic'] = '@'.$pic_path;
            $body = self::build_http_query_multi($params);
            $result = self::do_mu_post($url,$body);
    
        }
    }
}
$HMT = new sync_sina();

以上代码添加至主题functions.php文件即可。

注:

需要服务器支持file_get_contents函数以及curl组件;

如果网站在国外服务器或者服务因特殊原因屏蔽了api.weibo.com域名,则可能造成发布文章卡死或者超时的问题。

如果网站未通过新浪审核微博小尾巴会显示为未审核应用。

文章参考:http://www.mywpku.com/wordpress-sync-sina-weibo.html

WordPress 3.0-3.9.2版本通杀跨站漏洞(csrf,xss)

据报道,使用3.0至3.9.2版本的WordPress平台不久前被曝出了跨站脚本漏洞,多个使用WordPress的网站均受影响。该漏洞在可用于在评论功能里注入指定JavaScript脚本,该脚本能够直接绕过用户登录需求直接发布,在管理员进行评论管理时自动执行,并可导致站点遭受潜在安全攻击威胁。

wordpress漏洞

目前该跨站脚本漏洞会影响3.0至3.9.2采用WordPress平台的网站,该漏洞最初由Klikki Oy于9月26日报告,11月20日WordPress和IT企业发布报告称,86%采用WordPress平台的网站遭受此漏洞影响。Klikki Oy与WordPress表示正在着手修补此漏洞,而目前升级至4.0版本以上的网站并不受此漏洞影响。

wordpress开发教程:wordpress条件判断函数

最近不少小伙伴都开始制作属于自己的wordpress模板了,初次制作wordpress模板肯定会遇到不少问题比如需要在特定页面执行特定代码或者是在特定的页面输出一段文字或样式,这里小V就将所有wordpress条件判断函数都挪列出来,所有的条件判断标签都会判断某个条件是否成立,然后返回 True 或者 False 。此外有些条件判断标签还可以使用一些参数进一步的判断,下面是所有的 WordPress 条件判断标签:

is_home()

判断当前页面是否为首页如果是当前页面是首页则会返回true,但是你在后台设置了首页静态页面作为首页的话则会返回false。

is_home

is_front_page()

这个函数和上面的is_home()函数的作用也一样,唯一不同的就是就算你设置了静态页面为首页也恢返回true。

is_single()

该函数用来判断当前页面是否为文章页面或者自定义文章类型页面,并且该页面是可以附加参数的,下面那是示例代码:

//判断当前文章是否是 id 为 17 的文章。
is_single( '17' )
//判断当前文章的标题是否是 “Irish Stew”。
is_single( 'Irish Stew' )
//判断当前文章的别名(Slug)是否为 “beef-stew”。
is_single( 'beef-stew' )
//传递多个参数需要使用数组。上面条件判断标签判断满足 id 为 17 、别名为 beef-stew、标题为 Irish Stew 任意一个条件文章被访问时返回 True。
is_single( array( 17, 'beef-stew', 'Irish Stew' ) )
//判断多个文章的 id,用法同上。
is_single( array( 17, 19, 1, 11 ) )
//判断多个文章的别名,用法同上。
is_single( array( 'beef-stew', 'pea-soup', 'chili' ) )
//判断多个文章的标题,用法同上。
is_single( array( 'Beef Stew', 'Pea Soup', 'Chili' ) )

注意:这个函数对于传递的参数,并无法很明确的判断参数究竟是 id、文章标题或者是文章别名,如果参数为 17,当 id 为 17 的文章会返回 True,当 Slug 为 17 的文章也会返回 True。

is_sticky()

判断当前文章是否为置顶文章,也可以传递参数,大体的使用方法和is_single()函数一样。

is_singular()

判断是否满足 is_single、is_page 和 is_attachment 的任意一个条件,满足返回 True。可以用来判断任意类型的文章页面。

is_post_type_archive()

判断是否为存档页面(时间存档页、标签、分类、自定义分类),当然也可以加上一些参数比如post_tag,category来限制当前的存档页类型。

comments_open()

判断评论功能是否开启,必须用在循环中。

pings_open()

判断文章 ping 功能是否开启,必须用在主循环中。

is_page()

判断当前是否为页面类型文章,用法和is_single一致。

is_category()

判断当前页面是否为分类目录,以下是部分代码示例:

//判断当前分类页面的 ID 是否为 9。
is_category( '9' )
//判断当前分类页面的名字是否为“Stinky Cheeses”。
is_category( 'Stinky Cheeses' )
//判断当前分类页面的别名是否为“blue-cheese”。
is_category( 'blue-cheese' )
//用数组 传递参数,在前面的is_single里面讲过,作用类似。
is_category( array( 9, 'blue-cheese', 'Stinky cheeses' ) )

没什么特别的可讲

in_category(73)

判断当前文章是否属于某个特定分类目录(id 为 73),返回 True。注意,这里是 in 而不是 is,与上面的不同,用法和is_category类似。

is_tag()

判断当前页面是否为标签页面,当然可以传递参数,和is_category用法一致。

has_tag()

判断当前文章是否有一个标签,必须用在循环中。

is_tax()

判断当前页面是否为一个自定义分类的存档页面,下面那是用法示例:

//判断当前页面是否为一个名为 flavor 自定义分类的存档页面。
is_tax( 'flavor' )
//判断当前自定义分类 flavor 页面的别名是否为 mild。
is_tax( 'flavor', 'mild' )
//判断当前自定义分类 flavor 页面的页面是否为 sharp、mild、extreme 中的一个。
is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) )

和is_category、is_tag用法不同请勿混淆。

has_term()

判断当前页面是否带有自定义分类。

//判断当前页面是否是否带有别名为 green 的自定义分类 color。
has_term( 'green', 'color' )
//判断当前页面是否是否带有数组中的自定义分类 color
has_term( array( 'green', 'orange', 'blue' ), 'color' )
is_author()

判断当前页面是否是一个作者存档页面,用法示例:

//判断当前页面是否为 id 为 4 的作者页面。
is_author( '4' )
//判断当前存档页面是否是 Vivian(Nickname) 的作者存档页面。
is_author( 'Vivian' )
//判断当前存档页面是否属于 id 为 4,或者名字为 “john-jones”、“Vivian” 的作者存档页面。
is_author( array( 4, 'john-jones', 'Vivian' ) )
is_date()

判断当前页面是否为任何的按时间存档的页面。

is_year()

判断当前页面是否为按年份存档的页面。

is_month()

判断当前页面是否为按月份存档的页面。

is_day()

判断当前页面是否为按日期存档的页面。

is_time()

判断当前页面是否为按照小时、分钟、秒存档的页面。

is_new_day()

判断当前页面是否为当天文章的时间存档页。

is_archive()

判断当前页面是否为一个存档页面,包括:分类、标签、作者页面、日期存档页面等。

is_search()

判断当前页面是否为一个搜索结果页面。

is_404()

判断当前页面是否为404页面

is_paged()

判断当前页面是否为分页。

is_attachment()

判断当前页面是否为附件页。

is_feed()

判断是否在订阅页面。

is_trackback()

判断trackback是否开启。

is_preview()

判断一篇文章是否在预览状态(文章本身处于草稿状态)。

has_excerpt()

判断当前文章是否有摘要内容。

in_the_loop()

判断是否在主循环内部。

如果发现一些判断失效了可能是循环未注销造成的全局变量错乱问题,可以使用以下函数来注销循环:

//使用WP_Query创建多个循环是使用,不接受任何参数,恢复$post全局变量的数据
wp_reset_postdata();
//使用query_posts()自定义循环时使用,不接受任何参数,不仅恢复$post全局变量,还会销毁之前的查询
wp_reset_query();
//需要重用同一个页面的查询结果时使用
rewind_posts();

实例:

$random_post = new WP_query();
$random_post->query('cat=3&showposts=1&orderby=rand');
while ($random_post->have_posts()) : $random_post->the_post();
<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
    <img src="<?php echo get_post_meta($random_post->ID, 'featured', true); ?>">
</a>
endwhile;
wp_reset_postdata();
<?php query_posts('posts_per_page=3');
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<?php endwhile; endif; ?>
<?php rewind_posts(); ?>
<?php while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>

wordpress开发教程:原生态的wordpress ajax

最近小V在开发一款自适应的wordpress博客主题,该wordpress主题大量数据展示与提交都用到了ajax技术,所以小V特意写一篇教程记录下,方便其他wordpress开发者做wordpress ajax应用开发的时候做参考。如果有些小伙伴还不知道什么是ajax,请自行百度脑补~~,闲话就不多说了,教程开始。

不少开发者在写插件时喜欢用以下方式实现ajax:

require_once( '../../../../wp-config.php' );

就连百度站长平台官方开发的wordpress结构化数据提交插件也是如此实现ajax的,这是一种极其不合理的写法,因为一旦用户设置的目录不同, 相对路径就会失效.并且, 如果你在你的插件中使用的是面向对象的写法, 你将无法直接使用一些变量和私有方法. 最大的坏处就是会导致整个Wordpress的框架额外重新加载一遍,严重的影响了网站的运行效率。

其实,wordpress为了方便开发者开发带有ajax功能的插件主题已经预定义好了ajax方法,我们只需按照官方预留的方法去使用就好了。在开发wordpress ajax你要先了解的是,不管是后台还是前台任何的Ajax请求都是在admin-ajax.php处理的,向admin-ajax.php发送请求的时候, 有一个必须的参数是$_REQUEST['action'], 因为admin-ajax.php需要根据用户是否登陆了来触发不同的hooks。

if ( is_user_logged_in() ) {
    /**
     * Fires authenticated AJAX actions for logged-in users.
     *
     * The dynamic portion of the hook name, `$_REQUEST['action']`,
     * refers to the name of the AJAX action callback being fired.
     *
     * @since 2.1.0
     */
    do_action( 'wp_ajax_' . $_REQUEST['action'] );
} else {
    /**
     * Fires non-authenticated AJAX actions for logged-out users.
     *
     * The dynamic portion of the hook name, `$_REQUEST['action']`,
     * refers to the name of the AJAX action callback being fired.
     *
     * @since 2.8.0
     */
    do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
}

以上代码取自wordpress系统文件admin-ajax.php,从以上代码我们可以看出我们要发起一个请求首先要知道这个请求是否在登录状态下发起的?不同状态触发的hook也不一样,下面是个在主题利用jquery实现ajax的示例代码:

add_action( 'wp_head', 'v7v3AjaxScript');
function v7v3AjaxScript(){
    print '<script>var v7v3_ajaxurl = "'. admin_url( 'admin-ajax.php' ) . '"' . ";</script>\n";
    print "<script>
    $(docunment).ready(function(){
        $.ajax( {
            url: v7v3_ajaxurl,
            data:{
                action : 'is_login'
            },
            type:'post',
            cache:false,
            success:function(data) {
                alert(data);
            }
        });
    });
    </scrip>";
}
  
add_action( 'wp_ajax_nopriv_is_login', 'v7v3_ajax_not_login' );
add_action( 'wp_ajax_is_login', 'v7v3_ajax_is_login' );
  
function v7v3_ajax_is_login(){
    global $current_user;
    get_currentuserinfo();
    printf( '登录用户您好 : %s!', $current_user->display_name );
    //函数结束前的die或exit很重要,一定要加。
    die;
}
  
function v7v3_ajax_not_login(){
    print '尊敬的访客您好!';
    //函数结束前的die或exit很重要,一定要加。
    die;
}

在开发wordpress ajax应用中最重要的一点就是函数结束之前一定要加die或者exit,如果不加的话会把整个wordpress框架都重新加载一遍。

wordpress开发教程:优化用户注册体验(自定义密码)

今天有位小伙伴在群中询问wordpress新用户注册显示密码的问题,由于wordpress默认的是不让用户自己去填写密码的,而是系统自动给用户生成一个密码并且发送到用户邮箱,相对来说可能有些用户会不习惯,今天小V就来教大家优化wordpress的用户注册体验,让用户自己设置账户密码,其实很简单只需要在主题的function.php加上以下代码:

<?php
add_action( 'register_form', 'v7v3_show_register' );
function v7v3_show_register(){
?>
    <p>
        <label for="password">密码:<br/>
        <input id="password" class="input" type="password" tabindex="30" size="25" value="" name="password" />
        </label>
    </p>
    <p>
        <label for="repeat_password">确认密码<br/>
        <input id="repeat_password" class="input" type="password" tabindex="40" size="25" value="" name="repeat_password" />
        </label>
    </p>
    <p>
        <label for="are_you_human" style="font-size:11px">挖掘机技术哪家强?(蓝翔)<br/>
        <input id="are_you_human" class="input" type="text" tabindex="40" size="25" value="" name="are_you_human" />
        </label>
    </p>
<?php
}
add_action( 'register_post', 'ts_check_extra_register_fields', 10, 3 );
function ts_check_extra_register_fields($login, $email, $errors) {
    if ( $_POST['password'] !== $_POST['repeat_password'] ) {
        $errors->add( 'passwords_not_matched', "<strong>ERROR</strong>: 两次密码不一致" );
    }
    if ( strlen( $_POST['password'] ) < 8 ) {
        $errors->add( 'password_too_short', "<strong>ERROR</strong>: 密码长度小于8位!" );
    }
    if ( $_POST['are_you_human'] !== '蓝翔' ) {
        $errors->add( 'not_human', "<strong>ERROR</strong>: 回答错误,请重新填写注册信息!" );
    }
}

为了保证不被注册机骚扰此代码中还自带了一个验证问题字段,防止注册机批量注册垃圾用户。虽然让用户可以自己填写密码,但是有些用户更加喜欢让系统为他生成密码,为了给这些用户提供方便,我们可以判断下当前用户注册时是否填了密码,如果没填再让系统生成一个,代码如下:

add_action( 'user_register', 'v7v3_register_extra_pass', 100 );
function v7v3_register_extra_pass( $user_id, $password="", $meta=array() ){
    $userdata = array();
    $userdata['ID'] = $user_id;
if( $_POST['password'] ){
    $userdata['user_pass'] = $_POST['password'];
}
    wp_update_user($userdata);
}
    
/*如果强制用户输入密码,则可将此段代码的注释去除
add_action('admin_init', 'remove_default_password_nag');
function remove_default_password_nag() {
    global $user_ID;
    delete_user_setting('default_password_nag', $user_ID);
    update_user_option($user_ID, 'default_password_nag', false, true);
}
*/

当然为了给用户更好的体验,我们可以在注册框下方加个提示,代码如下:

add_filter( 'gettext', 'v7v3_edit_text' );
function v7v3_edit_text( $text ) {
    if ( $text == 'A password will be e-mailed to you.' ) {
        $text = '如果您不填写密码,系统将为您生成一个密码, 并发送至您的邮箱。';
    }
    return $text;
}

wordpress微信插件:WeChat Subscribers Lite微信公众订阅号插件

新版本最大的更新是支持了“可选关键字搜索模式(需默认触发)”,“同步文章内容”(支持图文和文字消息),“自动回复最新内容”(仅支持图文消息模式),“消息历史记录”,此版本由苦工-古月,担任全部php开发工作。

如果发现任何bug或者有什么新功能需求,欢迎朝插件作者发送电子邮件。redy.ru@gmail.com

这是一个简单通用的微信(weixin)公众平台订阅号专用插件。现在这个版本的插件只支持普通订阅号,任何人只要以个人身份免费注册微信公众平台就可以足以使用这个插件的全部功能,不需要专门为了这个插件去付费获得(weixin)公众号认证。

这个插件将永久免费:)

特色:

可设定默认回复为搜索关键字结果;

可根据类型(Post-type)设定自动回复最新文章;

可选择某篇文章内容,并将它同步到自动回复中;

便捷管理多种weixin消息模版,可随时切换,数量不限;

无需安装任何其他程序,完全使用Wordpress原生支持;

带有接收消息的历史记录;

多种消息模式,默认自动回复消息,关键词自动回复消息,weixin订阅自动回复欢迎消息;

自动检测关键词冲突;

自由设置纯文本消息、图文消息、最近消息,可随时切换消息类型,排序;

图片上传管理都使用Wordpress原生图片管理器。

访问插件主页获得更多帮助: https://wordpress.org/plugins/wechat-subscribers-lite/

致所有wordpress新手,如何检测下载的wordpress主题插件是否包含后门

扯蛋的寄语:小V又有一段时间没有更新网站的教程了,说实在的年底了人也懒了明明手上一大堆事没处理完还天天到处瞎逛实在是静不下心来好好的做一件事了。今天起床比较晚趁着还么起床小V就来更新一发比较使用的教程~

最近很多小伙伴一直在讨论网站被黑和下载的免费wordpress主题插件被挂马的话题,那么今天小V就来教大家如何识别wordpress主题插件是否被留了后门。首先来说下wordpress的运行环境,相信稍微有点常识的站长都知道wordpress是一款运行在php+mysql构架之上的建站系统,而且wordpress主题插件都是编写成.php后缀的可执行文件这是为什么wordpress的免费主题插件很容易留后门的问题。既然都是由php编写的,那么我们只要知道一般php后门常用程序就能一定程度上察觉到主题插件中是否存在后门木马,下面小V列出一些常见php后门函数:

执行系统命令: system, passthru, shell_exec, exec, popen, proc_open(高危)
代码执行: eval, assert, preg_replace('/$pattern/e')(高危)
文件操作:file_get_contents, file_put_contents, fputs, fwrite(高危)
字符串加密解密压缩解压隐藏:base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13, base64_decode, gzcompress, chr(可疑)
wordpress创建后门用户:wp_create_user, WP_User, set_role(高危)

如果在主题中小V标注的高危代码基本就可以确定这款主题很有问题了,基本上都是为了留后门或者是做些小动作了。如果是发现了本文标注的可疑代码那就要注意了很有可能加密部分的代码就是后门。很多小伙伴肯定不懂preg_replace('/$pattern/e')这段代码是什么意思,下面小V就来给大家解释下,preg_replace函数使用e修饰符之后在执行逆向引用替换完之后会将替换的代码当作php代码运行,所以也是一种非常常见的后门代码。在检测主题插件是否包含后门的时候只要用文本搜索工具或者软件搜索主题插件的php文件是否包含以上关键字,在搜索到preg_replace时需要人工对比下代码查看是否包含e修饰符,如果主题文件出现大量的chr(2).chr(3).chr(58)这样类似的代码也要小心了,另外发现主题文件出现一大堆无规则的字符也要小心了一般都是加密后的代码很可能隐藏了后门。

PS:由于平时小V接到的主题插件投稿比较多,所以很难将所有的投稿文件都检查一边。最多也就检查下几个关键文件是否挂马,所以请大家在下载主题后尽量再自己检查一遍。

WP-Player v2.0 For WordPress 音乐播放插件

改写了获取虾米ID的方法;直接输入网址即可获取虾米ID和对应的音乐类型;

支持 单音乐页面、专辑页面、艺人页面、精选集页面(也可自己创建精选集);

支持多歌曲播放;完全兼容以前老版本短代码;

完美支持 IE6+,FireFox,Chrome 浏览器;

废除了短代码中的 loop 参数;

将解析虾米地址移交至插件本身处理;

关闭后台无用选项设置;

支持后台自定义上传音乐文件或音乐外链;

使用方法专区

在虾米网打开喜欢的歌曲页面,复制歌曲页面的网址如:http://www.xiami.com/song/2078022……

并将复制的网址填写到WP-Player的表单内。音乐类型将根据网址自动做出选择。

点击获取音乐ID按钮,此时音乐ID出现在表单中。

将短代码 [player autoplay="1"] 填入您的文章内容中。

短代码中 autoplay 表示是否自动播放;参数"0"表示否;"1"表示是;

PS:建议使用网址来获取音乐ID。

注意事项专区

一篇文章只能设置一个播放器。

为了用户体验,在文章详细页面中 自动播放 才会启用。首页和列表员设置将无用。

因插件需要依赖 jQuery,如主题缺少jQuery;需在后台WP-Player设置中选用;

如同时设置 虾米ID 和 自定义上传音乐,将优先采用虾米ID解析。

插件下载专区

通过 WordPress 后台插件管理 => 安装插件 => 搜索插件 => WP-Player => 点击安装插件

官网下载 https://wordpress.org/plugins/wp-player/ 上传插件 => 安装插件

虾米ID获取扫盲专区

单首歌曲网址,一般网址中将包含 **song** 字符;

专辑页面网址,一般网址中将包含 **album** 字符;

艺人页面网址,一般网址中将包含 **artist** 字符;

精选集页面,一般网址中将包含 **collect** 字符;

关于虾米精选集的制作,在制作时,一定要设置为所有人可见,这样才能获取到歌单;

开发者专区

因为考虑到插件加载的性能,所以插件中的代码全都压缩了。

源码我托管在 GitHub 中,有需要参考的请上 https://github.com/webjyh/WP-Player

音频播放采用 SoundManager2 来管理,顺便求 GitHub 项目 Star;

插件在线预览

Demo:http://webjyh.com/wp-player/

图片预览

WP-Player,wordpress音乐插件

WP-Player,wordpress音乐插件

俄罗斯恶意软件SoakSoak已感染10万多个WordPress网站

据外媒报道,上周日,一款名为SoakSoak的俄罗斯恶意软件感染了10万多个Wordpress网站,大量博客沦为受害者。为了遏制破坏范围的进一步扩大,Google已经屏蔽了1.1万个域名。据安全公司Sucuri调查发现,SoakSoak利用了幻灯片播放插件Slider Revolution当中的一个漏洞发起攻击。

恶意软件SoakSoak

虽然Slider Revolution已经在9月份的时候就知道了该漏洞的存在,但该软件开发团队似乎没能赶在黑客攻击前将漏洞堵上。

Sucuri称,由于很多网站持有者并不知道恶意软件的存在,所以想要彻底根除SoakSoak相对来说比较困难。除了移除软件中的恶意软件代码之外,Slider Revolution用户还需更新软件。如果这款软件已经成为网站主题的一部分,那么它就无法自动更新,用户需自己手动更新才行。

游戏网站Dulfy日前就已经移除了软件中的恶意代码并开启了防火墙功能。不过该网站持有人也表示,他们也不确定这样的措施是否就能彻底围堵该攻击。

WordPress是一个拥有7000多万个网站的内容管理系统。由于SoakSoak只攻击自托管网站,所以对于个人博客的用户,不会有什么影响。当然,如果该群体访问了已被感染的病毒那就另当别论了。

目前并不清楚该恶意软件散播者是出于何目的对Wordpress发起攻击。

原文:http://www.cnbeta.com/articles/354853.htm

wordpress备份插件BackUpWordPress汉化版

强大的WordPress备份插件BackUpWordPress,可以对您的wordpress站点进行数据库和文件备份,而且还可以选择将备份内容发送到您的邮箱。最新版本为V3.0.4,这个插件由小z博客进行了汉化,设置起来非常简单。

wordpress插件特点:

超级简单易用,不需要设置。

占用内存极低,共享宿主环境。

管理多个时间表

选择有每个备份文件发到您的电子邮件

用zip和mysqldump更快的备份,如果它们是可用的。

支持在Linux和Windows服务器

从备份中排除您的文件或文件夹

插件使用:

插件安装并激活成功后,在工具 -> Backups中进行设置,默认情况每天会对数据库进行一次备份,每周对网站文件 & 数据库备份一次,当然了您完全可以修改这一默认设置。

其它说明:

兼容最新版的WordPress4.0.1

PHP版本要求为5.3.2或更高,对PHP5.2的用户来说是个遗憾。

部分界面截图:

BackUpWordPress,wordpress备份插件

原文:http://www.xiaoz.me/archives/5525