Я создаю плагин WordPress, чтобы вносить поля с форума XenForo и отображать их в WordPress.
У меня есть файл с именем xf_connector.php, который имеет следующий код:
<?php $startTime = microtime(true); $fileDir = 'C:\Domains\xxxx.com\httpdocs\forums'; require($fileDir . '/library/XenForo/Autoloader.php'); XenForo_Autoloader::getInstance()->setupAutoloader($fileDir . '/library'); XenForo_Application::initialize($fileDir . '/library', $fileDir); XenForo_Application::set('page_start_time', $startTime); XenForo_Session::startPublicSession(); $visitor = XenForo_Visitor::getInstance()->toArray(); ?>
А затем отдельный файл с именем xf.php, который имеет следующий код:
<body> <p>Hello <?php $xf_userId = $visitor['user_id']; $xf_username = $visitor['username']; echo "$xf_username" ?> welcome to this web page.</p> <p>Hello <?php $xf_userId = $visitor['user_id']; $xf_username = $visitor['username']; echo "$xf_username" ?> welcome to this web page.</p> </body>
Это отлично работает в пустом документе, но не работает в плагине WordPress. Мой файл плагина в настоящее время:
include_once( plugin_dir_path( __FILE__ ) . '/includes/xf_connector.php' ); function xenfield_shortcode() { ob_start(); ?> <div class="xenfield"> <?php $xf_userId = $visitor['user_id']; $xf_username = $visitor['username']; echo "$xf_username" ?> </div> <?php return ob_get_clean(); } add_shortcode( 'xenfield', 'xenfield_shortcode' );
Это ничего не отображает на странице WordPress, и если я смотрю на HTML, он просто показывает пустые теги <p>
.
Как я могу определить переменную и повторить ее в том же файле, чтобы она отображалась в WordPress?
$visitor
не определен в вашей функции xenfield_shortcode (). Думаю, это сработает:
include_once( plugin_dir_path( __FILE__ ) . '/includes/xf_connector.php' ); function xenfield_shortcode() { $visitor = XenForo_Visitor::getInstance()->toArray(); ob_start(); ?> <div class="xenfield"> <?php $xf_userId = $visitor['user_id']; $xf_username = $visitor['username']; echo "$xf_username" ?> </div> <?php return ob_get_clean(); } add_shortcode( 'xenfield', 'xenfield_shortcode' );
И пока мы на нем, это делает его более читаемым:
include_once( plugin_dir_path( __FILE__ ) . '/includes/xf_connector.php' ); function xenfield_shortcode() { $visitor = XenForo_Visitor::getInstance()->toArray(); $output = '<div class="xenfield">'; $output .= $visitor['username']; $output .= '</div>'; return $output; } add_shortcode( 'xenfield', 'xenfield_shortcode' );