Fatal error: Cannot redeclare example_exchangebox_merchant_xchanger_after() (previously declared in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/merchantscript/webmoey/function.php:146) in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/merchantscript/yamoney/function.php on line 154 Пишет такую ошибку так как вызывается 2 раза одна и та-же функция. Как мне с помощью пространственых имен php сделать так что бы оба вала работали как один ? При написании кода в оба файла function.php namespace в начале документа выдает ошибку PHP: <?php /* ВНИМАНИЕ! Все функции должны быть уникальны! Если вы не умеете работать с фильтрами Wordpress и не понимаете их принципа, закройте этот файл и ничего не трогайте! */ /* Первым делом, подгружаем нащи переменные из определенного файла. Для этого указываем путь, к нашему файлу. */ $path = get_merchant_file(__FILE__); pn_template($path . '/dostup/index'); /* Мерчант обязан иметь уникальный ключ, название и заголовок. В противном случае, будут проблемы. Данные устанавливаем с помощью следующего фильтра. В переменной $merchants находится массив всех мерчантов. Указав данные в этой функции, мерчант автоматически будет подключен и появиться в настройках, а также на странице настроек мерчанта и при редактировании валюты. */ add_filter('exchangebox_merchant_list_one','example_exchangebox_merchant_list_one'); function example_exchangebox_merchant_list_one($merchants){ $merchants[] = array( 'key' => '100', 'name' => 'example', 'title' => 'Example' ); return $merchants; } /* exchangebox_merchant_list_before - не обязательный фильтр на странице настроек марчанта. Данные из этого фильтра, выводятся на странице настроек марчанта, выше формы. Функция, имеет переменную $place, которая содержит данные о выбранном мерчанте. Используется name из функции определения мерчанта exchangebox_merchant_list. */ add_action('before_merchant_admine_try','example_before_merchant_admin_try'); function example_before_merchant_admin_try($place){ if($m_id == 100){ /* выводим данные для нашего конкретного мерчанта */ } } /* Если нам необходимо указать подсказки ниже инструкции, существует фильтр exchangebox_merchant_list_helps Фильтр имеет пару переменных: $m_id - key мерчанта */ add_action('merchant_admin_test','example_merchant_admin_test',99,2); function example_merchant_admin_test($m_id, $data){ if($m_id == 100){ pn_textfield('',' Подсказка нашего мерчанта '); } } /* фильтр, влияющий на кнопку "проверить оплату" В фильтр передается 3 параметра: $gmerchant - статус вывода кнопки "проверить оплату". 0-не выводить, 1-выводить $status - статус заявки (new - новая) $merchant_key - ключ мерчанта. Ключ назначается автоматически, если мерчант отключен для данной валюты или не назначен, ключа не будет. */ add_filter('exchangebox_merchant_gmerchant_exp','example_exchangebox_merchant_gmerchant_exp',99,3); function example_exchangebox_merchant_gmerchant_exp($gmerchant, $status, $merchant_key){ if($status=='new' and is_enable_merchat(100) and $merchant_key==100){ $gmerchant = 1; } return $gmerchant; } /* фильтр, корретирующий сумму оплаты, в блоке заявки Имеет следующие переменные: $summ - текущее значение суммы, к оплате $merchant_key - ключ мерчанта. Ключ назначается автоматически, если мерчант отключен для данной валюты или не назначен, ключа не будет. */ add_filter('exchangebox_merchant_sumpay_xp','example_exchangebox_merchant_sumpay_xp',99,2); function example_exchangebox_merchant_sumpay_xp($summ, $merchant_key){ if(is_enable_merchat(100) and $merchant_key==100){ /* задаем новую сумму, при необходимости */ } return $summ; } /* Фильтр замены кнопки оплатить. Имеет следующие переменные: $paybutton - код формы оплаты $merchant_key - ключ мерчанта. Ключ назначается автоматически, если мерчант отключен для данной валюты или не назначен, ключа не будет. $naps - данные по направлению обмена из таблицы БД napobmens. Данные хранятся в объекте. $data - данные обмена из таблицы БД bids. Данные хранятся в объекте. */ add_filter('exchangebox_merchant_paybutton_xpp','example_exchangebox_merchant_paybutton_xpp',99,4); function example_exchangebox_merchant_paybutton_xpp($paybutton, $merchant_key, $naps, $data){ if(is_enable_merchat(100) and $merchant_key==100){ return 'Новая кнопка оплаты'; } return $paybutton; } /* Фильтр вывода дополнительного контента, после заявки Имеет следующие переменные: $content - дополнительный код $merchant_key - ключ мерчанта. Ключ назначается автоматически, если мерчант отключен для данной валюты или не назначен, ключа не будет. $naps - данные по направлению обмена из таблицы БД napobmens. Данные хранятся в объекте. $data - данные обмена из таблицы БД bids. Данные хранятся в объекте. */ add_filter('exchangebox_merchant_xchanger_after','example_exchangebox_merchant_xchanger_after',99,4); function example_exchangebox_merchant_xchanger_after($content, $merchant_key, $naps, $data){ if(is_enable_merchat(100) and $xzt==100){ } return $content; } ?>
переводить не пробовали? Пишет же повторно объявлена функция такая-то (ранее была объявлена - тут-то и тут-то) не нужно два раза объявлять одну и ту же функцию
Я не знаю WordPress, но я бы создал файл, в котором описал бы твою функцию: PHP: <?php // new_file.php namespace custom_functions; example_exchangebox_merchant_xchanger_after() { // TO DO: Describe your logic } Затем включил бы new_file.php в основной, добавил в самом начале основного PHP: use custom_functions as cf; и вызвал бы ее PHP: cf\example_exchangebox_merchant_xchanger_after();
Если в function.php двух файлах написать namespace custom_functions; пишет что warning: invalid argument supplied for for each () in settings.php И warning : call_user_func_array () expects parameter 1 to be a valid callback function 'exampl' not found or invalid function name in plugins. Php
Namespace в разных файлах должен быть разным, иначе толк от него. Изучите namespace. Поэспериментируйте в тестовом проекте. По поводу warning: невалидные аргументы передаются в функции each() и call_user_func_array()
Он и так разный в двух документах в одно документе function.php PHP: <?php namespace test /* ВНИМАНИЕ! Все функции должны быть уникальны! Если вы не умеете работать с фильтрами Wordpress и не понимаете их принципа, закройте этот файл и ничего не трогайте! */ /* Первым делом, подгружаем нащи переменные из определенного файла. Для этого указываем путь, к нашему файлу. */ $path = get_merchant_file(__FILE__); pn_template($path . '/dostup/index'); а в во 2 PHP: <?php namespace food /* ВНИМАНИЕ! Все функции должны быть уникальны! Если вы не умеете работать с фильтрами Wordpress и не понимаете их принципа, закройте этот файл и ничего не трогайте! */ /* Первым делом, подгружаем нащи переменные из определенного файла. Для этого указываем путь, к нашему файлу. */ $path = get_merchant_file(__FILE__); pn_template($path . '/dostup/index'); но тогда вылазит ошибка function.php если в двух файлах написать namespace пишет что warning: invalid argument supplied for for each () in settings.php И warning : call_user_func_array () expects parameter 1 to be a valid callback function 'exampl' not found or invalid function name in plugins. Php
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'example_exchangebox_merchant_list' not found or invalid function name in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-includes/plugin.php on line 235 Warning: Invalid argument supplied for foreach() in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/default/merchant/settings.php on line 22 settings.php В файле прописал только function.php написал namespace custom_functions; Без use settings.php PHP: <?php[/B][/B] [B][B]if( !defined( 'ABSPATH')){ exit(); } add_action('adminpage_title_pn_merchants', 'adminpage_title_pn_merchants'); function adminpage_title_pn_merchants(){ _e('Merchants settings','pn'); } add_action('adminpage_content_pn_merchants','def_adminpage_content_pn_merchants'); function def_adminpage_content_pn_merchants(){ global $wpdb; $list_merchants = apply_filters('exchangebox_merchant_list',array()); ?> <div class="premium_body"> <table class="premium_standart_table"> <?php foreach($list_merchants as $data){ $id = is_isset($data,'key'); $title = is_isset($data,'title'); pn_select($title, 'm_'.$id ,array('0'=>__('Disabled','pn'), '1'=>__('Enabled','pn')), is_enable_merchant($id),'merchant_change'); } ?> </table> </div> <script type="text/javascript"> $(function(){ $('.merchant_change select').live('change', function(){ var id = $(this).attr('name').replace('m_',''); var wid = $(this).val(); var thet = $(this); thet.attr('disabled',true); $('#premium_ajax').show(); var dataString='id=' + id + '&wid=' + wid; $.ajax({ type: "POST", url: "<?php the_link_toajax('merchant_settings_save'); ?>", dataType: 'json', data: dataString, success: function(ht) { $('#premium_ajax').hide(); thet.attr('disabled',false); } }); return false; }); }); </script> <?php } add_action('myaction_post_merchant_settings_save', 'pn_myaction_post_merchant_settings_save'); function pn_myaction_post_merchant_settings_save(){ global $wpdb; only_post(); if(current_user_can('administrator')){ $id = intval(is_param_post('id')); $wid = intval(is_param_post('wid')); $merchants = get_option('merchants'); if(!is_array($merchants)){ $merchants = array(); } $merchants[$id] = $wid; update_option('merchants', $merchants); } } PHP: <?php[/B][/B] [B][B] do { foreach ( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ){ $args[1] = $value; $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args'])); } } while ( next($wp_filter[$tag]) !== false ); array_pop( $wp_current_filter ); return $value; }
Как я понел PHP: Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'example_exchangebox_merchant_list' not found or invalid function name Из предупреждения видно, либо функция не определена либо она неверно задана. PHP: Warning: Invalid argument supplied for foreach() in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/default/merchant/settings.php on line 22 Такое предупреждение обычно возникает если передается пустой массив. Если в одном файле написать Namespace. Я так думаю это из за того что при написаний namespace функция example_exchangebox_merchant_list не может сработать из за этого. Как это можно исправить ?
Убирайте свой фильтр, проверяйте, будет ли работать код без него. Если работает, ищите ошибку в функции, которую цепляете на фильтр. Проверьте сам хук, которым пользуетесь. Может он принимает ограниченное количество подключаемых фильтров (и такое бывает). Юзайте IDE + wp расширение для нее - будет вам ошибки подсвечивать. Debug, говорят, хорошая штука.
Если подключать только один хук то все работает, а когда 2 подключаешь пишет ошибку PHP: Fatal error: Cannot redeclare example_exchangebox_merchant_xchanger_after() (previously declared in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/merchantscript/webmoey/function.php:146) in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/merchantscript/yamoney/function.php on line 154 Пишет такую ошибку так как вызывается 2 раза одна и та-же функция. --- Добавлено --- Если подключать только один хук то все работает, а когда 2 подключаешь пишет ошибку PHP: Fatal error: Cannot redeclare example_exchangebox_merchant_xchanger_after() (previously declared in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/merchantscript/webmoey/function.php:146) in /home/users/r/rovchinnikov94/domains/epicgamer.ru/wp-content/plugins/exchangebox/merchantscript/yamoney/function.php on line 154 Пишет такую ошибку так как вызывается 2 раза одна и та-же функция.
@roma28, все-таки переименуйте в одном месте функцию. И именно это новое имя укажите в качестве второго параметра функции add_filter.