2017-02-21 3 views
1

Ich erstelle ein WordPress-Plugin, um Felder aus einem XenForo-Forum einzubinden und in WordPress anzuzeigen.Variable und Echo in Funktion definieren

Ich habe eine Datei mit dem Namen xf_connector.php, die den folgenden Code hat:

<?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(); 
?> 

Und dann eine separate Datei namens xf.php, die den folgenden Code hat:

<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> 

Dies funktioniert gut in einem leeren Dokument, funktioniert aber nicht im WordPress-Plugin. Meine Plugin-Datei ist zur Zeit:

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'); 

Dies zeigt nichts auf der Wordpress-Seite und wenn ich im HTML aussehen es zeigt nur leere <p> Tags.

Wie kann ich eine Variable definieren und sie in der gleichen Datei echo, so dass es in WordPress angezeigt wird?

+0

Bitte nicht das Tool Code-Schnipsel missbrauchen. Es ist nur für HTML/CSS/JS *. –

+0

Sorry, ich konnte keine Möglichkeit finden, PHP als Block und nicht als einfachen Text einzugeben. Meine Entschuldigung –

Antwort

2

$visitor ist nicht in Ihrer Funktion xenfield_shortcode() definiert. Ich denke, dass dies funktionieren wird:

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'); 

Und wenn wir schon dabei sind, das macht es viel besser lesbar:

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'); 
+0

Ah, ich wusste nicht, dass du die Variable auch definieren musstest, ich dachte mein $ xf_userId = $ Besucher würde das machen. Es funktioniert trotzdem, Danke für Ihre Hilfe! –

+0

Das definiert '$ xf_userId', basierend auf dem Inhalt von' $ visitor', aber da '$ visitor' nicht definiert ist, hat es nicht wirklich etwas bewirkt. –