Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
woocommerce
/
src
/
Internal
/
EmailEditor
/
WCTransactionalEmails
:
WCTransactionalEmailPostsManager.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php declare( strict_types=1 ); namespace Automattic\WooCommerce\Internal\EmailEditor\WCTransactionalEmails; /** * Class responsible for managing WooCommerce email editor post templates. */ class WCTransactionalEmailPostsManager { const WC_OPTION_NAME = 'woocommerce_email_templates_%_post_id'; /** * Singleton instance of the class. * * @var WCTransactionalEmailPostsManager|null */ private static $instance = null; /** * Gets the singleton instance of the class. * * @return WCTransactionalEmailPostsManager Instance of the class. */ public static function get_instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Retrieves the email post by its type. * * Type here refers to the email type, e.g. 'customer_new_account' from the WC_Email->id property. * * @param string $email_type The type of email to retrieve. * @return \WP_Post|null The email post if found, null otherwise. */ public function get_email_post( $email_type ) { $post_id = $this->get_email_template_post_id( $email_type ); if ( ! $post_id ) { return null; } $post = get_post( $post_id ); if ( ! $post instanceof \WP_Post ) { return null; } return $post; } /** * Retrieves the WooCommerce email type from the options table when post ID is provided. * * @param int|string $post_id The post ID. * @return string|null The WooCommerce email type if found, null otherwise. */ public function get_email_type_from_post_id( $post_id ) { // Early return if post_id is invalid. if ( empty( $post_id ) ) { return null; } global $wpdb; $option_name = $wpdb->get_var( $wpdb->prepare( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s AND option_value = %s LIMIT 1", self::WC_OPTION_NAME, $post_id ) ); if ( empty( $option_name ) ) { return null; } return $this->get_email_type_from_option_name( $option_name ); } /** * Checks if an email template exists for the given type. * * Type here refers to the email type, e.g. 'customer_new_account' from the WC_Email->id property. * * @param string $email_type The type of email to check. * @return bool True if the template exists, false otherwise. */ public function template_exists( $email_type ) { return null !== $this->get_email_post( $email_type ); } /** * Saves the post ID for a specific email template type. * * @param string $email_type The type of email template e.g. 'customer_new_account' from the WC_Email->id property. * @param int $post_id The post ID to save. */ public function save_email_template_post_id( $email_type, $post_id ) { $option_name = $this->get_option_name( $email_type ); update_option( $option_name, $post_id ); } /** * Gets the post ID for a specific email template type. * * @param string $email_type The type of email template e.g. 'customer_new_account' from the WC_Email->id property. * @return int|false The post ID if found, false otherwise. */ public function get_email_template_post_id( $email_type ) { $option_name = $this->get_option_name( $email_type ); return get_option( $option_name ); } /** * Deletes the post ID for a specific email template type. * * @param string $email_type The type of email template e.g. 'customer_new_account' from the WC_Email->id property. */ public function delete_email_template( $email_type ) { $option_name = $this->get_option_name( $email_type ); if ( ! get_option( $option_name ) ) { return; } delete_option( $option_name ); } /** * Gets the option name for a specific email type. * * @param string $email_type The type of email template e.g. 'customer_new_account' from the WC_Email->id property. * @return string The option name e.g. 'woocommerce_email_templates_customer_new_account_post_id' */ private function get_option_name( $email_type ) { return str_replace( '%', $email_type, self::WC_OPTION_NAME ); } /** * Gets the email type from the option name. * * @param string $option_name The option name e.g. 'woocommerce_email_templates_customer_new_account_post_id'. * @return string The email type e.g. 'customer_new_account' */ private function get_email_type_from_option_name( $option_name ) { return str_replace( array( 'woocommerce_email_templates_', '_post_id', ), '', $option_name ); } /** * Gets the email type class name from the template name. * * @param string $email_template_name The template name of the email type. * @return string The email type class name. */ public function get_email_type_class_name_from_template_name( $email_template_name ) { return 'WC_Email_' . implode( '_', array_map( 'ucfirst', explode( '_', $email_template_name ) ) ); } }