Commerce discount promotions as a fieldtype? I'd like to create an entry in Craft that talks about a new discount, and then choose that discount via a field (so a bit like you can choose an entry or a product). That way, should the parameters of the discount change, I'm not having to manually update the information in the entry to match any changes to the discount details. Is there a plugin for this?
That field type doesn’t currently exist, but it wouldn’t be hard to create it.

Here’s the relevant code you’d need if you want to take a stab at it:

use Craft;
use craft\base\ElementInterface;
use craft\commerce\models\Discount;
use craft\commerce\Plugin as Commerce;

// ...

public function normalizeValue($value, ElementInterface $element = null)
{
    if ($value !== null) {
        return Commerce::getInstance()-&gt;discounts-&gt;getDiscountById($value);
    }

    return $value;
}

public function getInputHtml($value, ElementInterface $element = null): string
{
    $options = [];
    foreach (Commerce::getInstance()-&gt;discounts-&gt;getAllDiscounts() as $discount) {
        $options[] = ['value' =&gt; $discount-&gt;id, 'label' =&gt; $discount-&gt;name];
    }

    /** @var Discount|null $value */
    return Craft::$app-&gt;view-&gt;renderTemplate('_includes/forms/select', [
        'id' =&gt; $this-&gt;handle,
        'name' =&gt; $this-&gt;handle,
        'options' =&gt; $options,
        'value' =&gt; $value-&gt;id ?? null,
    ]);
}


With that, the field type’s value would always either be a Discount model or null, so in your templates you could do this:

{% if entry.myDiscountField %}
    Code: &lt;code&gt;{{ entry.myDiscountField.code }}&lt;/code&gt;
    ...
{% endif %}


Alternatively, you could pull this off with a simple Plain Text field that stores a discount code, and then fetch the discount manually from your template.

{% if entry.myDiscountCodeField %}
    {% set discount = craft.commerce.discounts.getDiscountByCode(entry.myDiscountCodeField) %}
{% else %}
    {% set discount = null %}
{% endif %}

{% if discount %}
    Code: &lt;code&gt;{{ discount.code }}&lt;/code&gt;
    ...
{% endif %}