如何防止编码插件将Html输出到实体?

时间:2017-11-04 作者:Gooly

有人让我创建一个解决方案,在WP博客的标语中使用HTML锚()。E、 g.如:

Just another <a href="http://www.wordpress.org">WordPress</a> website
我提出了一个小插件,用户可以在标语中使用伪代码,该插件将伪代码转换为HTML锚。类似于

Just another [[http://www.wordpress.org]]WordPress[[/]] website
这很好,但是WordPress一直将HTML编码为实体,我不知道如何解决或防止这种情况。

我最好的猜测是,在我的插件之后会触发其他一些过滤器挂钩,也许我需要使用其他挂钩(?)我尝试了option\\u blogdescription和pre\\u option\\u blogdescription,两者都有相同的效果。然而,这只是一个猜测,即使这样,我也不知道该用什么钩子。

此外,我尝试了不同的方式来获取标语内容(以防止它已经作为实体到达),我尝试直接从hook参数接收它,使用get\\u选项获取,使用$wpdb->get\\u结果获取,但都使用相同的结果。

我尝试了几种方法来解码它,比如html\\u entity\\u decode()和wp\\u kses()。同样,所有的结果都是一样的。

但是,如果在我的插件出现后所有内容都被编码,那么我的任何努力都不会产生任何效果。

我有更多版本。最新的两个:

挂钩add\\u过滤器(\'option\\u blogdescription\',\'add\\u html\\u blog\\u description\');

功能1

function add_html_blog_description( $option_value ) {
    $url = \'http://www.wordpress.org\';
    $tagopen = \'[[\';
    $tagclose = \']]\';
    $option_value = str_replace($tagopen, \'<a href="\' . $url .\' ">\', $option_value);
    $option_value = str_replace($tagclose, \'</a>\', $option_value);
    return $option_value;
} 
功能2

function add_html_blog_description( $option_value ) {
    global $wpdb;
    $allowed_html = array(
        \'a\' => array(
            \'href\' => array(),
            \'title\' => array()
        )
    );
    $results = $wpdb->get_results( "SELECT `option_value` FROM `wdwp_options` WHERE `option_name` = \'blogdescription\'", ARRAY_A );
    $new_tagline = $results[0][\'option_value\'];
    $new_tagline =  html_entity_decode (wp_kses( $new_tagline, $allowed_html ) );
    return $new_tagline;
}

1 个回复
SO网友:Gooly

感谢雅各布·佩蒂在上面的评论。Jacob说标题用于标题元素和一些插件之后,我按照他的建议创建了一个新字段,因为他让我意识到头版的标语需要与其他使用描述的地方分开。

因此,我在WP设置中创建了一个自定义字段,一个函数(仅)允许HTML用于HTML锚定(所有其他代码一直解码为实体),以及一个函数来解析备选标语。

然后,需要在主题中实现新功能,所以我创建了一个子主题,在标题中使用新的替代标记行。php

所以,这并不像我所希望的那样是一个简单的插件,而是一个有着充分理由的儿童主题:)它就像一个魅力。谢谢雅各布!

结束