在我的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
答案 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
来回显此信息(在您的情况下为链接文本)。