分类目录归档:技术文章

Editing Gravity Forms Entries on The Front-End

edit gravity forms on frontend

If you are using WordPress and the Gravity Forms plugin, you might want to allow users to edit their posts or entries on the front-end. This is not supported by the plugin but there are other plugins or addons like Gravity Forms Edit Entries, Gravity Forms Sticky List, Gravity Forms: Post Updates, and GravityView that provide such functionality. But, they also come with other features that you might not want or need and installing more and more plugins can certainly impact performance. Moreover, a few of the plugins that I have tried would create and delete entries in GravityFroms causing missing Entry IDs which isn’t ideal and it is additional work on the system. Today, I will show you how to edit Gravity Forms entries on a page by simply using GF actions, hooks, and the API.

Rewriting frontend and backend validation is a pain so let’s embed a new GF form on a page as it has all the validation in place. We use the function call in a page template file because it allows us to prefill the form using $field_values. You can use a query parameter in the page URL to specify your existing entry ID, pull the contents via GFAPI::get_entry(); and then we use the function call mentioned above and fill the form values with the $field_values parameter.

Submitting this form will create a new entry but we can easily fix that by dropping a conditional in gform_pre_submission action hook which gets run after form validation but before the entry is created and stored in the database. We could hook into page name by using an if statement that checks what page was the form submitted from via $_SERVER[“REDIRECT_URL”]. So, if the page is “create entry”, we continue but if the page is “edit entry”, we look at what has been submitted via $_POST, use the values to update the entry via GFAPI::update_entry(), redirect via PHP header() call and kill the process via die(). The explanation seems long but the code is quite concise.

Here is a code example, and it also shows how to unserialize a Gravity Forms List Field:

