IgorIvanov
Ответы в темах
-
Форум: WooCommerce
Тема: Убрать страницу подтверждения оплатыРазработчики плагина ответили, надо уточнить у ребят из Woocommerce. Поскольку у нас в документации нет методов, отвечающих за это….
Все — замкнутый круг (Форум: WooCommerce
Тема: Убрать страницу подтверждения оплатыWooCommerce не имеет к этому отношения.
Вы зря так утверждаете — вот например, если я выбираю стандартный «Банковский перевод», то тоже, после подтверждения заказа, перебрасывает на страницу заказа…
Я понимаю, что разработчик плагина должен был что-то дописать, что бы этого перенаправления не было — но это должно быть связано с функционалом woocommerce (Вот тут тоже наш человек на англоязычном форуме так же «бился головой от стену» безрезультатно https://wordpress.org/support/topic/how-to-remove-the-extra-step/
Форум: WooCommerce
Тема: Убрать страницу подтверждения оплатыТам кода-то 300 строчек во всем плагине…
<?php /* Plugin Name: Unitpay Plugin URI: http://unitpay.ru/ Description: Unitpay Plugin for WooCommerce Version: 1.0.1 Author: unitpay.ru */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly /* Add a custom payment class to WC ------------------------------------------------------------ */ add_action('plugins_loaded', 'woocommerce_unitpay', 0); function woocommerce_unitpay(){ load_plugin_textdomain( 'unitpay', false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' ); if (!class_exists('WC_Payment_Gateway')) return; // if the WC payment gateway class is not available, do nothing if(class_exists('WC_UNITPAY')) return; class WC_UNITPAY extends WC_Payment_Gateway{ public function __construct(){ $plugin_dir = plugin_dir_url(__FILE__); global $woocommerce; $this->id = 'unitpay'; $this->icon = apply_filters('woocommerce_unitpay_icon', ''.$plugin_dir.'unitpay.png'); $this->has_fields = false; // Load the settings $this->init_form_fields(); $this->init_settings(); // Define user set variables $this->public_key = $this->get_option('public_key'); $this->secret_key = $this->get_option('secret_key'); $this->title = 'Unitpay'; $this->description = __('Payment system Unitpay', 'unitpay'); // Actions add_action('woocommerce_receipt_' . $this->id, array($this, 'receipt_page')); // Save options add_action('woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); // Payment listener/API hook add_action('woocommerce_api_wc_' . $this->id, array($this, 'callback')); } public function admin_options() { ?> <h3><?php _e('UNITPAY', 'unitpay'); ?></h3> <p><?php _e('Setup payments parameters.', 'unitpay'); ?></p> <table class="form-table"> <?php // Generate the HTML For the settings form. $this->generate_settings_html(); ?> </table><!--/.form-table--> <?php } // End admin_options() function init_form_fields(){ $this->form_fields = array( 'enabled' => array( 'title' => __('Enable/Disable', 'unitpay'), 'type' => 'checkbox', 'label' => __('Enabled', 'unitpay'), 'default' => 'yes' ), 'public_key' => array( 'title' => __('PUBLIC KEY', 'unitpay'), 'type' => 'text', 'description' => __('Copy PUBLIC KEY from your account page in unitpay system', 'unitpay'), 'default' => '' ), 'secret_key' => array( 'title' => __('SECRET KEY', 'woocommerce'), 'type' => 'text', 'description' => __('Copy SECRET KEY from your account page in unitpay system', 'unitpay'), 'default' => '' ) ); } /** * Generate form **/ public function generate_form($order_id){ $order = new WC_Order( $order_id ); $sum = number_format($order->order_total, 2, '.', ''); $account = $order_id; $desc = __('Payment for Order №', 'unitpay') . $order_id; $currency = $order->get_order_currency(); $cur_locale = get_locale(); $locale = $cur_locale == 'ru_RU'?'ru':'en'; $signature = hash('sha256', join('{up}', array( $account, $currency, $desc, $sum, $this->secret_key ))); return '<form action="https://unitpay.ru/pay/' . $this->public_key . '" method="POST" id="unitpay_form">'. '<input type="hidden" name="sum" value="' . $sum . '" />'. '<input type="hidden" name="account" value="' . $account . '" />'. '<input type="hidden" name="desc" value="' . $desc . '" />'. '<input type="hidden" name="currency" value="' . $currency . '" />'. '<input type="hidden" name="locale" value="' . $locale . '" />'. '<input type="hidden" name="signature" value="' . $signature . '" />'. '<input type="submit" class="button alt" id="submit_unitpay_form" value="'.__('Pay', 'unitpay').'" /> <a class="button cancel" href="'.$order->get_cancel_order_url().'">'.__('Cancel payment and return back to card', 'unitpay').'</a>'."\n". '</form>'; } /** * Process the payment and return the result **/ function process_payment($order_id){ $order = new WC_Order($order_id); return array( 'result' => 'success', 'redirect' => add_query_arg('order', $order->id, add_query_arg('key', $order->order_key, get_permalink(woocommerce_get_page_id('pay')))) ); } function receipt_page($order){ echo '<p>'.__('Thank you for your order, press button to pay.', 'unitpay').'</p>'; echo $this->generate_form($order); } function callback(){ header('Content-type:application/json; charset=utf-8'); $method = ''; $params = array(); if ((isset($_GET['params'])) && (isset($_GET['method'])) && (isset($_GET['params']['signature']))){ $params = $_GET['params']; $method = $_GET['method']; $signature = $params['signature']; if (empty($signature)){ $status_sign = false; }else{ $secret_key = $this->secret_key; $status_sign = $this->verifySignature($params, $method, $secret_key); } }else{ $status_sign = false; } // $status_sign = true; if ($status_sign){ switch ($method) { case 'check': $result = $this->check( $params ); break; case 'pay': $result = $this->payment( $params ); break; case 'error': $result = $this->error( $params ); break; default: $result = array('error' => array('message' => __('Wrong method', 'unitpay')) ); break; } }else{ $result = array('error' => array('message' => __('Wrong signature', 'unitpay')) ); } echo json_encode($result); die(); } function verifySignature($params, $method, $secret) { return $params['signature'] == $this->getSignature($method, $params, $secret); } function getSignature($method, array $params, $secretKey) { ksort($params); unset($params['sign']); unset($params['signature']); array_push($params, $secretKey); array_unshift($params, $method); return hash('sha256', join('{up}', $params)); } function check( $params ) { $order = new WC_Order( $params['account'] ); if (!$order->id){ $result = array('error' => array('message' => __('Order not created', 'unitpay')) ); }else{ $sum = number_format($order->order_total, 2, '.',''); $currency = $order->get_order_currency(); if ((float)$sum != (float)$params['orderSum']) { $result = array('error' => array('message' => __('Wrong order sum', 'unitpay')) ); }elseif ($currency != $params['orderCurrency']) { $result = array('error' => array('message' => __('Wrong order currency', 'unitpay')) ); } else{ $result = array('result' => array('message' => __('Request successfully', 'unitpay')) ); } } return $result; } function payment( $params ) { $order = new WC_Order( $params['account'] ); if (!$order->id){ $result = array('error' => array('message' => __('Order not created', 'unitpay')) ); }else{ $sum = number_format($order->order_total, 2, '.',''); $currency = $order->get_order_currency(); if ((float)$sum != (float)$params['orderSum']) { $result = array('error' => array('message' => __('Wrong order sum', 'unitpay')) ); }elseif ($currency != $params['orderCurrency']) { $result = array('error' => array('message' => __('Wrong order currency', 'unitpay')) ); } else{ $order->payment_complete(); $result = array('result' => array('message' => __('Request successfully', 'unitpay')) ); } } return $result; } function error( $params ) { $order = new WC_Order( $params['account'] ); if (!$order){ $result = array('error' => array('message' => __('Order not created', 'unitpay')) ); } else{ $order->update_status('failed', __('Payment error', 'unitpay')); $result = array('result' => array('message' => __('Request successfully', 'unitpay')) ); } return $result; } } /** * Add the gateway to WooCommerce **/ function add_unitpay_gateway($methods){ $methods[] = 'WC_UNITPAY'; return $methods; } add_filter('woocommerce_payment_gateways', 'add_unitpay_gateway'); } ?>
Форум: WooCommerce
Тема: Убрать страницу подтверждения оплатыя так понимаю, это должна быть какая-то функция, которая меняет стандартный функционал…
В интернете искал и видел много подобных вопросов — но, как и вы, всех их авторов куда-то посылают… спасибо за помощь ((Форум: WooCommerce
Тема: Убрать страницу подтверждения оплатытолько одному Вам известных шлюзов
например Unitpay, Робокасса..
Форум: Проблемы и решения
Тема: Не сохраняется «0»пробовал, почему-то не получается((
Форум: Проблемы и решения
Тема: Не сохраняется «0»своих мозгов мало, поэтому изначальный код для вставки дополнительных полей «нагуглил»:
class trueMetaBox { function __construct($options) { $this->options = $options; $this->prefix = $this->options['id'] .'_'; add_action( 'add_meta_boxes', array( &$this, 'create' ) ); add_action( 'save_post', array( &$this, 'save' ), 1, 2 ); } function create() { foreach ($this->options['post'] as $post_type) { if (current_user_can( $this->options['cap'])) { add_meta_box($this->options['id'], $this->options['name'], array(&$this, 'fill'), $post_type, $this->options['pos'], $this->options['pri']); } } } function fill(){ global $post; $p_i_d = $post->ID; wp_nonce_field( $this->options['id'], $this->options['id'].'_wpnonce', false, true ); ?> <table class="form-table"><tbody><?php foreach ( $this->options['args'] as $param ) { if (current_user_can( $param['cap'])) { ?><tr><?php if(!$value = get_post_meta($post->ID, $this->prefix .$param['id'] , true)) $value = $param['std']; switch ( $param['type'] ) { case 'text':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="regular-text" /><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } case 'number':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="regular-text" /><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } case 'textarea':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <textarea name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>" value="<?php echo $value ?>" placeholder="<?php echo $param['placeholder'] ?>" class="large-text" /><?php echo $value ?></textarea><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } case 'checkbox':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <label for="<?php echo $this->prefix .$param['id'] ?>"><input name="<?php echo $this->prefix .$param['id'] ?>" type="<?php echo $param['type'] ?>" id="<?php echo $this->prefix .$param['id'] ?>"<?php echo ($value=='on') ? ' checked="checked"' : '' ?> /> <?php echo $param['desc'] ?></label> </td> <?php break; } case 'select':{ ?> <th scope="row"><label for="<?php echo $this->prefix .$param['id'] ?>"><?php echo $param['title'] ?></label></th> <td> <label for="<?php echo $this->prefix .$param['id'] ?>"> <select name="<?php echo $this->prefix .$param['id'] ?>" id="<?php echo $this->prefix .$param['id'] ?>"><option>...</option><?php foreach($param['args'] as $val=>$name){ ?><option value="<?php echo $val ?>"<?php echo ( $value == $val ) ? ' selected="selected"' : '' ?>><?php echo $name ?></option><?php } ?></select></label><br /> <span class="description"><?php echo $param['desc'] ?></span> </td> <?php break; } } ?></tr><?php } } ?></tbody></table><?php } function save($post_id, $post){ if ( !wp_verify_nonce( $_POST[ $this->options['id'].'_wpnonce' ], $this->options['id'] ) ) return; if ( !current_user_can( 'edit_post', $post_id ) ) return; if ( !in_array($post->post_type, $this->options['post'])) return; foreach ( $this->options['args'] as $param ) { if ( current_user_can( $param['cap'] ) ) { if ( isset( $_POST[ $this->prefix . $param['id'] ] ) && trim( $_POST[ $this->prefix . $param['id'] ] ) ) { update_post_meta( $post_id, $this->prefix . $param['id'], trim($_POST[ $this->prefix . $param['id'] ]) ); } else { delete_post_meta( $post_id, $this->prefix . $param['id'] ); } } } } }
ну так я все так и делаю, как учит Wp-Kama…
… странное дело: сегодня просто включил компьютер и все заработало правильно, хотя ничего нового не сделалФорум: Плагины
Тема: Easy FancyBox вертикальная прокрутка при открытииа вот нашел:
#fancybox-content>div {overflow: hidden !important;}
🙂Понятно что кастомными типами записей в wordpress можно сделать все, в том числе и базу документов с фильтром поиска… Вопрос: почему не получается найти готовое решение в виде плагина — задача в общем-то тривиальная? )
Здравствуйте! Подскажите, Вам не удалось решить данную задачу с хранилищем документов и поиском?.. Столкнулся с точно такой же проблемой — вот уж не думал, что для WordPress нет подходящего плагина ((( WP-Filebase «более-менее» подходит кажется, но плагин больше не поддерживается, к тому же там нет расширенного поиска по полям.
нет готового решения? жаль((
Форум: Проблемы и решения
Тема: Восстановить медиафайлы на кириллицев том-то и дело, что хостинг уже поменяли после этого (со всеми кракозябрами)… вся надежда на то, что можно со старого хостинга как-то бэкап вытащить…
Просто я ещё надеялся что есть какая-нибудь утилита или онлайн сервис, которые могут все названия файлов автоматом назад перекодировать (ведь проблема-то достаточно распространенная)Форум: Проблемы и решения
Тема: Восстановить медиафайлы на кириллицеБекапы с небитыми названиями есть?
А если найдем файлы бэкапа, то что делать? там, в самом архиве, названия, по идее, нормальные должны быть?
Форум: Проблемы и решения
Тема: Восстановить медиафайлы на кириллицеБекапы с небитыми названиями есть?
самого архива нет