Custom Shortcode Plugin OneSender Cloud

Plugin OneSender cloud menggunakan template editor untuk menampilkan shortcode. Tidak hardcoded.

Untuk menambahkan custom shortcode gunakan contoh kode berikut.

Contoh ini mengasumsikan data disimpan di meta order.

<?php
/**
 * Plugin Name: Custom shortcodes for OneSender cloud
 * Plugin URI:  https://example.local/dummy-plugin
 * Description: Custom shortcodes for OneSender cloud.
 * Version:     1.0.0
 * Author:      Dev
 */

/*
Simulasi penggunaan di plugin woocommerce
Data disimpan di order meta
Menggunakan meta key sebagai shortcode id

*/

/* Pastikan parent plugin running di awal */
add_action( 'init', function() {
    
    // STEP 1: Register shortcodes
    add_filter( 'ocl/modules/woocommerce/shortcode_structure', 'ocl_register_shortcodes' );


    // STEP 2: Isi data ke shortcodes
    add_filter( 'ocl/modules/woocommerce/shortcode_values', 'ocl_parse_shortcodes', 20, 2 );

} );

function ocl_register_shortcodes( $group ) {

    $shortcodes = [
			[
				'module' => 'woocommerce',
				'id'     => '_ocl_shortcode_1', // nama order meta
				'title'  => 'Shortcode 1'
			],
			[
				'module' => 'woocommerce',
				'id'     => '_ocl_shortcode_2', // nama order meta
				'title'  => 'Shortcode 2'
			],
			[
				'module' => 'woocommerce',
				'id'     => '_ocl_shortcode_3', // nama order meta
				'title'  => 'Shortcode 3'
			],

    ];

    $group[] = [
        'group' => 'custom_shortcode',
        'title' => 'Custom Shortcodes',
        'items' => $shortcodes
    ];

    return $group;
}

function ocl_parse_shortcodes( $shortcodes, $order ) {
    /* in case $order is null. Get order object */
    if (!$order) {
        $order = wc_get_order( $shortcodes['order_id'] );
    }
    
    /* isi data ke shortcodes */
    $shortcodes['_ocl_shortcode_1'] = $order?->get_meta( '_ocl_shortcode_1' );
    $shortcodes['_ocl_shortcode_2'] = $order?->get_meta( '_ocl_shortcode_2' );
    $shortcodes['_ocl_shortcode_3'] = $order?->get_meta( '_ocl_shortcode_3' );
    
    return $shortcodes;
}