<?php
//link on a page to edit an entry: <a href=”http://domain.com/edit-page/?entry=1″>Edit</a>
//page template for “edit-page”
//grab entry id from query parameter in link above
$entry_id=$_GET[entry];
//grab the entry values via the GF API
$entry = GFAPI::get_entry($entry_id);
if ( is_wp_error( $entry ) ) {
echo Error;
} else {
//list field, example how to unserialize
$clist = maybe_unserialize($entry[2]);
$cvalue = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($clist)), FALSE);
//embed new form and populate the form with normal field and list field
gravity_form(1, false, false, false, array(normalfield1=>$entry[1],listfield2=>$entry[2]), true);
}
//function.php – GF action hook – edit isntead of submitting if the request comes from edit-page
add_action(gform_pre_submission_1, pre_submission_handler);
function pre_submission_handler($form){
if($_SERVER[REDIRECT_URL]==“/edit-page/”){
//submitted new values that need to be used to update the original entry via $success = GFAPI::update_entry( $entry );
//var_dump($_POST);
//Get original entry id
parse_str($_SERVER[QUERY_STRING]); //will be stored in $entry
//get the actual entry we want to edit
$editentry = GFAPI::get_entry($entry);
//make changes to it from new values in $_POST, this shows only the first field update
$editentry[1]=$_POST[input_1];
//update it
$updateit = GFAPI::update_entry($editentry);
if ( is_wp_error( $updateit ) ) {
echo Error.;
} else {
//success, so redirect
header(Location: http://domain.com/confirmation/);
}
//dont process and create new entry
die();
} else {
//any other code you want in this hook for regular entry submit
}
}
view rawedit.php hosted with ❤ by GitHub

Windows 上通过 VMware 虚拟机安装 macOS 10.12 Sierra

这是一个安装视频,这是最新预览版本:10.12 Beta版(16A201w)。 2016年6月13日 发布。
本视频将教你你如何在 Windows 系统中通过 VMware 安装 Sierra。 MacOS 10.12 工作相当完美和Siri新功能。按照视频一步一步地安装。

安装视频:

下载链接:
谷歌硬盘 (1 part): https://goo.gl/HMpMgV
谷歌硬盘 (6 part): https://goo.gl/O35HlM
Fix Limit下载: https://goo.gl/JaHI0s

所有工具: https://goo.gl/UPLZC8
VMware Player: https://goo.gl/spT8G6
Winrar: http://goo.gl/PQHT

CentOS 配置防火墙操作实例(启、停、开、闭端口)

CentOS 配置防火墙操作实例(启、停、开、闭端口):

 

注:防火墙的基本操作命令:

查询防火墙状态:

[root@localhost ~]# service   iptables status<回车>

 

停止防火墙:

[root@localhost ~]# service   iptables stop <回车>

 

启动防火墙:

[root@localhost ~]# service   iptables start <回车>

 

重启防火墙:

[root@localhost ~]# service   iptables restart <回车>

 

永久关闭防火墙:

[root@localhost ~]# chkconfig   iptables off<回车>

 

永久关闭后启用:

[root@localhost ~]# chkconfig   iptables on<回车>

 

 

1、查看防火墙状态

[root@localhost ~]# service iptables status<回车>

2、编辑/etc/sysconfig/iptables文件。我们实例中要打开8080端口和9990端口

用编辑器打开/etc/sysconfig/iptables

3、依葫芦画瓢,我们添加8080端口和9990端口

4、保存/etc/sysconfig/iptables文件,并在终端执行

[root@localhost ~]# service iptables restart <回车>

5、从新查看防火墙状态

[root@localhost ~]# service iptables status<回车>

6、这时候,服务器的8080和9990端口就可以对外提供服务了。

7、其他端口的开放模式就是类似如此开放模式。

转载自:http://blog.csdn.net/jemlee2002/article/details/7042991

非插件方式将Lightbox特效整合到WordPress主题中

lightbox
实用又华丽的Lightbox特效其实可以轻松整合到WordPress主题中,本文将详细介绍这一方法。

一、下载Lightbox2的相关文件,以下是为整合到WordPress而修改好的版本。

下载完成后将lightbox文件夹上传到当前主题目录下

二、在header.php中加载相关文件

<link rel=”stylesheet” type=”text/css” href=”<?php bloginfo(‘template_url’) ?>/lightbox/lightbox.css” />
<script src=”<?php bloginfo(‘template_url’) ?>/lightbox/jquery-1.8.0.min.js”></script>
<script src=”<?php bloginfo(‘template_url’) ?>/lightbox/lightbox.js”></script>
<script type=”text/javascript”>Lightboxload(“<?php bloginfo(‘template_url’); ?>/”);</script>

代码注释:

1.第一行代码用于加载lightbox的CSS样式表,你可以将这些代码整合到主题的style.css文件中。

2.第二行代码用于加载jquery,如果你的主题已经有加载,可以去掉这一行。

3.第三行代码用于加载实现lightbox的js文件。

4.第四行代码用于设定lightbox.js文件执行的路径,不可删除。

三、在functions.php文件末尾加入以下代码

//lightbox 自动对图片链接添加rel=lightbox属性
add_filter(‘the_content’, ‘pirobox_gall_replace’);
function pirobox_gall_replace ($content)
{ global $post;
$pattern = “/<a(.*?)href=(‘|\”)([^>]*).(bmp|gif|jpeg|jpg|png)(‘|\”)(.*?)>(.*?)<\/a>/i”;
$replacement = ‘<a$1href=$2$3.$4$5 rel=”lightbox”$6>$7</a>’;
$content = preg_replace($pattern, $replacement, $content);
return $content;
}

正如代码中的注释一样,这段代码用于对文章中的图片链接,自动添加“rel=lightbox”的属性,以触发Lightbox特效。

文章转自:ilovetile

WordPress友情链接 wp_list_bookmarks 函数详解

wordpress-logo

今天有网友提出在主题底部设置友情链接,所以想起了这个函数,在网上查了查这个函数的用法,先记下来,看看情况如何去修改主题,也许是使用加侧边栏的方式!

wp_list_bookmarks 这个函数也是为Blogroll服务的,比以前的函数 get_links_list() 和 get_links() 更加强大,它有很多参数,参数和参数之前用”&”分隔。详见全文。

wp_list_bookmarks 函数的默认参数是:

‘orderby’ => ‘name’
‘order’ => ‘ASC’
‘limit’ => -1
‘category’ => ”
‘category_name’ => ”
‘hide_invisible’ => 1
‘show_updated’ => 0
‘echo’ => 1
‘categorize’ => 1
‘title_li’ => __(‘Bookmarks’)
‘title_before’ => ‘<h2>’
‘title_after’ => ‘</h2>’
‘category_orderby’ => ‘name’
‘category_order’ => ‘ASC’
‘class’ => ‘linkcat’
‘category_before’ => ‘<li id=”%id” class=”%class”>’
‘category_after’ => ‘</li>’

下面我来一一介绍每个参数的用途:

categorize

布尔型,用于设置连接是否按照各自的分类显示:
1 (默认,根据链接的分类显示)
0 (不按照分类,显示全部)

category

字符串型,后面就直接 “=链接分类ID号”,那么就显示这个分类下的链接。如果没有指定的话就显示所有的链接。

category_name

字符串型,如果后面 “=某个链接分类的名称” 那么就会在该链接分类前显示分类的名称,如果这里留空的话则会显示所有链接分类的分类名称(即默认的形式)。

category_before

字符串型,位于链接分类之前的文字或代码。默认的设置是:<li id=”[category id]” class=”linkcat”>

category_after

字符串型,位于链接分类之后的文字或代码。默认的设置是:</li>

class

字符串型,每一个链接的分类都会有一个 “class” 属性(从上面的代码就能看出),默认是:linkcat

category_orderby

字符串型,链接分类的排序方式,按照名词或者ID。
‘name’ (默认)
‘id’

category_order

字符串型,链接分类的升降序排列方式:
ASC (默认)
DESC

title_li

字符串型,链接标题的头文字或代码,默认是:Bookmarks,并且它控制连接是否按照列表的方式排列。

title_before 和 title_after

顾名思义,它们就是连接标题头前后的文字或代码,默认是 h2 标签

show_private

布尔型,是否显示私有链接。
1 (是)
0 (不是 – 默认)

include

字符串型,输出指定 ID 的 Blogroll 的分类链接,各个 ID 之间用半角的 “,” 分开。默认显示所有的 Blogroll 分类。

exclude

字符串型,将指定 ID 的 Blogroll 分类链接从整个链接列表中排除,各个 ID 之间用半角的 “,” 分开。默认是什么都不排除。

orderby

字符串型,Blogroll 的排列方式(默认是根据名称排序,除非将这个值留空),即根据我们在 WP 后台链接设置界面下的那些参数来进行排序:
1.’id’
2. ‘url’
3. ‘name’
4. ‘target’
5. ‘description’
6. ‘owner’
7. ‘rating’
8. ‘updated’
9. ‘rel’ – 按设定的关系排列
10. ‘notes’
11. ‘rss’
12. ‘length’ – 连接名称的长度设定
13. ‘rand’ – 随机排列显示

order

字符串型,设置升降序的排列方式
ASC (默认)
DESC

limit

整型,设置输出链接条数的最大值。默认值是”-1″,输出全部。

between

字符串型,每个连接、图片和描述之间的文字或代码,默认是 “n” 换行。

show_images

布尔型,是否允许显示 Blogroll 下链接的对应图片。
1 (允许 – 默认)
0 (不允许)

show_description

布尔型,是否允许显示每个链接的描述。
1 (允许)
0 (不允许 – 默认)

show_rating

布尔型,是否允许显示链接的等级。
1 (允许)
0 (不允许 – 默认)

show_updated

布尔型,是否允许显示最近更新后的时间戳。
1 (允许)
0 (不允许 – 默认)

hide_invisible

布尔型,是否显示所有的链接,甚至是被管理员设为不可见的链接,默认允许显示。
1 (允许 – 默认)
0 (不允许)

例如:

随机显示10条链接:

<?php wp_list_bookmarks(‘orderby=rand&limit=10’); ?>

随机显示分类ID为1的链接:

<?php wp_list_bookmarks(‘orderby=rand&category=1’); ?>

剩下的大家可以自己发挥了,呵呵。

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com)

