【问题标题】:Can WordPress WP_Query return custom field post meta?WordPress WP_Query 可以返回自定义字段发布元数据吗?
【发布时间】:2011-11-10 20:42:01
【问题描述】:

由于某种原因,我无法让 WP_Query 返回帖子的自定义字段值。我可以使用get_the_post_thumbnail($post->ID, array(50,50)) 获取帖子缩略图,但我无法使用get_post_meta($post->ID, $key, true) 获取自定义字段数据。

我正在尝试做的精简版:

<?php
    $keys = array('Show Date','Birth Year','Origin');

    echo '<table>';
    echo '<tr><th>Title</th>';
    foreach( $keys as $key ) {
        echo '<th>' . $key . '<th>';
    }
    echo '</tr>';

    $myquery = new WP_Query( 'post_type=post' );
    if( $myquery->have_posts() ) : while( $myquery->have_posts() ) : $myquery->the_post();

        $title = get_the_title();
        echo '<tr><td>' . $title . '</td>';

        $values = array();
        foreach( $keys as $key ) {
            $values[] = get_post_meta($post->ID, $key, true);
        }
        foreach( $values as $value ) {
            echo '<td>';
            echo $value;
            echo '</td>';
        }
        echo '</tr>';

    endwhile; endif;

    echo '</table>';
?>

也可以在这里找到:
http://pastebin.com/at8S2THs

即使删除了所有非必要代码,我也无法完成这项工作。我知道您可以在查询中使用 meta_keymeta_value 之类的参数来缩小结果范围,但我只想为每个帖子显示我指定的键的所有值(如果存在)。

任何帮助将不胜感激...

** 找到解决方案 **

只需要在循环开始后添加global $post;。感谢 WP 支持论坛上的@Kimikaze 提供解决方案!

【问题讨论】:

    标签: wordpress meta custom-fields


    【解决方案1】:

    当我在 wordpress 中找不到我需要的数据时,我总是发现将 Global $post 对象打印到屏幕上很有帮助,这样我就可以查看我的数据是否正在进入页面。

    Global $post;
    echo "<pre>";
     print_r($post);
    echo "</pre>";
    

    所有的辅助方法或“钩子”通常只是与这个(或另一个)全局对象交互。检查 $post (可能还有 $values 数组)上的输出以获取您正在寻找的数据,如果它在那里,您可以直接引用它,例如帖子标题

    $post->title
    

    另一个想法,get_post_meta() 的第三个参数设置为 true 时返回单个字符串,设置为 false 时会得到什么?

    【讨论】:

    • 感谢您的回复。打印 $post 对象很有帮助,因为它证实了我的怀疑:我的 WP_Query 没有返回自定义字段数据。猜猜我必须建立一个自定义的 MySQL 查询......为了回答你的问题,当第三个参数设置为 false 时,它​​仍然不返回任何内容。无论如何,每个自定义字段只包含一个值,因此不需要数组。
    • 另外几个想法:在屏幕上打印 $post 时,尝试在页面的不同区域执行此操作,一旦我因丢失的数据而烦恼,只是意识到它正在被正确查询,但因为另一个 wordpress 请求发生在页面中间, $post 内容被新的查询结果覆盖。此外,对于编写自定义查询,请查看人们对 $wpdb 对象和 setup_postdata() 方法的看法。
    【解决方案2】:

    我猜这个问题与您用作元键的值有关。要使用 get_post_meta() 检索数据,您需要传入实际的 meta_key 值,这些值可能是“show_date”、“birth_year”和“origin”,因为 meta_key 值不处理大写字母或空格。尝试更改为您设置 $keys 数组的值:

    $keys = array('show_date','birth_year','origin');
    

    如果这不起作用,可能值得检查数据库(在 wp_postmeta 表中)以确认实际的 meta_key 值。

    【讨论】:

    • 好主意,但没有骰子。使用 lowercase_underscore 格式并没有什么不同,而且元数据肯定存在。事实上,我可以使用$artist_birth = get_post_meta($post-&gt;ID, 'Birth Year', true) 之类的代码在单个帖子页面模板上调用它,完全没有任何问题。
    • 当我将一些元数据添加到数据库中,然后从 pastebin 运行代码时,我得到了预期的结果(即它打印了一堆元数据)。您有机会粘贴添加元数据的代码吗?另外,这段代码在你的 WP 安装中运行在哪里?
    • 你介意测试一下这个插件吗:mynewsitepreview.com/plugins/sorttablepost_v4.0beta.zip - 我正在尝试在这个插件的最新版本中添加对自定义字段的支持。
    • 对不起,应该也告诉你如何使用插件。短代码 [sorttablepost meta="Custom Field Key,Another Custom Field Key,Yet Another" nothumb="true" nocats="true" notags="true"] 应该输出一个表格,列出您的所有帖子标题、发布日期以及您在元选项中标识的任何自定义字段。
    • 在 WP 论坛上的某个人的帮助下想通了。原来我只需要在循环开始后添加global $post;。不过,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多