标签 自定义字段 下的所有文章

WordPress无插件开发文章Tag的排序功能,为分类、标签等后台管理添加快速编辑功能

之前有介绍过如何自定义WordPress文章列表的快速编辑“Quick Edit”栏(链接:WordPress后台开发,无插件添加列表页快速编辑(Quick Edit)自定义字段),今天我再来介绍一下如何在分类列表中也实现自定义的快速编辑功能。

这次我要开发一套可以给博客的标签做自定义排序的功能,你当然可以用插件Custom Taxonomy Order快速实现这个功能,但是本着深入研究WordPress的目的以及尽可能少用插件的开发原则,让我们尝试自己把他开发出来吧。

Tag其实就是WordPress的一种分类形式,它和文章的分类“Category”没有本质区别,实现了Tag的排序,你只要稍加修改,也可以应用到任何其他的分类形式中去。

实现这个排序功能,主要分以下几步:
1. 为Tag这个分类法新增一个记录排序序号的字段sort_idx,能够在后台保存修改它;
2. 在后台的Tag列表里增加一列sort_idx的显示,并且能让它参与自动排序,方便用户管理;
3. 在后台的Tag列表里增加sort_idx的Quick Editor字段,进一步方便用户管理。
4. 在后台的Post列表里,增加Tag的筛选项,再进一步方便用户管理
1-3体现在界面就是如图这样:
WordPress无插件开发文章Tag的排序功能,为分类、标签等后台管理添加快速编辑功能
查看详细 »

给WooCommerce变量产品添加属于变量的自定义字段

WooCommerce二次开发中,我们经常需要根据业务需要,给产品添加自定义字段,这在我很久以前的一篇博客中详细介绍过。不过那篇文章中我们添加的是产品本身的自定义字段,对于可变产品(Variable Product),如果需要为其每个变量(很多人喜欢称作SKU)各自添加自定义字段,以下这篇文章能教你如何实现。

给WooCommerce变量产品添加属于变量的自定义字段

如上图,这是一个可变产品下的一个变量,我为其添加了一个名为“New Custom Meta”的字段。同时这个字段框会出现在这个产品的所有变量下供店主编辑。WooCommerce默认已经为可变产品提供了价格、尺寸、重量、库存、描述等一系列字段,但它仍然无法满足所有要求,比如我的每个SKU都会有不同的材质、保质期等等,我就需要添加新的字段去描述它们。 查看详细 »

WordPress后台开发,无插件添加列表页快速编辑(Quick Edit)自定义字段

这次的文章标题有点拗口,其实用一张图概括就是这样的:
WordPress无插件添加列表页快速编辑(Quick Edit)自定义字段

在文章列表页,点击“快速编辑”,展开的选项栏叫做快速编辑栏。我们可以把一些经常要修改的文章字段放到快速编辑栏里,这样就可以在列表页直接修改这些字段,而不用进入下级的文章页了,可以从而节约时间。 查看详细 »

WordPress后台开发,无插件增加一键复制文章页面功能

这次要实现的功能是在WordPress后台的文章列表中,添加一键复制文章的按钮。完整地复制一篇文章,除了要复制文章内容外,还要复制文章所有的分类信息和关联字段,这是复制功能的核心。另外要实现这个功能还要带上一些后台的交互,为了避免不小心点到这个按钮徒增不必要的数据,还需要做个二次确认框,效果是这样的。
WordPress后台开发,无插件增加一键复制文章页面功能

先要通过post_row_actions钩子增加一个”Duplicate”按钮(其实是个链接)

