- This topic is empty.
-
AuthorPosts
-
December 16, 2023 at 6:57 am #9911ahmedwpParticipant
I have two plugins in which I am initializing the sdk for data logging. The main concern is that whenever I put the **sdk **initialization code in second plugin, I get a following error:
PHP Fatal error: Cannot redeclare wpb_dynamic_init() (previously declared in C:\Users\WPB\Local Sites\wpb-sdk-site\app\public\wp-content\plugins\sdk-test-plugin\wpb-sdk\start.php:14) in C:\Users\WPB\Local Sites\wpb-sdk-site\app\public\wp-content\plugins\related-posts-thumbnails\wpb-sdk\start.php on line 18
The code I am using in the two plugins is:
Plugin One: sdk-test-pluginif ( ! function_exists( 'stp_wpb' ) ) { // Create a helper function for easy SDK access. function stp_wpb() { global $stp_wpb; if ( ! isset( $stp_wpb ) ) { // Include SDK. require_once dirname(__FILE__) . '/wpb-sdk/start.php'; $stp_wpb = wpb_dynamic_init( array( 'id' => 10, 'slug' => 'sdk-test-plugin', 'type' => 'plugin', 'public_key' => '7e240de74fb1ed08fa08d38063f6a691462a815', 'is_premium' => false, 'has_addons' => false, 'has_paid_plans' => false, 'menu' => array() ) ); } return $stp_wpb; } // Init . stp_wpb(); // Signal that SDK was initiated. do_action( 'stp_wpb_loaded' ); }
Second Plugin: related-posts-thumbnails
if (!function_exists('rpt_wpb')) { // Create a helper function for easy SDK access. function rpt_wpb() { global $rpt_wpb; if (!isset($rpt_wpb)) { // Include SDK. require_once dirname(__FILE__) . '/wpb-sdk/start.php'; $rpt_wpb = wpb_dynamic_init(array( 'id' => 7, 'slug' => 'related-posts-thumbnails', 'type' => 'plugin', 'public_key' => '7e240de74fb1ed08fa08d38063f6a691462a815', 'is_premium' => false, 'has_addons' => false, 'has_paid_plans' => false, 'menu' => array() )); } return $rpt_wpb; } // Init . rpt_wpb(); // Signal that SDK was initiated. do_action('rpt_wpb_loaded'); }
the start.php file (sdk file)
require_once dirname(__FILE__) . '/require.php'; function wpb_dynamic_init($module) { $wpb = Logger::instance($module['id'], $module['slug'], true); // $wpb->dynamic_init($module); return $wpb; }
the require.php file
require_once dirname( __FILE__ ) . '/config.php'; require_once WPB_SDK_DIR_INCLUDES . '/class-wpb-sdk-logger.php';
And the logger class (class-wpb-sdk-logger.php)
<?php /** * Logger responsible for gathering user logs and send. * In effort to provide better customer experience. * * @since 2.0.1 */ /** * Class responsible for logs data collection. */ class Logger { private static $_instances = array(); private $_module_id; private $_slug; /** * Class constructor. * * @return void */ private function __construct($module_id, $slug = false, $is_init = false) { if ( ! $is_init && ! is_numeric($module_id) && ! is_string($slug)) { return false; } $this->_module_id = $module_id; $this->_slug = $slug; $this->hooks(); } public static function instance($module_id, $slug = false, $is_init = false) { if (empty($module_id)) { return false; } if (!$is_init && true === $slug) { $is_init = true; } $key = 'm_' . $module_id; if (!isset(self::$_instances[$key])) { self::$_instances[$key] = new Logger($module_id, $slug, $is_init); } return self::$_instances[$key]; } }
Now let me know how to fix this issue as I have created the different instances but still I get issue of Cannot redeclare wpb_dynamic_init()
December 16, 2023 at 9:13 am #9912jean-luc-biniouParticipantI dont know how start.php is included, but probably it’s included more than once.
Quick fix, surrounding your
wpb_dynamic_init
withif (!function_exists('wpb_dynamic_init')) { // your function }
Better solution, find why start.php is included many times. You can use debug_backtrace in start.php to visualize the calls-stack
-
AuthorPosts
- You must be logged in to reply to this topic.