0

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

  1. 产品网址
  2. 案例研究网址

我的问题是在我的主题中使用这些自定义字段的值。目前我通过运行这个来获取它们的值:

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

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

在此先感谢您的帮助。

真挚地。

4

1 回答 1

3

如果您只检索两个值,则没有理由使用 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;
?>

请记住,当设置使用相同键的值时,结果将是数组类型。

因此,假设您有一个名为“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”(如我们上面的示例所示),您指定返回值必须是字符串。

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

于 2012-09-24T17:24:10.990 回答