0

0

使用分类法来实现单选按钮

王林

王林

发布时间:2023-09-04 14:45:08

|

1027人浏览过

|

来源于php中文网

原创

使用分类法来实现单选按钮

WordPress 的自定义分类功能非常出色,允许您以各种分类法组织您的帖子,所有艰苦的工作都已为您完成。然而,它也可能有点限制。编辑帖子时,您的分类术语有自己的元框,它们显示为复选框列表(对于分层分类法)或标签云(对于非分层分类法)。这是你的两个选择。

当您想要确保每个帖子只能选择一个术语时,这可能会出现问题。当然,您可以挂钩 save_post 挂钩并删除任何“多余”术语,但这不是特别用户友好,并且肯定不会提供出色的用户界面。有时,以不同的方式呈现分类法在美学上会更合乎需要。本文将向您展示如何做到这一点,我们讨论的所有代码都应添加到主题中的 functions.php 文件中。我们将重点关注单选按钮,但您可以使用任何其他输入方法,例如下拉菜单。


第 1 步删除默认分类元框

WordPress 会自动生成分类元框,因此我们的首要任务是删除它,以便我们可以在其位置生成我们自己的分类元框。我假设我们的分类名称是“mytaxonomy”(如果您想更改 WordPress 标签或类别元框,则可以将其替换为“category”或“post_tag”)。

要删除元框,我们将使用 remove_meta_box,它应该从挂钩到 admin_menu 的函数内部调用。 remove_meta_box 接受三个参数。

  1. ID:这是赋予包含元框的 div 元素的 id 属性。通常,对于层次分类法,这将是“mytaxonomydiv”;对于非层次分类法,这将是“tagsdiv-mytaxonomy”。
  2. 帖子类型:元框显示的帖子类型(例如“帖子”或“页面”等)。如果您的元框针对多种不同的帖子类型出现,您将需要为每种类型调用remove_meta_box 函数。
  3. 上下文:正常、高级或侧面。
add_action( 'admin_menu', 'myprefix_remove_meta_box');
function myprefix_remove_meta_box(){
   remove_meta_box('mytaxonomydiv', 'post', 'normal');
}

第 2 步 添加您自己的 Metabox

在这里,我们使用一个函数来连接适当命名的 add_meta_boxes 钩子,该函数将添加我们的元框。为此,该函数将调用 add_meta_box ,它需要相当多的参数,其中包括:

  1. ID:与上面相同,给它任何唯一的东西。
  2. 标题:元框的标题。
  3. 回调:将生成元盒内部结构的函数的名称。
  4. 帖子类型:同上。同样,您需要为每种帖子类型单独调用此函数。
  5. 上下文:同上。
  6. 优先级:框应显示的上下文中的优先级。
 
//Add new taxonomy meta box
 add_action( 'add_meta_boxes', 'myprefix_add_meta_box');
 function myprefix_add_meta_box() {
     add_meta_box( 'mytaxonomy_id', 'My Radio Taxonomy','myprefix_mytaxonomy_metabox','post' ,'side','core');
 }

  function myprefix_mytaxonomy_metabox( $post ) {
     echo 'This is my taxonomy metabox';
  }

总的来说,上面的内容应该删除默认的元框并将其替换为您自己的元框,当前它除了显示消息“这是我的分类元框”之外什么也不做。下一步是更改回调函数以显示我们想要的内容。


步骤 3 生成单选按钮

我们希望元框的外观和行为尽可能类似于默认元框。深入研究 WordPress 核心文件,您会在这里找到元盒内部的生成位置。下面的自定义函数将模仿核心函数,但对术语的显示方式进行一些更改。

让我们一次详细地浏览一下我们的函数。第一个位设置一些变量。您只需要更改 $taxonomy 变量以匹配您的分类名称。另请注意 $name 变量。我们为输入字段指定名称 tax_input[mytaxonomy]。这是默认元框中输入的名称。通过这样做,WordPress 将自动处理帖子分类术语的更新。

//Set up the taxonomy object and get terms
$taxonomy = 'mytaxonomy';
$tax = get_taxonomy($taxonomy);//This is the taxonomy object

//The name of the form
$name = 'tax_input[' . $taxonomy . ']';

//Get all the terms for this taxonomy
$terms = get_terms($taxonomy,array('hide_empty' => 0));

我们需要帖子当前术语的 ID(我们期望只有一个)。

 
$postterms = get_the_terms( $post->ID,$taxonomy );
$current = ($postterms ? array_pop($postterms) : false);
$current = ($current ? $current->term_id : 0);

如果您查看 WordPress 的类别元框,您会注意到一个选项卡将显示“最常用”术语。为了重现这一点,我们需要 10 个最流行的术语。我们再次使用 get_terms 函数,但这次最多选择 10 个术语并按计数(具有此分类的帖子数)排序。

