使用WordPress页面编辑器将Google地图放置到WordPress页面中

时间:2014-03-31 作者:user3481850

我正在为一家餐厅创建一个网站,我有自己想要的工作代码。显示地图。在地图下面,我有一个有两个输入的表单。第一个输入允许用户指定他们想要的方向,第二个输入已经填写完毕,设置为餐厅的位置。提交时,方向显示在同一页上。我的问题是,代码在简单的html页面上运行良好,但当我尝试使用编辑页面中的文本选项卡,使用WordPress管理面板将代码添加到页面时,会显示地图,但表单似乎不起作用。

这是工作代码

<div id="map-content">
<iframe
  width="600"
  height="450"
  frameborder="0" style="border:0"
  src="https://www.google.com/maps/embed/v1/place?key=AIzaSyBtSeHNLckz6YWwfFcyx4CASiJUN6ohbCk&q=McDonald\'s,Headford,Road,Drive, Thru">    
</iframe>
</div>


                <div id="map"></div>

<div id="get-directions">
            <h2>Get directions:</h2>
              <div id="map_directions_controls">
                <div class="from">
                    <label class="address">From: </label><input id="fromAddress" name="from" value="" class="textbox txtMapDirections" type="text">
                </div>
                    <br>
                <div class="to">
                    <label class="address">To:  &nbsp;  &nbsp;  &nbsp;</label><input id="toAddress" name="to" value="" class="textbox txtMapDirections" type="text">
                </div>
                    <br>
                    <input name="submit" value="Get Directions" onclick="calcRoute(); return false" class="button button_directions" type="submit">
                </div>
                <div id="map_directions"></div>

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script>
    <script type="text/javascript">    
        var map;
        var directionDisplay;
        var directionsService;

        window.onload = function () {
            init();
        }

        function init() {
            var latlng = new google.maps.LatLng(53.279940, -9.049890);
            var myOptions = {
                zoom: 16,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                streetViewControl: true,
                mapTypeControl: true,
                mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }
            };
            map = new google.maps.Map(document.getElementById("map"), myOptions);


            var maptextparam = "<strong>Name</strong><br />Address1, <br />Address2, <br />Address3<br /><br />Tel: 12345678<br />Email: [email protected]";
            var maptext = "<div class=\'map_marker\'><strong>Name</strong><br />Address1, <br />Address2, <br />Address3<br /><br />Tel: 12345678<br />Email: [email protected]</div>";

            if (maptextparam != \'\') {
                var infowindow = new google.maps.InfoWindow({ content: maptext });
                var marker = new google.maps.Marker({ position: latlng, map: map, title: maptextparam });
            }

            var directions = "true";
            if (directions == "true") {
                directionsDisplay = new google.maps.DirectionsRenderer();
                directionsService = new google.maps.DirectionsService();
                directionsDisplay.setMap(map);
                directionsDisplay.setPanel(document.getElementById("map_directions"));

                document.getElementById(\'toAddress\').value = "McDonald\'s Headford Road Drive Thru";
            } else {
                document.getElementById(\'map_directions_controls\').style.display = \'none\';
                document.getElementById(\'map_directions\').style.display = \'none\';
            }
        }


        function calcRoute() {
            var start = document.getElementById("fromAddress").value;
            var end = document.getElementById("toAddress").value;

            if (end == "McDonald\'s Headford Road Drive Thru") {
                end = "53.279940, -9.049890";
            }

            var request = {
                origin: start,
                destination: end,
                travelMode: google.maps.DirectionsTravelMode.DRIVING
            };

            directionsService.route(request, function (response, status) {
                if (status == google.maps.DirectionsStatus.OK) {
                    directionsDisplay.setDirections(response);
                } else {
                    alert("Please enter a valid input in the \'From\' box");
                };
            });
        }

    </script>          

</div>

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

你必须

1) 去掉脚本和iFrame中的所有空格,这样WordPress就不会添加<p> 标签,然后JS和iframe链接将起作用,或者

2) 禁用autop 在所有帖子/页面的帖子编辑器中(请参见http://codex.wordpress.org/Function_Reference/wpautop ) 因此WP不会添加段落分隔符,或者

3) 执行以下操作autop 全局启用,但允许在单个帖子和页面中使用和标记禁用它。

Add the function below to functions.php and use the two tags

<!-- noformat on --><!-- noformat off -->

in your page/post editor, i.e.

    text will be rendered *with* autop

    <!-- noformat on -->

    text will be rendered *without* autop

    <!-- noformat off -->

    text will be rendered *with* autop
如上所述,两个格式标记之外的内容将启用自动转换。

Add to functions.php of the theme:

// <!-- noformat on --> and <!-- noformat off --> functions

function newautop($text)
{
    $newtext = "";
    $pos = 0;

    $tags = array(\'<!-- noformat on -->\', \'<!-- noformat off -->\');
    $status = 0;

    while (!(($newpos = strpos($text, $tags[$status], $pos)) === FALSE))
    {
        $sub = substr($text, $pos, $newpos-$pos);

        if ($status)
            $newtext .= $sub;
        else
            $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

        $pos = $newpos+strlen($tags[$status]);

        $status = $status?0:1;
    }

    $sub = substr($text, $pos, strlen($text)-$pos);

    if ($status)
        $newtext .= $sub;
    else
        $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

    //To remove the tags
    $newtext = str_replace($tags[0], "", $newtext);
    $newtext = str_replace($tags[1], "", $newtext);

    return $newtext;
}

function newtexturize($text)
{
    return $text;   
}

function new_convert_chars($text)
{
    return $text;   
}

remove_filter(\'the_content\', \'wpautop\');
add_filter(\'the_content\', \'newautop\');

remove_filter(\'the_content\', \'wptexturize\');
add_filter(\'the_content\', \'newtexturize\');

remove_filter(\'the_content\', \'convert_chars\');
add_filter(\'the_content\', \'new_convert_chars\');

SO网友:user3481850

我的代码在@ialocin运行

如果你想在wordpress网站上使用我的代码制作地图,你必须做6件事。

1——遵循songdogtechs的第三条建议

2--将我的代码粘贴到wordpress的页面编辑器中,使用文本选项卡,而不是视觉选项卡

3--在我的代码周围没有格式标记<!-- noformat on --> \'ALL MY CODE IN BETWEEN\' <!-- noformat off -->

4--将gprs坐标更改为您的目的地位置,右键单击谷歌地图上的某个位置或区域。选择此处的内容?抓取并交换我的坐标,只有两个可以改变。

5——将“我的代码”中存在的两个麦当劳海德福德公路直通车更改为您在谷歌地图上的位置的确切名称

6--获取google maps api密钥https://developers.google.com/maps/documentation/embed/guide#api_key 并将我的代码中的密钥替换为您的

结束

相关推荐

WordPress后台:如何在Pages-->All Pages下隐藏某些特定页面

我有一些带有短代码的页面,我不想让我的客户看到带有短代码的页面。是否有方法将这些页面隐藏在“页面-->所有页面”下,但应显示在“菜单”下。有没有插件可以实现这一点?我已经找过了,但没有找到。