为wordpress主题添加点击加载更多功能:jQuery+Ajax+php+mysql

在开发wordpress主题模板时,客户可能需要各种各样的功能,比如:本章所要讲到的“点击加载更多”。其实,让wordpress主题实现“点击加载更多”,并不是一件复杂的事,但也不是一件简单的事,说它简单,因为它的实现并不算难,说它复杂,因为它会用到很多方面的知识:jQuery、Ajax、php、mysql,当然,还要用到html和css。下面,我们一起来看看如何为wordpress主题添加点击加载更多功能吧。

点击加载更多的步骤:前台点击 => Ajax传递参数到php处理 => 进数据库 => php读取数据 => Ajax返回数据

实现步骤如下:

第一步:前台代码

<div class="box">
 <?php query_posts('posts_per_page=5&caller_get_posts=1'); ?>
 <?php while (have_posts()) : the_post(); ?>
 <li>
 <a target="_blank" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" class="title"><?php the_title(); ?></a>
 </li>
 <?php endwhile; wp_reset_query(); ?>
 </div>
 <li class="hot">加载更多</li>

上面代码中的php 代码在点击前先显示了5篇文章。

第二步:jQuery + Ajax 代码

$(function(){
 var num = 5;//初始化从第几篇开始点击加载
 var numm = 3; //每点击一次加载多少篇
 $(".hot").click(function(){
 $.post( //使用Ajax 的 post方法
 "/wordpress/wp-content/themes/twentyfifteen/restart/get.php",//php文件路径
 { numb:num}, //传递参数:从第几篇开始
 function(response,status,xhr){ //回调函数,返回数据
 $(".box").html( $(".box").html() + response);
 });
 num +=numm; //num 累加
 });
 });

第三步:php 处理文件代码

require("config.php"); //引用数据库链接文件
$num = $_POST["numb"]; //接收 AJAX 传递过来的数字:从第几篇开始
//下面是读取数据库数据
$sql = "select ID,post_title,guid from wp_posts order by ID desc limit ".$num.",3";
$result = mysql_query($sql);

while($row = mysql_fetch_array($result)){
 echo '<li><a href="'.$row["guid"].'">'.$row["post_title"].'</a></li>';
 echo "<br>";
 }

mysql_close($conn); //关闭数据库

第四步:数据库链接文件代码:

//获取当前文件所在目录
$gen=$_SERVER['DOCUMENT_ROOT'];
require_once("$gen/wp-config.php");
// 方式二 结束

//链接mysql服务器 开始
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysqli_select_db($connection, DB_NAME);

通过上面这4步骤,我们就为wordpress主题添加了“点击加载更多”功能。当然,我这里只是简单实现了它的功能,具体前台显示样式你可以根据自己的需求来深入修改。

[转]wordpress主题中的独立php文件引用所出现的问题

我们在项目开发中,有时候会要用到独立的php文件,而wordpress主题所识别的一些文件并没有包含我们的独立文件。

一般来说,我们在wordpress主题中需要增加的函数是放在function.php中的,我们也可以在function.php中引用我们的独立php文件,所编写的判断或者函数都可以在主题中被运用。

但是不管在function.php中还是引用的其他文件,我们都只能从站点地址发出请求,比如get请求,我们只能在域名如www.themepark.com.cn?getsome=true,返回也是在首页上进行返回的。

这样的方式可以满足我们的一些功能,但是某些需要使用独立php的功能就无法实现了。

比如下方的例子。

我们需要访问主题中某个php文件如get_json.php文件输出一段json数据,如果我们包含在function.php中进行请求,那么输出的json是叠加在首页上的,这样不管我们使用php去获取或者使用js获取都是无法获取到这个数据的。

如果我们直接访问这个php的绝对路径,也就是独立使用这个php,那么不管是wordpress的函数,还是我们放在function.php中的函数都是不能是别的,会提示报错没有这个函数。

那么,我们如何解决在wordpress主题中使用独立php文件,能够使用到wordpress自带的函数和主题内function.php中的函数呢?

解决上文所述的问题实际上比较简单,我们只需要在独立的php中引用wordpress的配置文件wp-confing.php就可以使用到wordpress的函数和wordpress主题的函数了。

因此我们在独立使用php文件时,在文件的顶部引用一下wordpress的配置文件就行了。

wordpress的配置文件在网站的根目录,因此如果我们直接使用require_once时无法引用到的,我们需要使用绝对路径去引用:

在文件头加入如下代码:

$genmul=$_SERVER['DOCUMENT_ROOT'];
require_once("$genmul/wp-config.php");

即可引用到,不过这个代码是直接引用的根目录,如果你的目录形式是使用子目录的 ,如在本地常见的http://localhost/wordpress/,就需要在引用的地方加上你的子目录:

