色々とテストなどを行ってinclude_onceが問題なのかもとおもいつつ直接の原因は
utils_admin.phpの292行目あたりの
$CATEGORY_ID[$i] = "$cat|".implode(',', array_filter(explode(',', $ids)));この赤字の$cat部分。
ここでカテゴリ名だけで書き換えて保存しちゃっているのでアウトでした。
$CATEGORY_ID[$i] = "$_cat|".implode(',', array_filter(explode(',', $ids)));正しくは$_catで引っ張ってきている元の形で書き込めばいいのです。(直後のロジックでもそうなってる)
やってることはわかるのですが変数名をアンダースコアを多用して混乱を招きやすい変数名で子チョコちょやってるとよくある罠ですね(笑)
しかしinclude_onceの弊害がはっきり出ていないのでコードを修正したままにするかどうか悩みどころですが今回書き換えた部分は
utils_admin.php 277行目あたりのところと
if($mode=='update' || is_numeric($ontime)){ # 編集後同じくutils_admin.php最後のファンクション定義の949行あたり
//////
//include_once ($cat_id); // get::$CATEGORY_ID
include($cat_id); // get::$CATEGORY_ID
//////
$index = get_article_index($id, $orgLINES);
list(,$cat,) = explode('|', $orgLINES[$index], 3);
if($cat != $category){ // カテゴリーの変更あり
foreach ($CATEGORY_ID as $i => $catid){
list($_cat, $ids) = explode('|', $catid);
list($__cat,) = explode("\t", $_cat);
if(strpos($catid, $org_id)){
$ids = str_replace($org_id, '', $ids);
//////
//$CATEGORY_ID[$i] = "$cat|".implode(',', array_filter(explode(',', $ids)));
$CATEGORY_ID[$i] = "$_cat|".implode(',', array_filter(explode(',', $ids)));
//////
}
if($__cat == $category){
$_ids = array_filter(explode(',', $ids)); array_push($_ids, $_id);
$CATEGORY_ID[$i] = "$_cat|".implode(',', $_ids);
}
function make_category_id(){これでとりあえず記事更新時にカテゴリを変更しても対応できるようになりました。
global $CATEGORY_LIST;
$ini = OD.'category_id.ini.php';
rewrite_ini($ini, '', '$CATEGORY_ID');
$CATEGORY_ID = array();
//////
//include_once (OD.'category.ini.php');
include(OD.'category.ini.php');
//////
foreach ($CATEGORY_LIST as $i => $line){
list($_cat,) = explode('|', $line, 2);
list($__cat, $catlink) = explode("\t", $_cat);
$_articles = get_articles_by_category($__cat);
$CATEGORY_ID[$i] = array();
foreach ($_articles as $a){
list($id,) = explode('|', $a, 2);
$CATEGORY_ID[$i][] = $id;
}
$CATEGORY_ID[$i] = "$__cat\t$catlink".'|'.implode(",", $CATEGORY_ID[$i]);
} #foreach
rewrite_ini($ini, $CATEGORY_ID);
}
残る部分としてはカテゴリ名を変更したときにcategory_id.ini.phpが更新されていないので内部的な不一致が起きているところでしょうか。ま、これも一旦category_id.ini.phpを削除して記事更新を行えば正しくなるので気になるまで放置しておきます。