将 ACF 地图数据传递给 Timber 主题中的树枝循环
Passing ACF map data to a twig loop in Timber theme
我继承了一个使用自定义 Timber 主题的站点,并且对如何将常规 PHP 中的解决方案转换为 Twig 语法感到非常困惑。我需要使用自定义 post 类型(场地)在 Google 地图上显示多个标记。我有一个工作查询来收集所有已发布的场地:
$venue_query = array(
'post_type' => 'venue',
'posts_per_page' => -1,
'post_status' => 'publish'
);
$context['venue'] = Timber::get_posts( $venue_query );
Timber::render( 'beesknees-participating-venues.twig', $context );
我正在尝试遵循此 ACF forum thread 以便遍历所有场所并在 google 地图上为每个场所创建一个标记。因为我不能在树枝模板上这样做:
<?php
$location = get_field('c_gmaps');
$gtemp = explode ('|', $location);
$coord = explode (',', $gtemp[1]);
$lat = (float) $coord[0];
$lng = (float) $coord[1];
?>
<div class="marker" data-lat="<?php echo $lat; ?>" data-lng="<?php echo $lng; ?>">
我试过在我的 page.php 文件中编写函数:
function render_markers(&$location) {
var_dump($location);
$gtemp = explode (',', implode($location));
$coord = explode (',', implode($gtemp));
echo '<div class="marker" data-lat="' . $location[lat] .'" data-lng="'. $location[lng] .'">
<p class="address">' . $gtemp[0] . '<a href="' . the_permalink() .'" rel="bookmark" title="Permanent Link to '. the_title_attribute() .'">' . the_title() . '</a></p>
</div>';
}
然后在我的树枝模板中使用它:
{% for item in venue %}
{% set location = item.get_field('google_map') %}
{{ function('render_markers', 'location') }}
{% endfor %}
产生重复错误:
Warning: Parameter 1 to render_markers() expected to be a reference,
value given in
/app/public/wp-content/plugins/timber-library/lib/Twig.php on line 310
string(8) "location" Warning: implode(): Argument must be an array in
/app/public/wp-content/themes/my_theme/page.php on line 122 Warning:
Illegal string offset 'lat' in
/app/public/wp-content/themes/my_theme/page.php on line 124
我想我很接近,但我不确定。我在 Twig 或 Timber 文档中找不到足够具体的示例。任何帮助将不胜感激。
快速修复
这感觉很老套,但这(可能)是一个快速解决方案
这条线...
{{ function('render_markers', 'location') }}
... 只是将字符串 "location" 发送到函数。您需要刚刚创建的 Twig 变量。尝试将其更改为...
{{ function('render_markers', location) }}
大修复
这是更"elegant solution"
<?php
class Venue extends Timber\Post {
function coordinates() {
$location = $this->get_field('c_gmaps');
$gtemp = explode ('|', $location);
$coord = explode (',', $gtemp[1]);
return $coord;
}
function latitude() {
$coord = this->coordinates();
$lat = (float) $coord[0];
return $lat;
}
function longitude() {
$coord = this->coordinates();
$lng = (float) $coord[1];
return $lng;
}
}
/* at the bottom of the PHP file you posted: */
$context['venue'] = Timber::get_posts( $venue_query, 'Venue' );
Timber::render( 'beesknees-participating-venues.twig', $context );
在你的 Twig 文件中...
{% for item in venue %}
<div class="marker" data-lat="{{ item.latitude }}" data-lng="{{ item.longitude }}">
<p class="address">{{ item.latitude }}<a href="{{ item.link }}" rel="bookmark" title="Permanent Link to {{ item.title | escape }}">{{ item.title }}</a></p>
</div>
{% endfor %}
我继承了一个使用自定义 Timber 主题的站点,并且对如何将常规 PHP 中的解决方案转换为 Twig 语法感到非常困惑。我需要使用自定义 post 类型(场地)在 Google 地图上显示多个标记。我有一个工作查询来收集所有已发布的场地:
$venue_query = array(
'post_type' => 'venue',
'posts_per_page' => -1,
'post_status' => 'publish'
);
$context['venue'] = Timber::get_posts( $venue_query );
Timber::render( 'beesknees-participating-venues.twig', $context );
我正在尝试遵循此 ACF forum thread 以便遍历所有场所并在 google 地图上为每个场所创建一个标记。因为我不能在树枝模板上这样做:
<?php
$location = get_field('c_gmaps');
$gtemp = explode ('|', $location);
$coord = explode (',', $gtemp[1]);
$lat = (float) $coord[0];
$lng = (float) $coord[1];
?>
<div class="marker" data-lat="<?php echo $lat; ?>" data-lng="<?php echo $lng; ?>">
我试过在我的 page.php 文件中编写函数:
function render_markers(&$location) {
var_dump($location);
$gtemp = explode (',', implode($location));
$coord = explode (',', implode($gtemp));
echo '<div class="marker" data-lat="' . $location[lat] .'" data-lng="'. $location[lng] .'">
<p class="address">' . $gtemp[0] . '<a href="' . the_permalink() .'" rel="bookmark" title="Permanent Link to '. the_title_attribute() .'">' . the_title() . '</a></p>
</div>';
}
然后在我的树枝模板中使用它:
{% for item in venue %}
{% set location = item.get_field('google_map') %}
{{ function('render_markers', 'location') }}
{% endfor %}
产生重复错误:
Warning: Parameter 1 to render_markers() expected to be a reference, value given in /app/public/wp-content/plugins/timber-library/lib/Twig.php on line 310 string(8) "location" Warning: implode(): Argument must be an array in /app/public/wp-content/themes/my_theme/page.php on line 122 Warning: Illegal string offset 'lat' in /app/public/wp-content/themes/my_theme/page.php on line 124
我想我很接近,但我不确定。我在 Twig 或 Timber 文档中找不到足够具体的示例。任何帮助将不胜感激。
快速修复
这感觉很老套,但这(可能)是一个快速解决方案
这条线...
{{ function('render_markers', 'location') }}
... 只是将字符串 "location" 发送到函数。您需要刚刚创建的 Twig 变量。尝试将其更改为...
{{ function('render_markers', location) }}
大修复
这是更"elegant solution"
<?php
class Venue extends Timber\Post {
function coordinates() {
$location = $this->get_field('c_gmaps');
$gtemp = explode ('|', $location);
$coord = explode (',', $gtemp[1]);
return $coord;
}
function latitude() {
$coord = this->coordinates();
$lat = (float) $coord[0];
return $lat;
}
function longitude() {
$coord = this->coordinates();
$lng = (float) $coord[1];
return $lng;
}
}
/* at the bottom of the PHP file you posted: */
$context['venue'] = Timber::get_posts( $venue_query, 'Venue' );
Timber::render( 'beesknees-participating-venues.twig', $context );
在你的 Twig 文件中...
{% for item in venue %}
<div class="marker" data-lat="{{ item.latitude }}" data-lng="{{ item.longitude }}">
<p class="address">{{ item.latitude }}<a href="{{ item.link }}" rel="bookmark" title="Permanent Link to {{ item.title | escape }}">{{ item.title }}</a></p>
</div>
{% endfor %}