怎么个添加法?

怎么个添加法?,第1张

WordPress添加MetaBox的方法

相信很多站长都知道并且已经在使用WordPress自定义字段,很多插件也在使用这个功能。

相信很多站长都知道并且已经在使用WordPress自定义字段,很多插件也使用了这一功能。

自定义字段是一个非常不错的功能,它能够让我们为文章添加各种自定义的属性,高度灵活, *** 作简单。比如可以为文件添加一个SEOMetaDescription的自定义字段,我们可以输入一段文字来概括文章内容,在前台显示的时候可以根据该字段来生成HTML的<meta>标签,使搜索引擎更加方便的了解页面的内容,帮助索引。

但是,由于它的高度灵活,导致了一些问题,尤其因为自定义字段的值的输入是一个文本框,导致在输入时会非常不便,例如,设计的是一个整形的字段,但是由于文本框没有验证和提示,导致可能会输入非整数,在前台使用时就会出现问题,甚至导致网站挂掉。或者字段的值是预定义的值集合中的一个(比如有个性别的字段,就只是男和女中的一个值),但是文本框是不会提示你可以输入哪些值。

总的来说,不方便之处是文本框的单一输入方式无法满足不同场景下不同字段类型的输入需求和验证需求。

那么,解决方案来了,使用自定义MetaBox来自定义编辑页面。

以添加一个自定义字段——【推荐指数】为例,来讲讲如何使用MetaBox。

备注:推荐指数,在本例中指的是文章作者对文章的打分,分数在1~10分,为整数。分数越高,越推荐。
先来看看最终的样子,我们可以通过下拉列表来选择值了。




首先,需要使用到addmetaboxesAction,该Action允许我们为任何文章类型注册MetaBox,在该Action中,我们需要使用add_meta_box()方法来添加MetaBox的相关信息。代码如下

PHPCode复制内容到剪贴板 函数add_rating_meta_box($post_type,$post){
  • //添加推荐索引元框需要哪些帖子类型?
  • $types=数组('post','page');
  • foreach($typesas$type){
  • 添加元框(
  • 'Rating_meta_box_id',//前台页面中元框的id,可以通过JS获取
  • '推荐索引',//显示的标题
  • 'Render_rating_meta_box',//回调方法,用于输出元框的HTML代码。
  • $type,//在哪个帖子类型页面上添加的?
  • 'Side',//显示此元框的位置
  • 默认'//优先级
  • );
  • }
  • }
  • add_action('add_meta_box','add_rating_meta_box');
  • 这里我们在$types数组中定义了Post和Page都需要推荐指数这个自定义字段,然后告诉WordPress使用“render_rating_meta_box”方法来渲染MetaBox,位置在侧边栏(side)。因为内容不多,所以侧边栏足够,若内容较多,可以将“side”改为“advanced”,这样就会在主内容区域渲染MetaBox。

    接下来看看是如何渲染的
    PHPCode复制内容到剪贴板 函数render_rating_meta_box($post){
  • //为后续安全检查添加nonce项。
  • WP_nonce_field('rating_nonce_action','rating_nonce_name');
  • //获取推荐索引的值
  • $rating_key='rating
  • $rating_value=get_post_meta($post->;ID,$rating_key,true);
  • $rating_value=(int)$rating_value;
  • $html='<selectname="rating_field">;';
  • for($I=0;$i<=10;$i++){
  • $selected=“”;
  • if($i==$rating_value){
  • $selected='selected="selected"';
  • }
  • $html。=sprintf('<;选项值="%s"%s>%s颗星 }
  • $html。='</select>;';
  • echo$html
  • }

  • 这里先使用wp_nonce_field()添加了一个noncefield,用来做安全检查,然后,读取推荐指数的值,循环1~10来输出可供选择的值,如果和推荐指数相同,则默认选上。通过下拉框,既可以解决输入不方便和无法验证的问题。记住这里下拉框的name属性的值(rating_field),将通过它在下面的代码中获取选择的值。

    最后,当文章被保存时,需要将推荐指数也保存起来
    PHPCode复制内容到剪贴板 函数save_rating_post_data($post_id){
  • //检查是否设置了nonce。
  • 如果(!isset($_POST['rating_nonce_name']){
  • 返回$post_id
  • }
  • $nonce=$_POST['rating_nonce_name'];
  • //验证nonce是否正确
  • 如果(!wp_verify_nonce($nonce,'rating_nonce_action'){
  • 返回$post_id
  • }
  • //如果是系统自动保存,就不会 *** 作。
  • if(已定义('DOING_autosave')&;&正在做_自动保存){
  • 返回$post_id
  • }
  • //检查用户权限
  • if($_POST['POST_type']='POST'){
  • 如果(!current_user_can('edit_post',$post_id)){
  • 返回$post_id
  • }
  • }
  • $rating_key='rating
  • //获取数据
  • $rating_value=$_POST['rating_field'];
  • //更新数据
  • update_post_meta($post_id,$rating_key,$rating_value);
  • }
  • add_action('save_post','save_rating_post_data');

  • 这里做了一系列检查,包括对刚刚设置的nonce检查,用户权限的检查,排除自动保存的情况。然后使用update_post_meta()方法将数据存入数据库。

    至此,我们就完成了对推荐指数自定义字段的改装,可以很方便的选择文章的推荐指数。

    等等。。。

    细心的朋友可能发现了,在应用了上面三段代码后,的确可以实现功能。但是,在默认的自定义栏目区域下,是可以看到,有一个名为“rating”的栏目,这就是我们刚刚选择的推荐指数。如果想让他不在自定义栏目下,显示,可以将上述代码中的$rating_key改为以下划线开头,这样,WordPress就不会显示出来了。注意有两个地方要改。

    PHPCode复制内容到剪贴板 //原始代码
  • $rating_key='rating
  • //更改后的代码
  • $rating_key='_rating
  • 欢迎分享,转载请注明来源:内存溢出

    原文地址: https://outofmemory.cn/zz/773979.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存