مشکل با کد های رندوم

shahin0918

تازه وارد
سلام دوستان

من یه سایت تخفیف گروهی راه اندازی کردم 

همانطور که مطلع هستید سایت های تخفیف گروهی نیازمند نعدادی تامین کننده می باشد که کالا یا خدمات خود را در سایت قرار دهند . برای همین من افزونه wc Vendor را نصب کردم.

در سایت های تخفیف گروهی برای مشتری بعد از انتخاب محصول یا خدمات مورد نیاز خود و پرداخت وجه آن یک کد توسط ایمیل و پیامک و فاکتور چاپی ارسال می گردد. برای ارسال پیامک من افزونه پیشرفته پیامک فارسی ووکامرس و برای فاکتور چاپی از افزونه Woocommerce print invoice & delivery note  استفاده کردم

چون خود ووکامرس کد ها را به صورت مرتب و پشت سر هم ارائه می کنه و من نیتز به کدهای رندوم داشتم از افزونه WooCommerce Sequential Order Numbers Pro  استفاده کردم . 

اما مشکلات :

کدهای رندوم تولید شده ( به جای شماره سفارش )  هنگام ارسال پیامک و در پنل فروشنده وارد نمی شود و به صورت قبل یعنی همان کدهای منطم و پشت سر هم ارسال می گردد.

ممنون می شم اگه راهنمایی کنید که چجوری می شه در ییامک و پنل فروشنده هم از همان کدهای تولید شده رندوم بشه استفاده کرد

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
سلام

توی پیامک از order->id برای شماره سفارش استفاده شده . کد رندم اگه کد یا متغیر خاصی داره داخل فایل requirement.php جایگزین کنید .

 

shahin0918

تازه وارد
سلام

توی پیامک از order->id برای شماره سفارش استفاده شده . کد رندم اگه کد یا متغیر خاصی داره داخل فایل requirement.php جایگزین کنید .
با تشکر از توجه و پاسخ شما 

توی requirement.php  عبارت order->id وجود ندارد . 

ممنون میشم بیشتر توضیح دهید

 

shahin0918

تازه وارد
با تشکر از توجه و پاسخ شما 

توی requirement.php  عبارت order->id وجود ندارد . 

ممنون میشم بیشتر توضیح دهید
<?php
class WoocommerceIR_Settings_Fields_SMS {
 
    private $settings_sections = array();
    private $settings_fields = array();
    private static $_instance;
    public function __construct() {
        add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
    }
 
    function admin_enqueue_scripts() {
        wp_enqueue_style( 'wp-color-picker' );
        wp_enqueue_media();
        wp_enqueue_script( 'wp-color-picker' );
        wp_enqueue_script( 'jquery' );
    }
 
    function set_sections( $sections ) {
        $this->settings_sections = $sections;
        return $this;
    }
 
    function add_section( $section ) {
        $this->settings_sections[] = $section;
        return $this;
    }
 
    function set_fields( $fields ) {
        $this->settings_fields = $fields;
        return $this;
    }
 
    function add_field( $section, $field ) {
        $defaults = array(
            'name' => '',
            'label' => '',
            'desc' => '',
            'type' => 'text'
        );
        $arg = wp_parse_args( $field, $defaults );
        $this->settings_fields[$section][] = $arg;
        return $this;
    }
 
