WordPress教程:WordPress无插件实现自动文章目录方法(自定义CSS样式)

WordPress教程:WordPress无插件实现自动文章目录方法(自定义CSS样式)

我们是不是看到不少文章比较长有H2 H3等小标题的文章都用内容文章目录?这个当然是可以用插件实现。比如 Easy Table of Contents 插件是可以实现的,这里我们不用插件,直接用代码也可以实现,看看方法记录下来。

代码实现方法。

<span class="com">//文章目录无插件实现</span>
<span class="kwd">function</span><span class="pln"> article_index</span><span class="pun">(</span><span class="pln">$content</span><span class="pun">)</span> <span class="pun">{</span><span class="pln">
$matches </span><span class="pun">=</span><span class="pln"> array</span><span class="pun">();</span><span class="pln">
$ul_li </span><span class="pun">=</span> <span class="str">''</span><span class="pun">;</span><span class="pln">
$r </span><span class="pun">=</span> <span class="str">'/<h([2-6]).*?\>(.*?)<\/h[2-6]>/is'</span><span class="pun">;</span>
<span class="kwd">if</span><span class="pun">(</span><span class="pln">is_single</span><span class="pun">()</span> <span class="pun">&&</span><span class="pln"> preg_match_all</span><span class="pun">(</span><span class="pln">$r</span><span class="pun">,</span><span class="pln"> $content</span><span class="pun">,</span><span class="pln"> $matches</span><span class="pun">))</span> <span class="pun">{</span>
<span class="kwd">foreach</span><span class="pun">(</span><span class="pln">$matches</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span> <span class="kwd">as</span><span class="pln"> $key </span><span class="pun">=></span><span class="pln"> $value</span><span class="pun">)</span> <span class="pun">{</span><span class="pln">
$title </span><span class="pun">=</span><span class="pln"> trim</span><span class="pun">(</span><span class="pln">strip_tags</span><span class="pun">(</span><span class="pln">$matches</span><span class="pun">[</span><span class="lit">2</span><span class="pun">][</span><span class="pln">$key</span><span class="pun">]));</span><span class="pln">
$content </span><span class="pun">=</span><span class="pln"> str_replace</span><span class="pun">(</span><span class="pln">$matches</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="pln">$key</span><span class="pun">],</span> <span class="str">'<h'</span> <span class="pun">.</span><span class="pln"> $value </span><span class="pun">.</span> <span class="str">' id="title-'</span> <span class="pun">.</span><span class="pln"> $key </span><span class="pun">.</span> <span class="str">'">'</span><span class="pun">.</span><span class="pln">$title</span><span class="pun">.</span><span class="str">'</h2>'</span><span class="pun">,</span><span class="pln"> $content</span><span class="pun">);</span><span class="pln">
$ul_li </span><span class="pun">.=</span> <span class="str">'<li><a href="'</span><span class="pun">.</span><span class="pln">$key</span><span class="pun">.</span><span class="str">'" title="'</span><span class="pun">.</span><span class="pln">$title</span><span class="pun">.</span><span class="str">'">'</span><span class="pun">.</span><span class="pln">$title</span><span class="pun">.</span><span class="str">"</a></li>\n"</span><span class="pun">;</span>
<span class="pun">}</span><span class="pln">
$content </span><span class="pun">=</span> <span class="str">"\n<div id=\"article-index\">
<strong>文章目录</strong>
<ul id=\"index-ul\">\n"</span> <span class="pun">.</span><span class="pln"> $ul_li </span><span class="pun">.</span> <span class="str">"</ul>
</div>\n"</span> <span class="pun">.</span><span class="pln"> $content</span><span class="pun">;</span>
<span class="pun">}</span>
<span class="kwd">return</span><span class="pln"> $content</span><span class="pun">;</span>
<span class="pun">}</span><span class="pln">
add_filter</span><span class="pun">(</span> <span class="str">'the_content'</span><span class="pun">,</span> <span class="str">'article_index'</span> <span class="pun">);</span>
//文章目录无插件实现 function article_index($content) { $matches = array(); $ul_li = ''; $r = '/<h([2-6]).*?\>(.*?)<\/h[2-6]>/is'; if(is_single() && preg_match_all($r, $content, $matches)) { foreach($matches[1] as $key => $value) { $title = trim(strip_tags($matches[2][$key])); $content = str_replace($matches[0][$key], '<h' . $value . ' id="title-' . $key . '">'.$title.'</h2>', $content); $ul_li .= '<li><a href="'.$key.'" title="'.$title.'">'.$title."</a></li>\n"; } $content = "\n<div id=\"article-index\"> <strong>文章目录</strong> <ul id=\"index-ul\">\n" . $ul_li . "</ul> </div>\n" . $content; } return $content; } add_filter( 'the_content', 'article_index' );

