通过ShortCode属性传递标记

时间:2012-12-26 作者:orionrush

祝大家节日快乐。

希望有人能帮助我思考我遇到的问题。

我有一个插件Im building,允许用户从maps API中提取地址数据,即它验证地址,如果是业务,则提取标记图标、地址详细信息、web链接等,并构建一个短代码以在前端呈现地图。目前正在构建短代码,并通过tinyMCE模式窗口预览结果。

创建地图标记内容(标记信息气泡)是导致我变灰的原因。我希望用户能够添加或操作此块的内容,但最终的结果是相当多的标记。

到目前为止,我已尝试通过以下其中一个快捷码属性传递生成的标记:

[my_gmaps id="map" z="11" w="100%" h="300" scrollwheel="false" maptype="ROADMAP" address="Southampton, United Kingdom" marker="true" markerimage="http://anachronistic.local:9102/wp-content/plugins/_TomRush/inc/js/TinyMCE_additions/modal/../img/icons/music_folk_map.png" infowindow="<div class="marker inside"><img class="marker icon" alt="" src="http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png" /><strong>Southampton</strong><br>Southampton, UK<br><span class="marker extras">Some User Note</span></div><a class="marker jumplink" href="https://maps.google.com/maps/place?q=Southampton&amp;ftid=0x48738957be152909:0xa78c5a6a4cda71f0" target="_blank">external map</a>" ]
我发现(可能大家都不感到惊讶)可视化编辑器对短代码造成了严重破坏,尤其是infowindow atribute,添加了换行符并删除了<br> 启动器标签。我希望用户能够操纵标记内容,但这不是一个站得住脚的解决方案。

我如何传递这些信息而不被编辑弄乱?这是我需要学习瞬态API的地方,还是应该考虑另一种方法?

非常感谢您的经验。

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

对于那个短代码,您有相当多的标记。试图将所有这些都作为一个短代码传递将是一个麻烦。我把它拆开看看。

地图地址:英国南安普顿http://anachronistic.local:9102/wp-content/plugins/_TomRush/inc/js/TinyMCE_additions/modal/../img/icons/music_folk_map.png“信息窗口=”<div class="marker inside"><img class="marker icon" alt="" src="http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png" /><strong>Southampton</strong><br>Southampton, UK<br><span class="marker extras">Some User Note</span></div><a class="marker jumplink" href="https://maps.google.com/maps/place?q=Southampton&amp;ftid=0x48738957be152909:0xa78c5a6a4cda71f0" target="_blank">external map</a>“以下是我的方法。在您的功能中,应该可以动态生成#1,这样它就可以运行了。我不记得是什么了”z\' 如果是这样,我们将跳过它#4和#5可以是单个值,例如\'size\', 拿着这个“150x150“格式设计者很熟悉,但这并不重要。如果插件正在构建它,这可能没什么大不了的。如果人们希望在其中编写这些内容,那么会。您可以通过检查“%”来允许百分比大小,markerimage, 可以硬编码。您不希望用户选择该文件路径,对吗?因此我认为它不会改变。只需根据#8进行切换,marker. 任何其他静态项目也应硬编码。在我看来,大多数#10都可以硬编码。我认为没有必要尝试传递所有这些标记。事实上,唯一可更改的部分看起来可能是位置部分——对南汉普顿的引用,可以从#7中提取并填写。考虑到这一点,您的短代码如下所示:

[my_gmaps z="11" size="100%x300" scrollwheel="false" maptype="ROADMAP" address="Southampton, United Kingdom" marker="true" ]
也许你需要一种让用户编辑“一些用户注释”的方法。把它放在短代码“内容”中。

[my_gmaps z="11" size="100%x300" scrollwheel="false" maptype="ROADMAP" address="Southampton, United Kingdom" marker="true" ] User notes [/my_gmaps]
其余的可以在处理短代码时处理,或者在我看来是这样。如果您确实需要比我允许的更多的配置,请尝试传递关键元素。这0x48738957be152909:0xa78c5a6a4cda71f0, 而不是这个https://maps.google.com/maps/place?q=Southampton&amp;ftid=0x48738957be152909:0xa78c5a6a4cda71f0. 你知道其中的一部分会保持不变至少这一部分,https://maps.google.com/-- 没必要到处传。

基本上,这个想法是只传递更改的部分,去掉/硬编码其余部分,就像将参数传递给函数一样。您传递必要的部分,让函数构建/完成其余部分。您不会将所有内容都传递给函数,而让函数本质上只是串联参数,对吗?仅串联参数更容易。

我认为正确的方法不是在标记通过短代码时保护它,而是重新考虑短代码的工作方式,以便它一开始就不会有这个问题。

我很好奇,如果你的插件正在构建这个短代码,为什么还要构建这个短代码呢?为什么不用插件来构建工作地图标记呢?

SO网友:webaware

将HTML内容作为enclosing shortcode, 没有一个“属性”:

[my_gmaps ...] HTML here [/my_gmaps]
然后访问该块作为shortcode函数的第二个参数:

function my_shortcode($attrs, $content) {}

SO网友:orionrush

在我的情况下,我最后通牒得出的另一种可能性是md5 哈希到要通过短代码传递的内容,并让插件本身可以对其进行解码。我有一个gui,它可以从用户那里生成标记,这是我无法事先知道的。通过先对其进行哈希运算,我不会遇到破坏标记的WordPress文本条目字段。当然,你不会指望人们会这么做。为了方便起见,我提供了一个可供选择的参数,该参数允许轻松直接输入,但去掉了任何标记。

结束

相关推荐

call shortcode in javascript

加载DOM后,我想通过jquery显示一个短代码:这就是我如何称呼短代码:<?php echo do_shortcode(\'[plugin]\'); ?>现在,我的问题是如何在jquery函数中调用该短代码,因为我的网站是基于jquery/ajax调用的?谢谢