解决 Gravatar 头像无法显示,使用多说头像

gravatar
前段时间 Gravatar 被墙了,导致网站访问速度也出现问题,Gravatar 头像无法显示,在网上找了一下找到解决的方法,这是由知名社交评论服务商多说提供的国内Gravatar服务,大家可以放心使用,且不用担心速度问题。

方法,任何一款主题,打开functions.php文件,将以下代码复制放到该文件最前,注意在第一个//多说官方Gravatar头像调用
function mytheme_get_avatar($avatar) {
$avatar = str_replace(array(“www.gravatar.com”,”0.gravatar.com”,”1.gravatar.com”,”2.gravatar.com”),”gravatar.duoshuo.com”,$avatar);
return $avatar;
}
add_filter( ‘get_avatar’, ‘mytheme_get_avatar’, 10, 3 );

注意修改 functions.php 有风险,如果你是新手,先备份一个 functions.php 然后在修改。

文章内容来自网上搜索,自己试过了,管用!

阿里云vps上mysql挂掉的解决办法

aliyun
用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知。之前没太追究,重新启动了mysql解决的。今天上午又收到短信,已经第三次了。

查了一下日志,三次基本都是一样的:
130728 6:50:14 [Note] Plugin 'FEDERATED' is disabled.
130728 6:50:14 InnoDB: The InnoDB memory heap is disabled
130728 6:50:14 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130728 6:50:14 InnoDB: Compressed tables use zlib 1.2.3.4
130728 6:50:14 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
130728 6:50:14 InnoDB: Completed initialization of buffer pool
130728 6:50:14 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130728 6:50:14 [ERROR] Plugin 'InnoDB' init function returned error.
130728 6:50:14 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130728 6:50:14 [ERROR] Unknown/unsupported storage engine: InnoDB
130728 6:50:14 [ERROR] Aborting
130728 6:50:14 [Note] /usr/sbin/mysqld: Shutdown complete

解决方法:

1) 在 /etc/mysql/my.cnf 的 mysqld 下增加下面一句:

innodb_buffer_pool_size = 64M

还要设置一下swap分区,因为我的vps是没有swap分区的,通过fdisk -l1mount 看不到swap的信息,需要手动添加一下。

2) 添加swap分区的步骤:
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile

添加这行: /swapfile swap swap defaults 0 0 到 /etc/fstab

目前已经设置了swap分区,并重启了mysql,后续观察一下看看还会不会出现吧。

参考文章

转载自:http://hongjiang.info/aliyun-vps-mysql-aborting/