使用PHP用标签包装一大块文本

时间:2009-09-30 18:35:58

标签: php wordpress preg-replace replace

我正在尝试允许用户(使用Wordpress)基于虚假标记插入jquery幻灯片库(http://www.queness.com/resources/html/slideshow/jquery-slideshow.html)。例如:

[slideshow]
    <img src="url" /><br />
    <img src="url" />
[!slideshow]

会产生类似于

的东西
<div id="gallery">
     <a href="#"><img src="url" /></a><br />
     <a href="#"><img src="url" /></a><br />
</div>

我认为我遇到问题的地方是jquery代码要求img用锚标记括起来。这就是我所拥有的,但多亏了Wordpress,代码上方或下方的任何内容都没有正确格式化。我已经使用了Wordpress格式化功能,但它在段落标记中包含了每一行,所以它只是打破了所有内容。

function make_slideshow($string) {

 $patterns[0] = '/(\[\[slideshow\]\])/';
 $patterns[1] = '/(\[\[\!slideshow\]\])/';
 $replacements[0] = '<div id="gallery">';
 $replacements[1] = '<div class="caption"><div class="content"></div></div></div>';
 $replace = preg_replace($patterns, $replacements, $string);

 $new_line = explode("\n", $replace);

 foreach($new_line as $key => $value) {
  if($value == "" || $value == " " || is_null($value)) {
   unset($new_line[$key]);
  }
 }

 $sorted_lines = array_values($new_line);

 foreach($sorted_lines as $key => $value){
  if( (stristr($value, 'href') === FALSE) && (stristr($value, 'img') !== FALSE) ){
   $sorted_lines[$key] = '<a href="#">' . $value . '</a>';
  }

  if( (stristr($value, 'show') === FALSE) && ($key === 1) ){
   $value = explode(" ", $value);
   $value[0] .= ' class="show"';
   $sorted_lines[$key] = implode(" ", $value);
  }

 }

返回$ sorted_lines;

};

通常我会在SO上找到所有其他答案,所以这只是我的第一个问题。我不知道其他人试图帮我解决这个问题是否太大了,但是我被卡住了所以我想我会试一试。

3 个答案:

答案 0 :(得分:2)

Wordpress在编辑器中自动添加p标签;你需要阻止WP这样做。根据我的经验,您要么删除编辑器中的所有换行符 - 将代码搞砸 - 或使用一些插件,以阻止WP添加格式:TinyMCE Advanced和/或Disable wpautop

答案 1 :(得分:0)

该代码中没有添加p标记的内容。如果这是问题所在,您需要找到将p添加为包装器的真实代码。

答案 2 :(得分:0)

什么WordPress函数调用你的例程?

我遇到了类似的问题:

<?php wp_list_pages( $args ); ?> 

正在添加<ul>链接到我想要压制的所有内容..

检查WP dev文档中的例程,该例程是例程中的一个层次结构,我打赌将有一个$arg值来抑制<p>标记。

http://codex.wordpress.org/Function_Reference