【问题标题】:Link in Wordpress shortcode adds an extra space at the endWordpress 短代码中的链接在末尾添加了一个额外的空格
【发布时间】:2014-05-05 22:32:24
【问题描述】:

我为我们可以在我们的 wordpress 网站上使用的工具提示创建了一个简码。短代码只是一个链接,当您将鼠标悬停在链接上时它会显示一个工具提示,尽管由于某种原因,在使用短代码时它会在链接末尾添加一个额外的空间,我不知道如何摆脱它。您可以在我们网站的页面上查看问题

http://stormable.com/hero-lore-tyrande-whisperwind/ 如果您查看内容中的任何链接,您会在链接后看到一个额外的空格。

add_shortcode('tyrande', 'tyrande');
function tyrande( $atts, $content = null ) {

// Hero Meta Data
$HeroID = 337;
$Hero = Tyrande;
$hero = tyrande;
$franchise = warcraft;


$heroSubname = get_post_meta( $HeroID, 'hero-sub-name', true);

$health_gain = get_post_meta( $HeroID, 'health-gain', true); 
$heroHealth = $health_gain*24+get_post_meta($HeroID, "health-lvl1", true);

$healthRegenGain = get_post_meta( $HeroID, 'health-regen-gain', true);
$heroHealthRegen = $healthRegenGain*24+get_post_meta($HeroID, "health-regen-lvl1", true); 

$manaGain = get_post_meta( $HeroID, 'mana-gain', true);
$heroMana = $manaGain*24+get_post_meta($HeroID, "mana-lvl1", true);

$manaRegenGain = get_post_meta( $HeroID, 'mana-regen-gain', true);
$heroManaRegen = $manaRegenGain*24+get_post_meta($HeroID, "mana-regen-lvl1", true); 

$attackSpeedGain = get_post_meta( $HeroID, 'attack-speed-gain', true);
$heroAttackSpeed = $attackSpeedGain*24+get_post_meta($HeroID, "attack-speed-lvl1", true);

$attackDamageGain = get_post_meta( $HeroID, 'attack-damage-gain', true);
$heroAttackDamage = $attackDamageGain*24+get_post_meta($HeroID, "attack-damage-lvl1", true);

extract( shortcode_atts( array( 'icon' => 'false'), $atts ) );

    if($icon == 'true'){
        $output = '<img class="hero-tt-icon" src="http://stormable.com/img/heroes/' . $hero . '/' . $hero . '-tt-icon.png" alt="' . $hero . ' Heroes of the Storm">';
    }

$output .= '
    <a class="tooltip" 
    href="http://stormable.com/heroes/' . $hero . '/">' . $Hero . '
        <span class="hero-tooltip">
            <span class="hero-tt-image"><img src="http://stormable.com/img/heroes/' . $hero . '/' . $hero . '-tt.png" alt="Heroes of the Storm ' . $Hero . '" /></span>
            <span class="hero-tt-info">
                <span class="hero-tt-name-info">
                    <span class="hero-tt-fran"><img src="http://stormable.com/img/icons/' . $franchise . '.png" alt="Heroes of the Storm ' . $franchise . ' Franchise" /></span>
                    <span class="hero-tt-name">' . $Hero . '</span>
                    <span class="hero-tt-subname">' . $heroSubname . '</span>
                </span>
                <span class="HeroStats">
                    <span class="HeroStats-title">Hero Stats at Level 25</span>
                    <span class="HeroStats-row">
                        <span class="HeroStat-left">Health</span>
                        <span class="HeroStat-right">' . $heroHealth . ' (' . $health_gain . ' / level)</span>
                    </span>
                    <span class="HeroStats-row">
                        <span class="HeroStat-left">Health Regen</span>
                        <span class="HeroStat-right">' . $heroHealthRegen . ' (' . $healthRegenGain . ' / level)</span>
                    </span>
                    <span class="HeroStats-row">
                        <span class="HeroStat-left">Mana</span>
                        <span class="HeroStat-right">' . $heroMana . ' (' . $manaGain . ' / level)</span>
                    </span>
                    <span class="HeroStats-row">
                        <span class="HeroStat-left">Mana Regen</span>
                        <span class="HeroStat-right">' . $heroManaRegen . ' (' . $manaRegenGain . ' / level)</span>
                    </span>
                    <span class="HeroStats-row">
                        <span class="HeroStat-left">Attack Speed</span>
                        <span class="HeroStat-right">' . $heroAttackSpeed . ' (' . $attackSpeedGain . ' / level)</span>
                    </span>
                    <span class="HeroStats-row">
                        <span class="HeroStat-left">Attack Damage</span>
                        <span class="HeroStat-right">' . $heroAttackDamage . ' (' . $attackDamageGain . ' / level)</span>
                    </span>
                </span>
            <span class="clear"></span>
        </span>
    </a>
';

return $output;

}

【问题讨论】:

    标签: php html wordpress shortcode


    【解决方案1】:

    我建议你使用 HEREDOC 在 PHP 中生成 HTML。

    为了快速解决添加使用 preg_replace 从输出中删除不需要的空间和新行。在您的 return $output 声明之前添加以下行。

    $output =  preg_replace('/^\s+|\n|\r|\s+$/m', '', $output);
    

    【讨论】:

    • 谢谢你,那行得通,你能向我解释它的作用以及为什么我有额外的线吗?我只是在学习 PHP,所以我真的不明白你给我的那一行。
    • 您在$output 变量中输入的所有内容都将被视为HTML 的新链接。
    • 我的 $output 中的“全部输入”是什么意思?我的输出中只显示了正常的 HTML,没有空格,那么链接末尾的额外空间究竟是从哪里来的?
    • 输入是指在新行中检查您的&lt;span&gt;。您也可以尝试将所有 html 放在一个大的一行中,看看会发生什么。