$genmul=$_SERVER['DOCUMENT_ROOT'].'/wordpress';
require_once("$genmul/wp-config.php");

这样,我们的独立php文件就能够正常运行了,如上问所说的输出json数据,直接访问这个php文件发出请求,判断正确的话,就会输出json数据,而不会有别的内容干扰,我们就能非常方便的获取到这个数据了。

上面说了在wordpress主题中使用独立php的方法,下面分享一下我们在最近的项目中使用这个方法进行的功能开发。

wordpress本身是动态程序,因此如果我们将一些数据和请求放在function.php,当网站是动态的话,是没有问题的,直接解析php文件,如果我们使用插件,将全站进行静态化处理之后,解析的是html文件,那么很多函数的判断在静态文件中是失效的。

如果我们希望在静态网站中,使用动态的功能,那么我们可以使用独立的php文件,并且在首页或者底部顶部使用jq,也就是脚本访问这个独立的php,由于直接访问的文件,因此不会受到静态缓存的影响,服务器还是能正确的运行独立php,从而输出我们想要的内容,在通过jq脚本输出到首页,这样就绕过了静态网站,获取到了动态生成的数据。

因此这个方法还是非常有效的,前文所说的,php文件输出json数据,也是使用直接访问php文件输出是最好的办法,简单有效。

本文转自:主题公园

[转]wordpress主题中的独立 php 文件如何链接到数据库?

一般情况下,wordpress主题文件是不需要我们添加链接数据库的,wordpress程序会自动帮它链接上。但是,在我们开发wordpress主题时,可能会用到独立的 php 文件,它们不是wordpress主题内嵌文件,比如:经常用到的“点赞”功能文件、AJAX加载更多……,这些功能都会用到独立的php处理文件,如果这些php文件需要获取数据库数据,就必需链接到数据库。那么,wordpress主题中的这些独立的 php 文件如何链接到数据库呢?

情况一:知道数据库信息的情况下

如果你知道网站的数据库信息,如:数据库服务器路径、数据库名、数据库用户名、数据库密码,这时,你可以直接在php文件中添加数据库链接。比方说:

数据库服务器路径: http://localhost
数据库名:user
数据库用户名:user
数据库密码:345463

这时,我们直接在这个独立的php文件中添加如下代码:

define("DB_HOST","localhost");
define("DB_USER","user");
define("DB_PWD","345463");
define("DB_NAME","user");
$conn = @mysql_connect(DB_HOST,DB_USER,DB_PWD) or die("连接服务器出错:".mysql_error());
@mysql_select_db(DB_NAME) or die("连接数据库出错:".mysql_error());
@mysql_query('SET NAMES UTF8');
//然后可以对数据库数据操作

情况二:不知道数据库信息的情况下

当然,对自己的网站那是肯定知道数据库信息的,如果你是wordpress主题开发者,而这些新开发的主题你又想让更多的人使用,甚至想买卖这些wordpress主题,这时,我们就不知道用户们的网站的数据库信息了。这时,我们就不能通过上面的方法来链接数据库了。

其实,wordpress程序自身就有链接数据库的文件,就是wordpress根目录下的wp_config.php文件,这个文件中就有数据库信息,我们只需要引用这个文件,就可以直接使用这些数据库信息了。但是,我们又不能使用固定的绝对路径来引用这个文件,因为不同的网站,绝对路径是不一样的。这时,我们就必须通过php方法来动态获取到这个绝对路径。代码如下:

//获取当前文件所在目录
define("__S__",str_replace("\\","/",dirname(__FILE__)));
/*获取wordpress所在目录,这里要位移取决于最后面的那个数字,现在调整为33,为了说的更清楚,举例:s.substr(a,b);的意思是从字符串s下标为a开始去字符中取出b个字符!
*这里就是以根目录下标为0,开始去字符取出33个字符,如果我把33改成0,那么得出的路径是“/wp-config.php”,如果我多取33个那么就变成“/wwwroot/webroot/www.kelin601.com/wp-config.php”,不同的路径长度可能不一样,需要调整这个值
*/
define("__ROOT__",substr(__S__,0,33));
//引用wp-config.php文件,获取数据库信息
require(__ROOT__."/wp-config.php");

