<!-- THEME DEBUG -->
<!-- THEME HOOK: 'field' -->
<!-- FILE NAME SUGGESTIONS:
   ▪️ field--node--title--article.html.twig
   ✅ field--node--title.html.twig
   ▪️ field--node--article.html.twig
   ▪️ field--title.html.twig
   ▪️ field--string.html.twig
   ▪️ field.html.twig
-->
<!-- BEGIN OUTPUT from 'themes/contrib/classy/templates/field/field--node--title.html.twig' -->
<span class=How to change a source property in a migration plugin ">

How to change a source property in a migration plugin

Sometimes during a migration, you need to do some processing on a field before migrating it. In this case you can write a source plugin. Here's how to do it for a node migration:

In your your_custom_module/src/Plugin/migrate/source/CustomPlugin.php file:

<?php

namespace Drupal\your_custom_module\Plugin\migrate\source;

use Drupal\node\Plugin\migrate\source\d7\Node;
use Drupal\migrate\Row;
use Drupal\user\Entity\User;

/**
 * Custom node source plugin.
 *
 * @MigrateSource(
 *   id = "custom_plugin",
 *   source_module = "node"
 * )
 */

class CustomNode extends Node {

  /**
   * {@inheritdoc}
   */
  public function prepareRow(Row $row) {

    // Grab field values from migration 
    $nid = $row->getSourceProperty('nid');
    $node_type = $row->getSourceProperty('type');

    // Query the old database
    $query = $this->select('some_table_in_old_db', 'sfot')
      ->fields('sfot', ['some_field_in_old_table'])
      ->condition('another_field_in_old_table', $nid)
      ->condition('entity_type', 'node')
      ->execute()
      ->fetchAll();

    // Do something with your data!
    $new_value = $query;
    // Set the property to use as source in the yaml.
    $row->setSourceProperty('new_source_field', $new_value);

    return parent::prepareRow($row);
  }
}

Then you can referece the plugin in your migration script:

langcode: en
status: true
dependencies: {  }
id: your_migration_id
class: Drupal\migrate\Plugin\Migration
migration_tags:
  - 'Drupal 7'
migration_group: nodes
label: 'Nodes (your node type)'
source:
  plugin: custom_plugin // This is what we defined above
  node_type: your_node_type
process:
  nid: nid
  langcode:
    plugin: default_value
    source: language
    default_value: und
  title:
    plugin: skip_on_empty // This is a useful plugin!
    method: row
    source: title
  body:
    plugin: sub_process
    source: body
    process:
      value: value
      summary: summary
      format:
        plugin: default_value
        default_value: full_html // We often need to set the text format!
  path/pathauto: 
    plugin: default_value
    default_value: 0 // If you're using an alias
  path/alias: alias
  status: status
  created: created
  changed: changed
  promote: promote
  sticky: sticky
  new_field: new_source_field
destination:
  plugin: 'entity:node'
  default_bundle: your_node_type
migration_dependencies: {}