    function admin_init() {
        foreach ( $this->settings_sections as $section ) {
            if ( false == get_option( $section['id'] ) ) {
                add_option( $section['id'] );
            }
            if ( isset($section['desc']) && !empty($section['desc']) ) {
                $section['desc'] = '<div class="inside">'.$section['desc'].'</div>';
                $callback = create_function('', 'echo "'.str_replace('"', '\"', $section['desc']).'";');
            } else {
                $callback = '__return_false';
            }
            add_settings_section( $section['id'], $section['title'], $callback, $section['id'] );
        }
 
        foreach ( $this->settings_fields as $section => $field ) {
            foreach ( $field as $option ) {
                $type = isset( $option['type'] ) ? $option['type'] : 'text';
                $args = array(
                    'id' => $option['name'],
                    'desc' => isset( $option['desc'] ) ? $option['desc'] : '',
                    'name' => $option['label'],
                    'section' => $section,
                    'size' => isset( $option['size'] ) ? $option['size'] : null,
                    'options' => isset( $option['options'] ) ? $option['options'] : '',
                    'std' => isset( $option['default'] ) ? $option['default'] : '',
                    'sanitize_callback' => isset( $option['sanitize_callback'] ) ? $option['sanitize_callback'] : '',
                );
                add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], array( $this, 'callback_' . $type ), $section, $section, $args );
            }
        }
 
        foreach ( $this->settings_sections as $section ) {
            register_setting( $section['id'], $section['id'], array( $this, 'sanitize_options' ) );
        }
    }
 
    function callback_text( $args ) {
        $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
        $html = sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
        $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
        echo $html;
    }
 
    function callback_checkbox( $args ) {
        $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $html = sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" />', $args['section'], $args['id'] );
        $html .= sprintf( '<input type="checkbox" class="checkbox" id="wpuf-%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s />', $args['section'], $args['id'], $value, checked( $value, 'on', false ) );
        $html .= sprintf( '<label for="wpuf-%1$s[%2$s]"> %3$s</label>', $args['section'], $args['id'], $args['desc'] );
        echo $html;
    }
 
    function callback_multicheck( $args ) {
        $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
        $html = '';
        foreach ( $args['options'] as $key => $label ) {
            $checked = isset( $value[$key] ) ? $value[$key] : '0';
            $html .= sprintf( '<input type="checkbox" class="checkbox" id="wpuf-%1$s[%2$s][%3$s]" name="%1$s[%2$s][%3$s]" value="%3$s"%4$s />', $args['section'], $args['id'], $key, checked( $checked, $key, false ) );
            $html .= sprintf( '<label for="wpuf-%1$s[%2$s][%4$s]"> %3$s</label><br>', $args['section'], $args['id'], $label, $key );
        }
        $html .= sprintf( '<span class="description"> %s</label>', $args['desc'] );
        echo $html;
    }
 
    function callback_radio( $args ) {
        $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
        $html = '';
        foreach ( $args['options'] as $key => $label ) {
            $html .= sprintf( '<input type="radio" class="radio" id="wpuf-%1$s[%2$s][%3$s]" name="%1$s[%2$s]" value="%3$s"%4$s />', $args['section'], $args['id'], $key, checked( $value, $key, false ) );
            $html .= sprintf( '<label for="wpuf-%1$s[%2$s][%4$s]"> %3$s</label><br>', $args['section'], $args['id'], $label, $key );
        }
        $html .= sprintf( '<span class="description"> %s</label>', $args['desc'] );
        echo $html;
    }
 
    function callback_select( $args ) {
        $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'wc-enhanced-select regular';
        $html = sprintf( '<div style="max-width:350px"><select class="%1$s" name="%2$s[%3$s]" id="%2$s[%3$s]">', $size, $args['section'], $args['id'] );
        foreach ( $args['options'] as $key => $label ) {
            $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $value, $key, false ), $label );
        }
        $html .= sprintf( '</select></div>' );
        $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
        echo $html;
    }
 
    function callback_textarea( $args ) {
        $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
        $html = sprintf( '<textarea rows="5" cols="55" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]">%4$s</textarea>', $size, $args['section'], $args['id'], $value );
        $html .= sprintf( '<br><span class="description"> %s</span>', $args['desc'] );
        echo $html;
    }
 
    function callback_html( $args ) {
        echo sprintf( '<span class="description"> %s</span>', $args['desc'] );
    }
 
    function callback_wysiwyg( $args ) {
        $value = $this->get_option( $args['id'], $args['section'], $args['std'] );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : '500px';
        echo '<div style="width: ' . $size . ';">';
        wp_editor( $value, $args['section'] . '-' . $args['id'] . '', array( 'teeny' => true, 'textarea_name' => $args['section'] . '[' . $args['id'] . ']', 'textarea_rows' => 10 ) );
        echo '</div>';
        echo sprintf( '<br><span class="description"> %s</span>', $args['desc'] );
    }
 
    function callback_file( $args ) {
        $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
        $id = $args['section']  . '[' . $args['id'] . ']';
        $html  = sprintf( '<input type="text" class="%1$s-text ps-sms-url" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
        $html .= '<input type="button" class="button ps-sms-browse" value="'.__( 'Browse' ).'" />';
        $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
        echo $html;
    }
 
    function callback_password( $args ) {
        $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
        $html = sprintf( '<input type="password" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
        $html .= sprintf( '<span class="description"> %s</span>', $args['desc'] );
        echo $html;
    }
 
    function callback_color( $args ) {
        $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
        $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
        $html = sprintf( '<input type="text" class="%1$s-text wp-color-picker-field" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" data-default-color="%5$s" />', $size, $args['section'], $args['id'], $value, $args['std'] );
        $html .= sprintf( '<span class="description" style="display:block;"> %s</span>', $args['desc'] );
        echo $html;
    }
 
    function sanitize_options( $options ) {
        foreach( $options as $option_slug => $option_value ) {
            $sanitize_callback = $this->get_sanitize_callback( $option_slug );
            if ( $sanitize_callback ) {
                $options[ $option_slug ] = call_user_func( $sanitize_callback, $option_value );
                continue;
            }
        }
        return $options;
    }
 
    function get_sanitize_callback( $slug = '' ) {
        if ( empty( $slug ) ) {
            return false;
        }
        foreach( $this->settings_fields as $section => $options ) {
            foreach ( $options as $option ) {
                if ( $option['name'] != $slug ) {
                    continue;
                }
                return isset( $option['sanitize_callback'] ) && is_callable( $option['sanitize_callback'] ) ? $option['sanitize_callback'] : false;
            }
        }
        return false;
    }
 
    function get_option( $option, $section, $default = '' ) {
        $options = get_option( $section );
        if ( isset( $options[$option] ) ) {
            return $options[$option];
        }
        return $default;
    }
 
    function show_navigation() {
        $html = '<h2 class="nav-tab-wrapper">';
        foreach ( $this->settings_sections as $tab ) {
            $html .= sprintf( '<a href="#%1$s" class="nav-tab" id="%1$s-tab">%2$s</a>', $tab['id'], $tab['title'] );
        }
        $html .= '</h2>';
        echo $html;
    }
 
    function show_forms() {
if ( defined( 'WC_VERSION' ) )  {
wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION );
wp_enqueue_script( 'wc-enhanced-select' );
}
if( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] == 'true' ) {
?>
<div class="updated">
<p>تنظمیات ذخیره شدند .</p>
</div>
<?php
}
?>
<style>
table.form-table th {
padding-left: 24px !important;
position: relative;
}
</style>
        <div class="metabox-holder">
<?php foreach ( $this->settings_sections as $form ) { ?>
<div id="<?php echo $form['id']; ?>" class="group">
<form method="post" action="options.php">
<?php do_action( 'ps_woo_sms_form_top_' . $form['id'], $form ); ?>
<?php settings_fields( $form['id'] ); ?>
<?php do_settings_sections( $form['id'] ); ?>
<?php do_action( 'ps_woo_sms_form_bottom_' . $form['id'], $form ); ?>
<div style="padding-right: 10px">
<?php do_action( 'ps_woo_sms_form_submit_' . $form['id'], $form ); ?>
 
</div>
</form>
</div>
<?php } ?>
</div>
        <?php
        $this->script();
    }
 
    function script() {
        ?>
        <script>
            jQuery(document).ready(function($) {
                $('.wp-color-picker-field').wpColorPicker();
                $('.group').hide();
<?php if ( isset( $_GET['send'] ) && $_GET['send']=='true' ) { ?>
                    $('.group:last').fadeIn();
                $('.group .collapsed').each(function(){
                    $(this).find('input:checked').parent().parent().parent().nextAll().each(
                    function(){
                        if ($(this).hasClass('last')) {
                            $(this).removeClass('hidden');
                            return false;
                        }
                        $(this).filter('.hidden').removeClass('hidden');
                    });
                });
                    $('.nav-tab-wrapper a:last').addClass('nav-tab-active');
                $('.nav-tab-wrapper a').click(function(evt) {
                    $('.nav-tab-wrapper a').removeClass('nav-tab-active');
                    $(this).addClass('nav-tab-active').blur();
                    var clicked_group = $(this).attr('href');
<?php } else { ?>
var activetab = '';
if (typeof(localStorage) != 'undefined' ) {
activetab = localStorage.getItem("activetab");
}
if (activetab != '' && $(activetab).length ) {
$(activetab).fadeIn();
} else {
$('.group:first').fadeIn();
                   $('.group:last').fadeIn();
}
                $('.group .collapsed').each(function(){
                    $(this).find('input:checked').parent().parent().parent().nextAll().each(
                    function(){
                        if ($(this).hasClass('last')) {
                            $(this).removeClass('hidden');
                            return false;
                        }
                        $(this).filter('.hidden').removeClass('hidden');
                    });
                });
 
if (activetab != '' && $(activetab + '-tab').length ) {
$(activetab + '-tab').addClass('nav-tab-active');
}
else {
$('.nav-tab-wrapper a:first').addClass('nav-tab-active');
                }
                $('.nav-tab-wrapper a').click(function(evt) {
                    $('.nav-tab-wrapper a').removeClass('nav-tab-active');
                    $(this).addClass('nav-tab-active').blur();
                    var clicked_group = $(this).attr('href');
if (typeof(localStorage) != 'undefined' ) {
localStorage.setItem("activetab", $(this).attr('href'));
}
<?php } ?>
                    $('.group').hide();
                    $(clicked_group).fadeIn();
                    evt.preventDefault();
                });
                var file_frame = null;
                $('.ps-sms-browse').on('click', function (event) {
                    event.preventDefault();
                    var self = $(this);
                    if ( file_frame ) {
                        file_frame.open();
                        return false;
                    }
                    file_frame = wp.media.frames.file_frame = wp.media({
                        title: self.data('uploader_title'),
                        button: {
                            text: self.data('uploader_button_text'),
                        },
                        multiple: false
                    });
                    file_frame.on('select', function () {
                        attachment = file_frame.state().get('selection').first().toJSON();
 
                        self.prev('.ps-sms-url').val(attachment.url);
                    });
                    file_frame.open();
                });
        });
        </script>
        <?php
    }
}
 
function ps_sms_options( $option, $section, $default = '' ) {
    $options = get_option( $section );
return isset( $options[$option] ) ? $options[$option] : $default;
}
 
function get_all_woo_status_ps_sms() {
if ( !function_exists('wc_get_order_statuses') )
return;
$statuses = wc_get_order_statuses() ? wc_get_order_statuses() : array();
$opt_statuses = array();
foreach ( (array) $statuses as $status_val => $status_name ) {
$opt_statuses[substr( $status_val, 3 )] = $status_name;
}
return $opt_statuses;
}
 
function get_all_woo_status_ps_sms_for_super_admin() {
if ( !function_exists('wc_get_order_statuses') )
return;
$statuses = wc_get_order_statuses() ? wc_get_order_statuses() : array();
$opt_statuses = array();
foreach ( (array) $statuses as $status_val => $status_name ) {
$opt_statuses[substr( $status_val, 3 )] = $status_name;
}
$opt_statuses['low'] = __( 'کم بودن موجودی انبار', 'persianwoosms');
$opt_statuses['out'] = __( 'تمام شدن موجودی انبار' , 'persianwoosms');
return $opt_statuses;
}
 
function get_all_woo_status_ps_sms_for_product_admin() {
if ( !function_exists('wc_get_order_statuses') )
return;
$statuses = wc_get_order_statuses() ? wc_get_order_statuses() : array();
$opt_statuses = array();
 
if ( (ps_sms_options( 'enable_sms', 'sms_main_settings', 'no' ) == 'on' && in_array( 'sms', ( (array) ps_sms_options( 'pm_type_product_admin', 'sms_product_admin_settings', array()) ) )) &&
( ps_sms_options( 'enable_tg', 'sms_main_settings', 'no' ) == 'on' && in_array( 'tg', ( (array) ps_sms_options( 'pm_type_product_admin', 'sms_product_admin_settings', array() ) ) ) ) ) {
$opt_statuses['sms'] = __( 'دریافت اس ام اس', 'persianwoosms');
$opt_statuses['tg'] = __( 'دریافت تلگرام' , 'persianwoosms');
}
else if ( ps_sms_options( 'enable_sms', 'sms_main_settings', 'no' ) == 'on' && in_array( 'sms', ( (array) ps_sms_options( 'pm_type_product_admin', 'sms_product_admin_settings', array()) ) )  ) {
$opt_statuses['sms'] = __( 'دریافت اس ام اس', 'persianwoosms');
$opt_statuses['tg'] = __( 'دریافت تلگرام (غیرفعال)' , 'persianwoosms');
}
else if ( ps_sms_options( 'enable_tg', 'sms_main_settings', 'no' ) == 'on' && in_array( 'tg', ( (array) ps_sms_options( 'pm_type_product_admin', 'sms_product_admin_settings', array() ) ) ) ) {
$opt_statuses['sms'] = __( 'دریافت اس ام اس (غیرفعال)', 'persianwoosms');
$opt_statuses['tg'] = __( 'دریافت تلگرام' , 'persianwoosms');
}
else {
$opt_statuses['sms'] = __( 'دریافت اس ام اس (غیرفعال)', 'persianwoosms');
$opt_statuses['tg'] = __( 'دریافت تلگرام (غیرفعال)' , 'persianwoosms');
}
 
foreach ( (array) $statuses as $status_val => $status_name ) {
$opt_statuses[substr( $status_val, 3 )] = $status_name;
}
$opt_statuses['low'] = __( 'کم بودن موجودی انبار', 'persianwoosms');
$opt_statuses['out'] = __( 'تمام شدن موجودی انبار' , 'persianwoosms');
return $opt_statuses;
}
 
function get_allowed_woo_status_ps_sms() {
if ( !function_exists('wc_get_order_statuses') )
return;
$statuses = wc_get_order_statuses() ? wc_get_order_statuses() : array();
$order_status_settings  = ps_sms_options( 'order_status', 'sms_buyer_settings', array() );
$allowed_statuses = array();
foreach ( (array) $statuses as $status_val => $status_name ) {
if ( in_array( substr( $status_val, 3 ) , $order_status_settings ) )
$allowed_statuses[substr( $status_val, 3 )] = $status_name;
}
return $allowed_statuses;
}
 
function get_product_list_ps_sms( $order ) {        
$product_list = '';
$order_item = $order->get_items();
$prodct_name = $prodct_id = array();
foreach( (array) $order_item as $product ) {
$prodct_id[] = $product['product_id'];
$prodct_name[] = $product['name']; 
$prodct_name_qty[] = $product['name'] . '(' . $product['qty'] . ')'; 
}
$product_names = implode( '-', $prodct_name );
$prodct_name_qtys = implode( '-', $prodct_name_qty );
$prodct_ids = implode( ',', $prodct_id );
return array ( 
'names_qty' => $prodct_name_qtys,
'names' => $product_names , 
'ids' => $prodct_ids
);
}
 
function add_multi_select_checkbox_to_checkout_ps_sms( $field, $key, $args, $value ) {
if ( ( ! empty( $args['clear'] ) ) )
$after = '<div class="clear"></div>';
else
$after = '';
if ( $args['required'] ) {
$args['class'][] = 'validate-required';
$required = ' <abbr class="required" title="' . esc_attr__( 'required', 'persian_woo_sms'  ) . '">*</abbr>';
} else
$required = '';
$custom_attributes = array();
if ( ! empty( $args['custom_attributes'] ) && is_array( $args['custom_attributes'] ) ) {
foreach ( $args['custom_attributes'] as $attribute => $attribute_value ) {
$custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"';
}
}
if ( $args['type'] == "persian_woo_sms_multiselect" ) {
$value = is_array( $value ) ? $value : array( $value );
if ( ! empty( $args['options'] ) ) {
$options = '';
foreach ( $args['options'] as $option_key => $option_text ) {
$options .= '<option value="' . esc_attr( $option_key ) . '" '. selected( in_array( $option_key, $value ), 1, false ) . '>' . esc_attr( $option_text ) .'</option>';
}
$field = '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] ) {
$field .= '<label for="' . esc_attr( $key ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required . '</label>';
}
$field .= '<select name="' . esc_attr( $key ) . '[]" id="' . esc_attr( $key ) . '" class="select" multiple="multiple" ' . implode( ' ', $custom_attributes ) . '>'
. $options
. ' </select>';
 
if ( $args['description'] ) {
$field .= '<span class="description">' . ( $args['description'] ) . '</span>';
}
 
$field .= '</p>'. $after;
}
}
if ( $args['type'] == "persian_woo_sms_multicheckbox" ) {
$value = is_array( $value ) ? $value : array( $value );
if ( ! empty( $args['options'] ) ) {
$field .= '<p class="form-row ' . esc_attr( implode( ' ', $args['class'] ) ) .'" id="' . esc_attr( $key ) . '_field">';
if ( $args['label'] ) {
$field .= '<label for="' . esc_attr( current( array_keys( $args['options'] ) ) ) . '" class="' . implode( ' ', $args['label_class'] ) .'">' . $args['label']. $required  . '</label>';
}
foreach ( $args['options'] as $option_key => $option_text ) {
$field .= '<input type="checkbox" class="input-checkbox" value="' . esc_attr( $option_key ) . '" name="' . esc_attr( $key ) . '[]" id="' . esc_attr( $key ) . '_' . esc_attr( $option_key ) . '"' . checked( in_array( $option_key, $value ), 1, false ) . ' />';
$field .= '<label for="' . esc_attr( $key ) . '_' . esc_attr( $option_key ) . '" class="checkbox ' . implode( ' ', $args['label_class'] ) .'">' . $option_text . '</label><br>';
}
if ( $args['description'] ) {
$field .= '<span class="description">' . ( $args['description'] ) . '</span>';
}
$field .= '</p>' . $after;
}
}
return $field;
}
 
function Shamsi_HANNANStd($g_y,$g_m,$g_d,$mod=''){
$d_4=$g_y%4;
$g_a=array(0,0,31,59,90,120,151,181,212,243,273,304,334);
$doy_g=$g_a[(int)$g_m]+$g_d;
if($d_4==0 and $g_m>2)
$doy_g++;
$d_33=(int)((($g_y-16)%132)*.0305);
$a=($d_33==3 or $d_33<($d_4-1) or $d_4==0)?286:287;
$b=(($d_33==1 or $d_33==2) and ($d_33==$d_4 or $d_4==1))?78:(($d_33==3 and $d_4==0)?80:79);
if((int)(($g_y-10)/63)==30){
$a--;$b++;
}
if($doy_g>$ B) {
$jy=$g_y-621; $doy_j=$doy_g-$b;
}else{
$jy=$g_y-622; $doy_j=$doy_g+$a;
}
if($doy_j<187){
$jm=(int)(($doy_j-1)/31); $jd=$doy_j-(31*$jm++);
}else{
$jm=(int)(($doy_j-187)/30); $jd=$doy_j-186-($jm*30); $jm+=7;
}
return($mod=='')?array($jy,$jm,$jd):$jy.$mod.$jm.$mod.$jd;
}
 
 
 
function sms_text_order_shortcode () {
 
return "
<strong>جزییات سفارش : </strong><br/>
<code>{phone}</code> = شماره موبایل خریدار   ، 
<code>{email}</code> = ایمیل خریدار   ،
<code>{order_id}</code> = شماره سفارش  ،    
<code>{status}</code> = وضعیت سفارش<br/> 
<code>{price}</code> = مبلغ سفارش   ، 
<code>{all_items}</code> = آیتم های سفارش  ، 
<code>{all_items_qty}</code> = آیتم های سفارش همراه تعداد ، 
<code>{count_items}</code> = تعداد آیتم های سفارش  <br/> 
<code>{payment_method}</code> = روش پرداخت  ، 
<code>{shipping_method}</code> = روش ارسال  ، 
<code>{description}</code> = توضیحات خریدار  ، 
<code>{transaction_id}</code> = شماره تراکنش<br/><br/>
 
<strong>جزییات صورت حساب : </strong><br/>
<code>{b_first_name}</code> = نام خریدار   ، 
<code>{b_last_name}</code> = نام خانوادگی خریدار   ، 
<code>{b_company}</code> = نام شرکت   <br/> 
<code>{b_country}</code> = کشور   ، 
<code>{b_state}</code> = ایالت/استان   ، 
<code>{b_city}</code> = شهر   ، 
<code>{b_address_1}</code> = آدرس 1   ، 
<code>{b_address_2}</code> = آدرس 2   ، 
<code>{b_postcode}</code> = کد پستی<br/><br/>
 
 
<strong>جزییات حمل و نقل : </strong><br/>
<code>{sh_first_name}</code> = نام خریدار   ، 
<code>{sh_last_name}</code> = نام خانوادگی خریدار   ، 
<code>{sh_company}</code> = نام شرکت   <br/> 
<code>{sh_country}</code> = کشور   ، 
<code>{sh_state}</code> = ایالت/استان   ، 
<code>{sh_city}</code> = شهر   ، 
<code>{sh_address_1}</code> = آدرس 1   ،
<code>{sh_address_2}</code> = آدرس 2   ، 
<code>{sh_postcode}</code> = کد پستی<br/><br/>
 
";
}
 
function str_replace_tags_order( $content, $order_status, $order_id, $order , $all_items, $vendor_items ) {
$price = intval($order->order_total). ' '. sprintf( get_woocommerce_price_format(), get_woocommerce_currency_symbol( $order->get_order_currency() ), '' ); 
$count_items = count(explode( '-' , $all_items));
list($all_items, $all_items_qty) = explode ( '__vsh__' , $all_items );
 
$payment_gateways = array();
if ( WC()->payment_gateways() )
$payment_gateways = WC()->payment_gateways->payment_gateways();
$payment_method = ! empty( $order->payment_method ) ? $order->payment_method : '';
$payment_method = ( isset( $payment_gateways[ $payment_method ] ) ? esc_html( $payment_gateways[ $payment_method ]->get_title() ) : esc_html( $payment_method ) );
$shipping_method = esc_html( $order->get_shipping_method() );
 
$country = WC()->countries;
 
$bill_country = ( isset( $country->countries[ $order->billing_country ] ) ) ?$country->countries[ $order->billing_country ] : $order->billing_country;
$bill_state = ( $order->billing_country && $order->billing_state && isset( $country->states[ $order->billing_country ][ $order->billing_state ] ) ) ? $country->states[ $order->billing_country ][ $order->billing_state ] : $order->billing_state;
 
$shipp_country = ( isset( $country->countries[ $order->shipping_country ] ) ) ?$country->countries[ $order->shipping_country ] : $order->shipping_country;
$shipp_state = ( $order->shipping_country && $order->shipping_state && isset( $country->states[ $order->shipping_country ][ $order->shipping_state ] ) ) ? $country->states[ $order->shipping_country ][ $order->shipping_state ] : $order->shipping_state;
 
$post = get_post( $order_id );
 
$find = array(
'{b_first_name}',
'{b_last_name}',    
'{b_company}',
'{b_address_1}',
'{b_address_2}',
'{b_state}',
'{b_city}',
'{b_postcode}',
'{b_country}',
'{sh_first_name}',
'{sh_last_name}',
'{sh_company}',
'{sh_address_1}',
'{sh_address_2}',
'{sh_state}',
'{sh_city}',
'{sh_postcode}',
'{sh_country}',
'{phone}',    
'{email}',
'{order_id}',
'{status}',
'{price}',
'{all_items}',
'{all_items_qty}',
'{count_items}',
'{vendor_items}',
'{transaction_id}',
'{payment_method}',
'{shipping_method}',
'{description}',
    );
 
$replace = array(
$order->billing_first_name,
$order->billing_last_name,
$order->billing_company,
$order->billing_address_1,
$order->billing_address_2,
$bill_state,
$order->billing_city,
$order->billing_postcode,
$bill_country,
$order->shipping_first_name,
$order->shipping_last_name,
$order->shipping_company,
$order->shipping_address_1,
$order->shipping_address_2,
$shipp_state,
$order->shipping_city,
$order->shipping_postcode,
$shipp_country,
get_post_meta( $order_id, '_billing_phone', true ),
$order->billing_email,
$order_id,
wc_get_order_status_name($order_status),
        $price,
$all_items,
$all_items_qty,
$count_items,
$vendor_items,
get_post_meta( $order_id, '_transaction_id', true ),
$payment_method,
$shipping_method,
nl2br( esc_html( $post->post_excerpt ) ),
);
 
    return str_replace( array( '<br>' , '<br/>' , '<br />', ' ' ), array( '' , '' , '', ' ' ), str_replace( $find, $replace, $content ) );   
}
 
function is_mobile_woo_sms( $phone ) {
return preg_match('/^(((\+|00)98)|0)?9[123]\d{8}$/', $phone );
}
 
 
function str_replace_tags_product( $content, $product_id ) {
$regular_price = intval(get_post_meta( $product_id, '_regular_price', true )). ' '. sprintf( get_woocommerce_price_format(), get_woocommerce_currency_symbol(  get_woocommerce_currency() ), '' ); 
$sale_price = intval(get_post_meta( $product_id, '_sale_price', true )). ' '. sprintf( get_woocommerce_price_format(), get_woocommerce_currency_symbol( get_woocommerce_currency() ), '' ); 
$sale_price_dates_from = ( $date = get_post_meta( $product_id, '_sale_price_dates_from', true ) ) ? date_i18n( 'Y-m-d', $date ) : '';
if ( $sale_price_dates_from != '' ) {
list( $year , $month , $day ) = explode( '-', $sale_price_dates_from );
$sale_price_dates_from = Shamsi_HANNANStd( $year , $month , $day, '/' );
}
$sale_price_dates_to   = ( $date = get_post_meta( $product_id, '_sale_price_dates_to', true ) ) ? date_i18n( 'Y-m-d', $date ) : '';
if ( $sale_price_dates_to != '' ) {
list( $year , $month , $day ) = explode( '-', $sale_price_dates_to );
$sale_price_dates_to = Shamsi_HANNANStd( $year , $month , $day, '/' );
}
$find = array(
'{product_id}',
'{sku}',
'{product_title}',
'{regular_price}',
'{onsale_price}',
'{onsale_from}',
'{onsale_to}',
'{stock}',
    );
$replace = array(
$product_id,
get_post_meta( $product_id, '_sku', true ),
get_the_title( $product_id ),
$regular_price,
$sale_price,
$sale_price_dates_from,
$sale_price_dates_to,
((int) get_post_meta( $product_id, '_stock', true )),
);
    return str_replace( array( '<br>' , '<br/>' , '<br />', ' ' ), array( '' , '' , '', ' ' ), str_replace( $find, $replace, $content ) );   
}
 

6ehzad

تازه وارد
سلام دوستان

من یه سایت تخفیف گروهی راه اندازی کردم 

همانطور که مطلع هستید سایت های تخفیف گروهی نیازمند نعدادی تامین کننده می باشد که کالا یا خدمات خود را در سایت قرار دهند . برای همین من افزونه wc Vendor را نصب کردم.

در سایت های تخفیف گروهی برای مشتری بعد از انتخاب محصول یا خدمات مورد نیاز خود و پرداخت وجه آن یک کد توسط ایمیل و پیامک و فاکتور چاپی ارسال می گردد. برای ارسال پیامک من افزونه پیشرفته پیامک فارسی ووکامرس و برای فاکتور چاپی از افزونه Woocommerce print invoice & delivery note  استفاده کردم

چون خود ووکامرس کد ها را به صورت مرتب و پشت سر هم ارائه می کنه و من نیتز به کدهای رندوم داشتم از افزونه WooCommerce Sequential Order Numbers Pro  استفاده کردم . 

اما مشکلات :

کدهای رندوم تولید شده ( به جای شماره سفارش )  هنگام ارسال پیامک و در پنل فروشنده وارد نمی شود و به صورت قبل یعنی همان کدهای منطم و پشت سر هم ارسال می گردد.

ممنون می شم اگه راهنمایی کنید که چجوری می شه در ییامک و پنل فروشنده هم از همان کدهای تولید شده رندوم بشه استفاده کرد
میشه آدرس سایتتون رو بدید ببینم؟

 
بالا