Drupal - 以编程方式更改某些迁移术语的 url 别名


Drupal - changing url alias programmatically for some migrated terms

我正在尝试在Drupal中进行SQL查询,以编辑几个站点上的一些分类术语url_aliases。

  // Query to get aliases which contain event-category in alias.
  $aliases = db_select('url_alias', 'ua')
    ->fields('ua', array('alias'))
    ->condition('alias', '%event-category/%', 'LIKE')
    ->execute()
    ->fetchCol();
  foreach ($aliases as &$ua) {
    // Strip out event-category and replace with category
    $new_alias = str_replace("event-category/", "category/", $ua);
    // Update url_alias table
    $update_db = db_update('url_alias')
      ->fields(array('alias' => $new_alias))
      ->condition('alias', '%event-category/%', 'LIKE')
      ->execute();
  }

每次我运行此代码时,都会更改正确的术语别名,但它们都更改为第一个术语别名。例:

  • 事件类别/ABC123 =>类别/ABC123
  • 事件类别/def456 => 类别/ABC123
  • 事件类别/ghi789 => 类别/ABC123

据我所知,str_replace在 dpm 处理 $new_alias 变量时有效。

将更新查询条件更改为 ->condition('alias', '%'.$ua.'%', 'LIKE')