Wordpress get_post_custom,我想我可以更有效率

时间:2012-09-24 17:02:07

标签: wordpress custom-post-type

我为我的投资组合页面创建了一个自定义帖子类型。我有两个自定义字段:

  1. 产品网址
  2. 案例研究网址
  3. 我的问题是在我的主题中使用这些自定义字段的值。目前我通过运行这个来获取它们的值:

    <?php 
    $loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => 3)); 
    while ( $loop->have_posts() ) : $loop->the_post();
    
    $custom = get_post_custom($post->ID);
    $product_url = $custom['product_url'];
    foreach ($product_url as $key => $value)
    echo $key . " => " . $value . "<br />";
    
    $custom = get_post_custom($post->ID);
    $case_study_url = $custom['case_study_url'];
    foreach ($case_study_url as $key => $value)
    echo $key . " => " . $value . "<br />";
    
    ?>
    
    // All my mark-up
    
    <?php endwhile; ?>
    

    Idk如果我的术语在这里有意义,但是我没有办法运行foreach循环以便显示product_url和case_study_url?

    提前感谢您的帮助。

    此致。

1 个答案:

答案 0 :(得分:2)

如果您只检索两个值,则没有理由使用get_post_custom。请考虑使用Get Post Meta代替:

<?php 
$loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => 3)); 
while ( $loop->have_posts() ) : $loop->the_post();

$product_url = get_post_meta($post->ID, 'product_url', true);
$case_study_url = get_post_meta($post->ID, 'case_study_url', true);
echo "Product: $product_url, Case Study: $case_study_url";
?>

// All my mark-up

<?php endwhile; ?>

<强>更新

处理不是特定于模板结构的元字段时,

get_post_custom会更好。因此,如果您希望让用户能够添加自己的字段并让它们显示在页面上而不自己实际指定任何键,则可以执行以下操作:

<?php 
$loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => 3)); 
while ( $loop->have_posts() ) : $loop->the_post();

$all_meta = get_post_custom($post->ID);
foreach($all_meta as $meta_key => $meta_value)
    echo "$meta_key: $meta_value<br/>";

endwhile;
?>

请记住,在设置使用相同键的值时,结果将为array类型。

因此,假设您有一个名为“Foo”的自定义字段,并将其设置为“Bar”。然后你有另一个名为“Foo”的自定义字段,并将其设置为“Baz”。当你这样做时:

<?php
$loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => 3)); 
while ( $loop->have_posts() ) : $loop->the_post();
    $foo = get_post_meta($post->ID, 'Foo');
    print_r($foo);
endwhile;
?>

您将获得一系列值,而不仅仅是一个简单的字符串,因为两个值使用相同的键。通过在get_post_meta中将第三个参数设置为“true”(如上例所示),您指定返回值必须为字符串。

只要玩弄它,你就会明白我的意思。希望这会有所帮助。