【问题标题】:WordPress: Looping multiple custom fields from a postWordPress:从帖子中循环多个自定义字段
【发布时间】:2013-11-23 22:38:09
【问题描述】:

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

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

例如,我有一个名为“Specials”的帖子,其中有一个名为“Menu Item”的分组,该组有两个字段,分别名为“Name”和“Description”。基本上 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 循环中。所以现在它列出了菜单名称,但在描述的地方添加了“Array”。越来越近了!

【问题讨论】:

    标签: php wordpress loops custom-fields


    【解决方案1】:

    我认为你想这样做:

    <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>
    

    【讨论】:

    • 这确实阻止了重复问题,但是,现在有了这个答案,它只列出了第一个分组的名称和描述,并没有列出后面也附加到该帖子的那些。跨度>
    • 那么你想告诉我$itemname 是数组吗?
    • 我不确定。基本上我已经为这篇文章分组了自定义字段,然后可以重复该组自定义字段以添加不同的项目。所以会有多个 $itemname 和 $description 的实例。我不知道这是否属于数组。很有可能。希望我能正确解释这一点,但我想为出现在特定帖子上的每个实例循环 $itemname 和 $description 部分。例如,特价菜总共有 5 个菜单项。每个都有名称和描述。
    • 试试这个var_dump(get_post_meta(get_the_ID(), 'menu_item_name', true));,然后这个:var_dump(get_post_meta(get_the_ID(), 'menu_item_name'));。让我知道结果。
    • 离开你的,在做 var_dump(get_post_meta(get_the_ID(), 'menu_item_name', true));我得到字符串'番茄汤'(长度= 11)项目字符串''(长度= 0)字符串''(长度= 0)字符串''(长度= 0)的描述与var_dump(get_post_meta(get_the_ID(),'menu_item_name '));我得到了数组 (size=3) 0 => string 'Tomato Soup' (length=11) 1 => string 'Turkey Sandwich' (length=15) 2 => string 'Greek Salad' (length=11) description of item数组 (size=0) 空数组 (size=0) 空数组 (size=0) 空
    【解决方案2】:

    找到解决办法:

    <?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,非常感谢您对我的帮助,您对我的两行的重新排序让我朝着正确的方向前进。

    【讨论】:

    • 这是我的下一个建议,但我去睡觉了。很好,你自己想出来了。
    • 谢谢!我遇到了一个问题,也许你可以帮助我。我在我制作的自定义页面模板上尝试了上面的代码。现在它通过 ID 拉起帖子,就像帖子的标题正确显示一样。但是,它并没有提取附加到该帖子的自定义字段。可能是因为它正在自定义模板页面上使用?
    • 您必须仔细检查获取帖子 ID 的方法。 var_dump($post-&gt;ID)var_dump(get_the_ID())。还要检查该特定帖子是否真的有元数据。
    • 我认为...它是从页面中提取 id。我不断得到一个 4 的 ID,我让它给我一个 ID 号的标题,它是菜单页面本身。
    • 如果您获得页面 ID,那么它是一个自定义帖子页面吗?
    【解决方案3】:

    我知道这是旧的,但我遇到了同样的问题,所以我尝试改进 @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>';
      } 
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多