添加到 Functions.php 里。

<span class="com">#article-index {</span>
<span class="pun">-</span><span class="pln">moz</span><span class="pun">-</span><span class="pln">border</span><span class="pun">-</span><span class="pln">radius</span><span class="pun">:</span> <span class="lit">6px</span> <span class="lit">6px</span> <span class="lit">6px</span> <span class="lit">6px</span><span class="pun">;</span><span class="pln">
border</span><span class="pun">:</span> <span class="lit">1px</span><span class="pln"> solid </span><span class="com">#DEDFE1;</span>
<span class="kwd">float</span><span class="pun">:</span><span class="pln"> right</span><span class="pun">;</span><span class="pln">
margin</span><span class="pun">:</span> <span class="lit">0</span> <span class="lit">0</span> <span class="lit">15px</span> <span class="lit">15px</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">:</span> <span class="lit">0</span> <span class="lit">6px</span><span class="pun">;</span><span class="pln">
max</span><span class="pun">-</span><span class="pln">width</span><span class="pun">:</span> <span class="lit">200px</span><span class="pun">;</span><span class="pln">
line</span><span class="pun">-</span><span class="pln">height</span><span class="pun">:</span> <span class="lit">23px</span><span class="pun">;</span>
<span class="pun">}</span>
<span class="com">#article-index strong {</span><span class="pln">
border</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span> <span class="lit">1px</span><span class="pln"> dashed </span><span class="com">#DDDDDD;</span><span class="pln">
display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln">
line</span><span class="pun">-</span><span class="pln">height</span><span class="pun">:</span> <span class="lit">30px</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">:</span> <span class="lit">0</span> <span class="lit">4px</span><span class="pun">;</span>
<span class="pun">}</span>
<span class="com">#index-ul {</span><span class="pln">
margin</span><span class="pun">:</span> <span class="lit">0</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">-</span><span class="pln">bottom</span><span class="pun">:</span> <span class="lit">10px</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span> <span class="lit">0px</span><span class="pun">;</span>
<span class="pun">}</span>
<span class="com">#index-ul li {</span><span class="pln">
background</span><span class="pun">:</span><span class="pln"> none repeat scroll </span><span class="lit">0</span> <span class="lit">0</span><span class="pln"> transparent</span><span class="pun">;</span><span class="pln">
list</span><span class="pun">-</span><span class="pln">style</span><span class="pun">-</span><span class="pln">type</span><span class="pun">:</span><span class="pln"> disc</span><span class="pun">;</span><span class="pln">
padding</span><span class="pun">:</span> <span class="lit">0</span><span class="pun">;</span><span class="pln">
margin</span><span class="pun">-</span><span class="pln">left</span><span class="pun">:</span> <span class="lit">20px</span><span class="pun">;</span>
<span class="pun">}</span>
#article-index { -moz-border-radius: 6px 6px 6px 6px; border: 1px solid #DEDFE1; float: right; margin: 0 0 15px 15px; padding: 0 6px; max-width: 200px; line-height: 23px; } #article-index strong { border-bottom: 1px dashed #DDDDDD; display: block; line-height: 30px; padding: 0 4px; } #index-ul { margin: 0; padding-bottom: 10px; padding-left: 0px; } #index-ul li { background: none repeat scroll 0 0 transparent; list-style-type: disc; padding: 0; margin-left: 20px; }
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...