You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress插件开发:如何为各分类保存自定义URL设置

解决WordPress分类自定义URL的保存问题

嗨,我看了你的代码,目前没法保存每个分类的URL主要有两个核心问题:一是输入框的命名没法关联到具体分类,二是没有正确处理数组形式的选项存储。下面给你一步步修正方案:

问题分析

  1. 你现在用递增的数字$urlcat作为输入框的name属性,提交后无法区分哪个URL属于哪个分类;
  2. get_option('url_cat')获取的是单个值,但我们需要存储以分类ID为键的数组,这样才能精准对应每个分类的自定义URL;
  3. 缺少设置的注册和保存回调逻辑,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:55