在短代码中链接的文本消失

时间:2013-12-04 13:14:56

标签: php wordpress-theming simplexml shortcode

在我的WordPress主题中使用短代码可以正常工作,直到我添加到某些单词或部分现有文本的超链接。链接时,文本的那一部分就会消失! 查看页面源代码,我只能看到空的div标签<div></div>

以下是目前在主题中使用的标签短代码生成器源的一部分:

    function cs_shortcode_pb_tabs($atts, $content="") {
    global $tab_counter;
    $tab_counter++;
    $content = str_replace("[cs_tab_item", "<cs_tab_item", $content);
    $content = str_replace("[/cs_tab_item]", "</cs_tab_item>", $content);
    $content = str_replace('tabs="tabs"]', ">", $content);
    $content = str_replace("<br />", "", $content);
    $content = str_replace("<p>", "", $content);
    $content = str_replace("</p>", "", $content);
    $content = "<tab>". $content . "</tab>";
    $html = "";
    $tabs_count = 0;
        $html .= '<ul class="nav nav-tabs">';
            $xmlObject = new SimpleXMLElement($content);
                foreach ( $xmlObject as $node ){
                    $tabs_count++;
                    if($tabs_count==1) $tab_active=" active"; else $tab_active="";
                    $html .= '<li class="'.$tab_active.'"><a data-toggle="tab" href="#'.str_replace(" ","",$node["title"].$tab_counter).'">'.$node["title"].'</a></li>';
                }
        $html .= '</ul>';
        $html .= '<div class="tab-content">';
        $tabs_count = 0;
            foreach ( $xmlObject as $node ){
                $tabs_count++;
                if($tabs_count==1) $tab_active=" active"; else $tab_active="";
                $html .= '<div class="tab-pane '.$tab_active.'" id="'.str_replace(" ","",$node["title"].$tab_counter).'">'.$node.'</div>';
            }
        $html .= '</div>';
        $html = '<div class="tabs-sectn">'.$html.'</div>';
    return do_shortcode($html).'<div class="clear"></div>';
}
add_shortcode( 'cs_tab', 'cs_shortcode_pb_tabs' );    

请注意.$node["title"].(第18行)工作正常 - 它显示标记名称,但另一方面.$node.(第26行)工作正常,直到链接被赋予某些部分文本。 使用的平台是WordPress 3.5。插件已禁用,没有CSS冲突,例如display:none

1 个答案:

答案 0 :(得分:0)

在第26行,您通过echo $node直接回显您的节点; (首先将它添加到一个字符串,但回显这个)。所以我希望你的节点包含一些数据,如:

<node>
<title>title</title>
Text content here echoed as node.
</node>

如果您添加此纯文本值的链接,此链接将被视为子节点(a),因此不会回显。请尝试阻止此尝试使用例如htmlspecialchars()解析您的链接。

示例:

<?php
$xmlstr = "<?xml version='1.0' standalone='yes'?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
   Content of a node. " . htmlspecialchars('<a href="http://php.net/">PHP</a>') . "
 </movie>
  <movie>
  <title>PHP: Behind the Parser</title>
   Content of a node 2 <a href='http://php.net/'>PHP</a>
 </movie>
</movies>";

$xmlObject = new SimpleXMLElement($xmlstr);

foreach ( $xmlObject as $node ){
  echo $node;
  echo $node->a;
}
正如您在第二个节点中看到的那样,链接成为子节点。您可以使用仅显示内容的$node->a来回显此信息(在您的情况下为链接文本)。