$popular = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );

接下来,我们要显示“所有类别”和“最常用”选项卡(最佳做法是尽可能使用分类标签)。如果您不需要制表符,您可以简单地删除此位:



接下来,我们要设置在“所有类别”选项卡上显示的内容:

永利在线企业网站管理系统(CMS)1.0 Build 20100612
永利在线企业网站管理系统(CMS)1.0 Build 20100612

修正说明:1,实现真正的软件开源。2,安装界面的美化3,真正实现栏目的递归无限极分类。4,后台添加幻灯片图片的管理,包括添加,修改,删除等。5,修正添加新闻的报错信息6,修正网站参数的logo上传问题7,修正产品图片的栏目无限极分类8,修正投票系统的只能单选问题9,添加生成静态页功能10,添加缓存功能特点和优势1. 基于B/S架构,通过本地电脑、局域网、互联网皆可使用,使得企业的管理与业务不受地域

下载

    term_id; echo "
  • "; }?>

这实际上只是在 div 元素内显示一个列表,每个列表元素都是一个单选选项。当然,您可以简单地用下拉菜单或您喜欢的任何其他内容替换此列表。

现在我们对“最常用”选项卡执行相同的操作:




第4步我们完整的回调函数

将其拼凑在一起,我们的完整功能是

//Callback to set up the metabox
function myprefix_mytaxonomy_metabox( $post ) {
    //Get taxonomy and terms
    $taxonomy = 'mytaxonomy';

    //Set up the taxonomy object and get terms
    $tax = get_taxonomy($taxonomy);
    $terms = get_terms($taxonomy,array('hide_empty' => 0));

    //Name of the form
    $name = 'tax_input[' . $taxonomy . ']';

    //Get current and popular terms
    $popular = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );
    $postterms = get_the_terms( $post->ID,$taxonomy );
    $current = ($postterms ? array_pop($postterms) : false);
    $current = ($current ? $current->term_id : 0);
    ?>

    
    term_id; echo "
  • "; }?>

第 5 步一点 JavaScript...

我在回调函数中对 ID 和单选按钮的命名非常谨慎。如果您现在尝试上述所有操作,您会发现 WordPress 会自动处理帖子术语的更新。此外,WordPress 的 javascript 自动处理选项卡导航。有一个轻微的问题。 “所有类别”单选按钮与“最常用的”单选按钮不同步。如果您决定放弃“最常用”选项卡,那么您可以忽略此部分。否则,我们只需要添加一点点 JavaScript 就可以解决这个问题。

我们想要向页面添加一些 javascript,因此在回调函数中,我们将使用一个钩子,当在管理中添加 javascript 时会触发该钩子。即 admin_enqueue_scripts 挂钩。由于我们将函数添加到回调函数内的此钩子上,因此仅在需要时才加载它。只需在上面的回调函数顶部添加这一行:

add_action('admin_enqueue_scripts','myprefix_radiotax_javascript');

当管理页面加载 JavaScript 时,这将触发我们的函数。这个函数只不过是注册我们的 javascript 并将其排入队列,我们​​希望将其加载到页脚中:

function myprefix_radiotax_javascript(){
	wp_register_script( 'radiotax', get_template_directory_uri() . '/js/radiotax.js', array('jquery'), null, true ); // We specify true here to tell WordPress this script needs to be loaded in the footer
	wp_enqueue_script( 'radiotax' );
}

现在对于我们实际需要的 javascript,在主题的 js 文件夹中创建一个文件。我们将其命名为 radiotax.js,下面是要放入其中的代码:

jQuery(document).ready(function($) {
	var taxonomy = 'mytaxonomy';
	$('#' + taxonomy + 'checklist li :radio, #' + taxonomy + 'checklist-pop :radio').live( 'click', function(){
		var t = $(this), c = t.is(':checked'), id = t.val();
		$('#' + taxonomy + 'checklist li :radio, #' + taxonomy + 'checklist-pop :radio').prop('checked',false);
		$('#in-' + taxonomy + '-' + id + ', #in-popular-' + taxonomy + '-' + id).prop( 'checked', c );
	});
});

那么这几行代码有什么作用呢?每当您选中一个单选按钮时,它都会取消选中所有其他单选按钮(在两个选项卡上),然后检查与该术语相对应的单选按钮。


结论

这样我们就完成了。 WordPress 为我们处理剩下的所有事情。不过还有改进的空间...添加新术语怎么样?我已经从我们的元框中省略了这一点,因为它实际上非常棘手。它将涉及更多的 JavaScript 以及服务器端的一些操作。


更新:

根据 Roberto 的要求,这里是 GitHub 上完整代码的链接。它是本教程中使用的代码的类实现,因此开始时您只需要更改顶部的类的静态变量。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

26

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号