WordPress插件开发:如何为各分类保存自定义URL设置
解决WordPress分类自定义URL的保存问题
嗨,我看了你的代码,目前没法保存每个分类的URL主要有两个核心问题:一是输入框的命名没法关联到具体分类,二是没有正确处理数组形式的选项存储。下面给你一步步修正方案:
问题分析
- 你现在用递增的数字
$urlcat作为输入框的name属性,提交后无法区分哪个URL属于哪个分类; get_option('url_cat')获取的是单个值,但我们需要存储以分类ID为键的数组,这样才能精准对应每个分类的自定义URL;- 缺少设置的注册和保存回调逻辑,WordPress没法知道要怎么处理这些提交的数据。
完整修改代码
// 注册设置和保存回调 add_action('admin_init', 'register_category_url_settings'); function register_category_url_settings() { // 注册名为url_cat的设置,指定保存时的回调 register_setting('plugin-settings-group', 'url_cat', 'sanitize_category_urls'); } // 清洗并整理提交的URL数据 function sanitize_category_urls($input) { $sanitized = array(); if (is_array($input)) { foreach ($input as $term_id => $url) { // 确保分类ID是整数,URL做基本清洗 $term_id = intval($term_id); $sanitized[$term_id] = esc_url_raw($url); } } return $sanitized; } // 添加设置字段 add_settings_field('name_categories','Categories','categories_cb','plugin-settings','plugin_label_settings'); function categories_cb() { // 获取保存的URL数组,默认空数组 $category_urls = get_option('url_cat', array()); ?> <table> <tr> <th align="center" bgcolor="#AEB5B4">分类名称</th> <th>自定义URL</th> </tr> <?php $categories = get_categories( array( 'orderby' => 'name', 'order' => 'ASC' ) ); foreach($categories as $category) { // 获取当前分类对应的URL,默认空字符串 $current_url = isset($category_urls[$category->term_id]) ? $category_urls[$category->term_id] : ''; echo "<tr>"; echo '<td align="center" bgcolor="#AEB5B4">'.$category->name.'</td>'; echo '<td><input type="text" name="url_cat['.$category->term_id.']" value="'.$current_url.'"></td>'; echo "</tr>"; } ?> </table> <?php }
关键修改点说明
- 输入框命名:把输入框的
name改成url_cat[{$category->term_id}],这样提交后会自动生成以分类ID为键的数组,完美对应每个分类; - 选项注册:用
register_setting注册url_cat选项,并指定清洗函数,确保存储的数据安全、格式正确; - 数据回显:从
get_option获取数组后,根据当前分类的term_id取出对应的值,实现编辑时的回显。
额外提醒
确保你的设置页面表单中包含以下代码,这样WordPress才能正确处理设置提交:
<form method="post" action="options.php"> <?php settings_fields('plugin-settings-group'); do_settings_sections('plugin-settings'); submit_button(); ?> </form>
这样修改后,你就能正常保存每个分类的自定义URL啦~
内容的提问来源于stack exchange,提问作者laurent47
相关产品推荐
相关产品推荐