这里我补充一下:以上的这些代码目的就是为了引入wordpress根目录下的配置文件,这个方法有它的弊端,但是也有它的好处,弊端是这个通过截取字符串长度来获取配置文件的路径长度,这个值可能会随着以后网站的迁移,或者根目录路径更换而不一样,比如我现在的路径刚好需要33个字符长度就能输出:/wwwroot/webroot/www.kelin803.com/wp-config.php,但是我换了一个目录或者服务器的时候,wp-config.php路径可能是/wwwroot/www.kelin803.com/wp-config.php,这个时候字符就不是33了而是25了。当然,好处是这种方法能够让我们通过修改这个长度达到任意路径的目的。我们可以去到/wwwroot/webroot/www.kelin803.com/wp-content,也可以到/wwwroot/webroot。

基于这个方法的弊端,我给出另外一个方案:

$wordpressroot=$_SERVER['DOCUMENT_ROOT'];
require_once("$wordpressroot/wp-config.php");

同样可以达到以上的目的。

然后,再通过wp-config.php文件中的数据库常量来链接数据库,代码如下:

//链接mysql 服务器
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("连接服务器出错:".mysql_error());
//链接网站所在数据库
mysql_select_db(DB_NAME) or die("连接数据库出错:".mysql_error());
//设置字符编码
@mysql_query('SET NAMES UTF8');

这样,我们所开发的wordpress主题中的 php 独立文件就可以在任何网站上自动链接到数据库了。好了,就介绍到这里,如果你也想让你的主题中的php独立文件链接到数据库,可以试试上面的2种方法吧,当然,我是推荐使用第二种方法,因为,它不需要你修改任何代码。

根据自己的检验,最后连接数据库的时候遇到了问题,报错了,报错码如下:

Call to undefined function mysql_connect() in xxx/xxx

最后在这里找到了解决方案:

$myconnection = mysqli_connect('xxxxxxxx','xxxxxx','xxxxxx');
mysqli_select_db($myconnection,$register );
$query_Recordset1 = "SELECT * FROM `application`";
$Recordset1 = mysqli_query($myconnection, $query_Recordset1 ) or die(mysqli_error($myconnection));
$row_Recordset1 = mysqli_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysqli_num_rows($Recordset1);

 

为wordpress服务器配置Redis加速方案

Installation

Download, extract and compile Redis with:

$ wget http://download.redis.io/releases/redis-4.0.6.tar.gz
$ tar xzf redis-4.0.6.tar.gz
$ cd redis-4.0.6
$ make
$ make install

最好再编译后直接执行make install命令来将这些可执行程序复制到/user/local/bin目录中以便以后执行程序时可以不用输入完整的路径

make的时候注意:

如果make的时候提示如下错误:

cc: error: ../deps/hiredis/libhiredis.a: No such file or directory

cc: error: ../deps/lua/src/liblua.a: No such file or directory

cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory

make: *** [redis-server] Error 1

则分别进入redis下的deps下的hiredis、lua和jemalloc下运行make。jemalloc下可能要先运行./configure,然后make。最后回到redis的src下,运行make,就OK了。

如果提示如下错误:

CPU you selected does not support x86-64 instruction set

把make命令改成make CFLAGS=”-march=x86-64”就行了

The binaries that are now compiled are available in the src directory. Run Redis with:

$ src/redis-server

You can interact with Redis using the built-in client:

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

如果不顺利的话,我这里准备了一些报错的解决方案:

一:make编译时,出现错误

解决方法:仔细看看error错误位置的信息,很可能是某些东西没有安装好,把这些东西安装了就没问题了

二:

Warning: no config file specified, using the default config. In order to specify a config file use ‘redis-server /path/to/redis.conf’
Opening port: bind: Address already in use

类似这样的警告是因为配置文件没有正确加载。
我们可以事先修改一下配置文件redis.conf,修改daemonize no,将no改成yes,使其成为后台线程,进入redis.conf配置文件的同级目录

使用命令redis-server redis.conf。我这里因为配置文件没有正确加载导致了使用redis命令没有任何反应,为空。

三:启动redis时出现警告,就是使用redis-server出现redis图形的时候,大致是memory相关的警告信息,我们使用如下命令

a) echo vm.overcommit_memory=1 >> /etc/sysctl.conf

b) sysctl vm.overcommit_memory=1 或执行echo vm.overcommit_memory=1 >>/proc/sys/vm/overcommit_memory

如果出现警告:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.

过量使用内存设置为0!在低内存环境下,后台保存可能失败。为了修正这个问题,请在/etc/sysctl.conf 添加一项 ‘vm.overcommit_memory = 1’ ,然后重启(或者运行命令’sysctl vm.overcommit_memory=1’ )使其生效。

按这个提示来做,警告排除。

2、通过初始化脚本启动redis

redis源码目录的utils文件夹中有一个名为redis-init_script的初始化脚本文件

步骤

(1)配置初始化脚本。首先将初始化脚本复制到/etc/init.d目录中,文件名为redis_端口号(redis_6379),然后修改脚本第6行的REDISPORT的变量值为同样的端口号(ubuntu)