1
2
3
4
5
6
7
function brain1981_duplicate_post_link( $actions, $post ) {
	if (current_user_can('edit_posts')) {
		$actions['duplicate'] = '<a href="###" data-url="'. wp_nonce_url('admin.php?action=brain1981_duplicate_post&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate it" rel="permalink" class="duplicate-trigger">Duplicate</a>';
	}
	return $actions;
}
add_filter('post_row_actions', 'brain1981_duplicate_post_link', 30, 2 );

查看详细 »

WooCommerce产品页面中添加用户自定义字段(product add-on),并使其影响价格

给WooCommerce产品页面添加自定义字段,并使其影响价格,在很多电商的场景中会需要这个功能。注意这里强调的是用户自定义字段,而非我之前写的 博客 介绍的产品自定义字段,两者不是一个东西。
举几个例子:

  • 卖T-Shirt的网站开通自定义产品的业务,比如让用户在产品页面输入希望印在T-Shirt上的文字。由于输入的文字是随机的,不可能预先设定好产品变量满足需求,只能在产品页面上添加让用户可以自己填写的字段。用户输入文字,即代表产品有定制部分,价格会在基础款式的基础上增加一些。
  • 刻字服务,提供一个字段让用户输入姓名,根据姓名的字数生成新的价格。
  • 蛋糕定制,允许用户填写自己的祝福语在蛋糕上,根据祝福语的长度生成新的价格。
  • 单个产品添加注释字段。我之前写过给订单增加额外注释字段的文章,但如果用户需要对订单内每个产品写需求注释,则用这个功能会更好。
  • 其他,诸如贺卡定制、各种礼物、工艺品、日用品定制等等,都可能需要这个功能…

WooCommerce产品用户自定义字段,英文翻译叫做“WooCommerce product add-on”,在产品页面上可以这样表现:
WooCommerce产品用户自定义字段
我们可以同时添加多个字段,也可以用select、radio、checkbox,datepicker,甚至是file uploader做自定义字段。

要实现这个功能,市面上已经有不少插件了,在官方插件市场上搜一下“WooCommerce product add-on”关键词,就能找到不少同类插件。我测试过过几款,发现功能都差不多,它们也都有免费版和收费版两个版本。一般来说,这类插件的免费版提供各种常规类型的自定义字段,收费版则提供一些特殊类型的自定义字段。另外如果你需要通过这些字段影响商品价格,这个功能我没有在免费版里见过,都需要购买付费版实现。付费版价格在39 – 69美元之间,看上去并不贵。但我的原则仍然是能不用插件就不用,需要用户自定义字段的场景,实际上字段都不多,这个功能不复杂,完全可以自己写出来。 查看详细 »

WordPress文章字段查询meta_query各种高级用法列举

WordPress meta_query 高级用法

WordPress在get_posts或WP_Query方法中,活用meta_query,可以变换出无数种高级检索,是WordPress的入门技能。

最简单的用法,查询自定义字段“post_color”值为“red”的文章

$arr = array(
	'post_type', => 'post',
	'meta_key' => 'post_color',
	'meta_value' => 'red'
);
$myPosts = new WP_Query( $arr );

引入meta_compare参数,查询自定义字段“post_color”值不为“red”的文章

$arr = array(
	'post_type', => 'post',
	'meta_key' => 'post_color',
	'meta_value' => 'red',
	'meta_compare' => '!='
);
$myPosts = new WP_Query( $arr );

推荐写法

下面开始进阶用法,首先要换一种写法,把所有自定义字段相关的参数都打包到meta_query参数中,效果和上面一段一样:

$arr = array(
	'post_type', => 'post',
	'meta_query'=> array(
		'key' => 'post_color',
		'value' => 'red',
		'compare' => '!='
	)
);
$myPosts = new WP_Query( $arr );

查看详细 »

WordPress不用插件实现多张特色图片/缩略图Featured Images

WordPress的文章、页面或者自定义文章类型开启特色图片,通过注册这个类型时,在support中添加参数“thumbnail”实现,比如:

register_post_type('My CPT', array(
	'label' => 'my_cpt',
	'description' => '',
	'public' => true,
	'show_ui' => true,
	'show_in_menu' => true,
	'capability_type' => 'post',
	'hierarchical' => false,
	'rewrite' => array('slug' => 'product'),
	'query_var' => true,
	'supports' => array('title','editor','thumbnail') //这里有了thumbnail就能为my_cpt这个类型添加缩略图
	)
);

这个缩略图有没有可能变成多张呢?比如这样:

查了老半天,WordPress本身并没有提供多张特色图片的API,但这个功能完全可以通过自定义字段实现。本文即是这个原理 查看详细 »

给WooCommerce的订单页面添加自定义字段,并输出到管理员通知邮件中

给WooCommerce的订单页面添加自定义字段其实这也算是一个常见需求,有些人喜欢一碰到这类需求就找插件实现,其实大可不必。在WordPress里面找对钩子,添加对应的代码段就行了。

今天刚完成一个小需求如下:在WooCommerce的Checkout页面增加一个了解用户渠道的下拉字段,并且如果选了”Others”选项,会再多出现一个文本字段。下拉字段为必填,多出的文本字段为可选,效果如图:

查看详细 »

WordPress一次列出当前文章/页面的所有自定义字段

WordPress中最重要的活用就是自定义字段,它几乎涉及到了一切现有的业务模块,无论你是电商网站还是用户社区,自定义字段无处不在。有时候我们需要在别人现成的代码或主题里面挖一些资料,进行再开发。那么就需要知道特定的页面上究竟可以有哪些字段资源可用。

还是用我们熟悉的get_post_meta命令,但是这次只给一个参数,就能调出所有的自定义字段了:

1
2
3
4
$myvals = get_post_meta($post_id);
foreach($myvals as $key=>$val){
    echo $key . ' : ' . $val[0] . '<br/>';
}

就是这么简单!

———————
2023年10月更新:

在评论区有朋友留言反映用以下一行代码列出字段更为简单:

1
the_meta();

这个方法在single页面的主循环中使用确实很简单有效,但它目前已经被官方文档标为弃用了,官方也是推荐一律使用get_post_meta方法调用自定义字段:
https://developer.wordpress.org/reference/functions/the_meta/

另外,经过对比the_meta方法输出的字段会过滤掉开头为下横杠”_”的字段名称,这类字段通常都是WordPress和WooCommerce等插件的保留字段,比如WooCommerce的这几个自己开发排序必用的字段:
_price – 价格
_wc_average_rating – 平均分
_wc_review_count – 评论数
都不在the_meta方法输出项内,所以建议还是不要用它了。

WordPress自定义字段的几个钩子以及相关用法

在WordPress中如果要更新某个自定义字段,只需要用到函数update_post_meta()就可以了。在执行update_post_meta的时候,WP会查找到你要更新的字段,如果没有符合条件的字段,WP会用add_post_meta添加新的字段,不用人工写判断,很方便。
使用add_post_meta添加新字段时,如果添加了参数$unique为true,WP会查找有没有相同键名(meta_key)的字段,如果有,则不会添加任何东西。
删除自定义字段delete_post_meter也不需要预先判断有无字段,如果没有该字段,delete_post_meter会返回false值。
相关文档:
https://codex.wordpress.org/Function_Reference/add_post_meta
https://codex.wordpress.org/Function_Reference/update_post_meta
https://codex.wordpress.org/Function_Reference/delete_post_meta
查看详细 »