WordPress:从帖子中循环多个自定义字段

时间:2013-11-11 23:26:07

标签: php wordpress loops custom-fields

我最近来到一个使用自定义字段非常方便的项目。它适用于一家餐馆,如果我能做到这一点,我可以将这段代码用于网站的几个不同部分。

我正在使用Magic Fields 2插件,现在它很棒,除了显示我创建的字段。这是我迷失的地方。

例如,我有一个名为“Specials”的帖子,它有一个名为“菜单项”的分组,该组有两个名为“Name”和“Description”的字段。基本上名称用作菜单项名称,描述将是关于食物项目的一个小模糊。

这是我现在主题中的代码:

<div id="specials">
<?php 
$query2 = get_post(28);
$title = $query2->post_title;
$itemname= get_post_meta($post->ID, 'menu_item_name', true);
$description = get_post_meta($post->ID, 'menu_item_description', true);

?>
    <div id="specialstitle"><?php echo $title; ?></div>
    <div class="stripebackbrown">&nbsp;</div>
    <div id="specialslist">
<?php while ( have_posts() ) : the_post();

echo '<span>'.$itemname.'</span>';
echo '<p>'.$description.'</p>';

endwhile; 
wp_reset_query();
?>
    </div>


</div><!-- end specials-->

现在很有可能我在上面的代码中所做的完全错误,如果是,请告诉我。 我在上面的代码中遇到的问题是它正在拉动该帖子的第一组。

所以不是像:

番茄汤 描述文字

土耳其三明治 描述文字

希腊沙拉 描述文字

我得到了:

番茄汤 描述文字

番茄汤 描述文字

番茄汤 描述文字

因此,尽管上述代码在技术上有效,但它在同一时间无法正常工作。 任何帮助将不胜感激!

修改

我在这方面取得了更大的成功:

<div id="specials">

<?php 
$query2 = get_post(28);
$title = $query2->post_title;
?>
    <div id="specialstitle"><?php echo $title; ?></div>
    <div class="stripebackbrown">&nbsp;</div>
    <div id="specialslist">

<?php $itemname = get_post_meta ($post->ID, 'menu_item_name', false); ?>
<?php $description = get_post_meta ($post->ID, 'menu_item_description', false); ?>

<?php foreach ($itemname as $itemname){

echo '<span>' .$itemname. '</span>';

echo '<p>' .$description. '</p>';

} ?>
    </div>


</div><!-- end specials--> 

但是,我不确定如何将$ description添加到foreach循环中。所以现在它列出了菜单名称,但添加了描述应该在的“数组”。越来越近了!

3 个答案:

答案 0 :(得分:0)

我想你想这样做:

<div id="specials">
<?php 
$query2 = get_post(28);
$title = $query2->post_title;

?>
    <div id="specialstitle"><?php echo $title; ?></div>
    <div class="stripebackbrown">&nbsp;</div>
    <div id="specialslist">
<?php while ( have_posts() ) : the_post();

$itemname = get_post_meta(get_the_ID(), 'menu_item_name', true);
$description = get_post_meta(get_the_ID(), 'menu_item_description', true);

echo '<span>'.$itemname.'</span>';
echo '<p>'.$description.'</p>';

endwhile; 
wp_reset_query();
?>
    </div>

答案 1 :(得分:0)

找到解决方案:

<?php 
$query2 = get_post(28);
$title = $query2->post_title;
?>
    <div id="specialstitle"><?php echo $title; ?></div>
    <div class="stripebackbrown">&nbsp;</div>
    <div id="specialslist">

<?php $itemname = get_post_meta ($post->ID, 'menu_item_name', false); ?>
<?php $description = get_post_meta ($post->ID, 'menu_item_description', false); ?>

<?php foreach (array_combine($itemname, $description) as $itemname => $description){

echo '<span>' .$itemname. '</span>';

echo '<p>' .$description. '</p>';

} ?>
    </div>


</div><!-- end specials-->

它结合了$ itemname和$ description创建的两个数组,并且循环它们的次数与要循环的组一样多。

@speccode,非常感谢你试图帮助我,你对我的两行重新排序让我朝着正确的方向前进。

答案 2 :(得分:0)

我知道这已经老了,但我遇到了同样的问题,所以我试图改进@speccode的答案,但它似乎有效:

<?php $itemnames = get_post_meta($post->ID, 'itemnames', false); ?>
<?php $descriptions = get_post_meta($post->ID, 'descriptions', false); ?>

<?php foreach (array_combine($itemnames, $descriptions) as $itemname => $description)
   {
     echo '<img src="'.$itemname.'"/>';
     echo '<p>' .$description. '</p>';
  } 
?>

我还尝试在(见下文)中实现结构化,但我无法保证标记的有效性...... 任何人

<?php $itemnames = get_post_meta($post->ID, 'itemnames', false); ?>
<?php $descriptions = get_post_meta($post->ID, 'descriptions', false); ?>

<?php foreach (array_combine($itemnames, $descriptions) as $itemname => $description)
   {
     echo '<div class="nameAndDescription"><img src="'.$itemname.'"/>';
     echo '<p>' .$description. '</p></div>';
  } 
?>