为什么我的代码输出包含额外的<br>和& lt; p>当代码中没有显示'


Why does the output of my code contain additional <br> and <p> tags when it's not indicated in the code?

我是PHP编码新手。我对这个有点困惑。我正在为我的wordpress网站创建一些短代码。基本上,我已经创建了一些工作良好的短代码,但是当我开始编码这一个时,输出包含不必要的
and <</p> p>标签。

这是我的一部分代码:

function searchbox ($atts) {
global $wpdb;
$link = get_bloginfo('url').'/search/';
$out .= '<form name="search" action="'.$link.'" method="get">';
$out .= '<label>Developer:</label>';
$out .= '<select name="dev">';
$developers = $wpdb->get_col($wpdb->prepare("
        SELECT DISTINCT meta_value 
        FROM $wpdb->postmeta 
        WHERE meta_key = %s 
        ORDER BY meta_value ASC", 'developer') );
 if ($developers) {
   foreach ($developers as $developer) {
     $out .= "<option value='"" . $developer . "'">" . $developer . "</option>";
   }
 }
$out .= '</select>';
$out .= '<label>Location</label><select name="loc">';
$locs = $wpdb->get_col($wpdb->prepare("
        SELECT DISTINCT meta_value 
        FROM $wpdb->postmeta 
        WHERE meta_key = %s 
        ORDER BY meta_value ASC", 'loc') );
 if ($locs) {
   foreach ($locs as $loc) {
     $out .= "<option value='"" . $loc . "'">" . $loc . "</option>";
   }
 }
$out .= '</select>';
$out .= 'Price Range: <input type="text" size="4" name="pmin"> '
        +'to <input type="text" size="4" name="pmax">';  
$out .=  '<input type="submit" value="search" />';
$out .= '</form>';
return $out;
}
add_shortcode ('searchbox', 'searchbox');

则在WP编辑器中添加短代码[searchbox]。输出的HTML代码为:

<form name="search" action="http://www.mycondophilippines.com/search/" method="get">
    <label>Developer:</label><br /> 
    <select name="dev"> 
        <option value="Avida Land">Avida Land</option> 
        <option value="DMCI Homes">DMCI Homes</option> 
        <option value="SMDC">SMDC</option> 
    </select> 
    <p><label>Location</label><br /> 
    <select name="loc"> 
        <option value="Makati">Makati</option> 
        <option value="Mandaluyong">Mandaluyong</option> 
        <option value="Manila">Manila</option> 
    </select> 
    <p>Price Range:<br /> 
    <input type="text" size="4" name="pmin"> to<br /> 
    <input type="text" size="4" name="pmax"> 
    <input type="submit" value="search" />
</form> 

注意添加的br和p标记。我观察到,当在html代码上添加文本时,它会自动添加<br><p>标记。我对这一个感到困惑,因为我所做的短代码函数是在一个php文件中,而其他的工作很好与html代码上的文本。就是这个函数添加了标签。

我使用Dreamweaver CS5编码。但我试着用notepad2编辑,但结果相同。

WordPress在页面/文章编辑器中添加了包装<p><br />。我猜这就是你输入短代码的地方。

更新

OP找到了解决方案- http://www.simonbattersby.com/blog/2009/08/stop-wordpress-adding-br-tags/

您可以简单地在主题文件(function.php)中添加一个函数。这样,当你升级WP源代码时,你就不必考虑重新更改该功能。

使用WP法典(http://codex.wordpress.org/Function_Reference/wpautop)

添加:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

在将生成的html发送到客户端(htmlpurifier?)之前,必须通过美化函数传递生成的html。输出有换行符,而您的代码根本没有插入任何换行符,这意味着有东西修改了您的输出。

您可能还想查找HEREDOCs,它允许您创建多行字符串,而无需重复字符串连接或引号转义的任何麻烦。