如果是centos或者redhat则使用以下脚本(端口号根据实际情况修改)

#chkconfig: 2345 90 10
#description: Redis is a persistent key-value database
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/6379.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
if [ "$?"="0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [ -x ${PIDFILE} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis_6379 {start|stop|restart|force-reload}" >&2
exit 1
esac

(2)建立需要的文件夹

/etc/redis    存放redis配置文件

/var/redis/端口号    存放redis的持久化文件

(3)修改配置文件

把配置文件模板复制到/etc/redis目录中,已端口号命名(如“6379.conf”)

需要修改的配置及说明:

daemonize       yes                                          使redis以守护进程模式运行

pidfile         /var/run/redis_端口号.pid        设置redis的pid文件位置

port            端口号                                     设置redis监听的端口号

 dir            /var/redis/端口号                     设置持久化文件存放位置

设置开机启动服务:

sudo update-rc.d redis端口号 defaults // 告诉系统启动时候,自动执行redis端口号 这个脚本。(ubuntu)

如果是centos或者redhat则使用以下方法:

chkconfig redis_端口号  on

设置权限可执行

chmod +x /etc/init.d/redis_端口号

现在就可以使用 /etc/init.d/redis_端口号 start/stop 来启动和停止redis了

三、停止redis

redis-cli shutdown  或者 kill redis进程的pid

附:

redis启动警告问题:WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

1.启动redis,命令: redis-server redis.conf路径文件

2.会发现warning警告,WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 如下图

3.这句话的翻译大概就是:对一个高负载的环境来说tcp设置128这个值,太小了。 这是我的理解,绝体的还需到官网理解。然后我们可以手动设置,或者设置永久值.所以执行:

4.执行后如下,这个问题解决了。

5.原因就是因为128太小了。执行echo 511 > /proc/sys/net/core/somaxconn

命令就把这个问题解决了。但是这个只是暂时的。如果想要永久解决,打开ietc/sysctl.conf

在这里面添net.core.somaxconn= 1024 然后执行sysctl -p 就可以永久消除这个warning

在这启动redis就看不到这个128的warning了

CSS3制作黑白对比的点点背景

CSS可以制作出很多创意的效果,比如今天给大家分享的这个点点背景,虽然我不是点点控,但是这种创意的设计和新型的技术让我很痴迷,通过几行简单的代码就能实现以前不可能完成的工作,真的是太不可思议了。

css代码如下:

body{
background: radial-gradient(circle, white 10%, transparent 10%),
  radial-gradient(circle, white 10%, black 10%) 50px 50px;
background-size:100px 100px;
}

如果感觉点点太大了可以调整样式,这个是我调整后的样式,大小合适,分享下:

backgroundradial-gradient(circle, #9ab8d010%, transparent 10%), radial-gradient(circle, #eadbdb 10%, #e2e0e010%) 10px 10px;
background-size20px 20px;

点击这里查看示例

项目地址:http://dabblet.com/gist/1457668

WordPress 更改文章密码保护后显示的提示内容

WordPress 有一个密码保护功能,你可以在文章和页面的编辑界面看到设置选项:

设置了密码后,你就可以在前台看到如下提示内容:

 

本文的目的就是要修改这个提示内容,核心函数如下(添加到当前主题的 functions.php 即可):

本文的目的就是要修改这个提示内容,核心函数如下(添加到当前主题的 functions.php 即可):

/**
 * WordPress 更改文章密码保护后显示的提示内容
 * https://www.wpdaxue.com/change-password-protected-text.html
 */
function password_protected_change( $content ) {
    global $post;
    if ( ! empty( $post->post_password ) && stripslashes( $_COOKIE['wp-postpass_'.COOKIEHASH] ) != $post->post_password ) {
        $output = '
 
        <form action="' . get_option( 'siteurl' ) . '/wp-pass.php" method="post">
            '.__( "这是一篇受密码保护的文章,您需要提供访问密码:" ).'
 
            <label for="post_password">密码:</label>
            <input name="post_password" class="input" type="password" size="20" />
            <input type="submit" name="Submit" class="button" value="' . __( "提交" ) . '" />
 
        </form>
 
        ';
        return $output;
    } else {
        return $content;
    }
}
add_filter( 'the_content','password_protected_change' );

代码先判断文章是否有密码保护,并且当前访问者的浏览器是否有输入过正确密码的 cookie 记录,如果有密码保护并且没有cookie 记录,就显示密码保护提示内容,否则显示文章内容。

所以,如果你要修改提示内容,只需要修改 $output 部分的内容即可,比如修改“这是一篇受密码保护的文章,您需要提供访问密码:”等等。