这是我正在玩弄的另一个难题。在sitewide tags pages plugin 它获取一个自定义字段列表(在管理设置中输入),然后将这些字段用作键来读取帖子并在数组中输出键和值。我无法看到它的工作,因此我正在努力确定原因。
以下是其中的常规sitewide-tags.php
: http://wordpress.org/extend/plugins/wordpress-mu-sitewide-tags/
*** line 369 in Version: 0.4.1.1 of sitewide-tags.php ***
$meta_keys = apply_filters( \'sitewide_tags_meta_keys\', get_sitewide_tags_option( \'tags_blog_postmeta\', array() ) );
$global_meta[\'DEBUG TEST1\'] = $meta_keys;
$global_meta[\'DEBUG TEST2\'] = $post_id;
if( is_array( $meta_keys ) && !empty( $meta_keys ) ) {
foreach( $meta_keys as $key )
$global_meta[\'DEBUG TEST3\'] = \'custom loop\';
$global_meta[$key] = get_post_meta( $post->ID, $key, true );
}
unset( $meta_keys );
我添加了少量的标记来揭示每一步发生的情况。
对于我的测试用例post\\u id#1121,有一个自定义字段位于wp_9_postmeta
表有一个meta\\u键image
具有相应的meta\\u值http://newsite.com/files/2011/05/alfaP.jpg
但是,例程在函数中不返回任何值。
下面是每个调试测试显示的内容;
DEBUG TEST1:
a:7:{i:0;s:11:"video-embed";i:1;s:9:"image-url";i:2;s:8:"link-url";i:3;s:10:"quote-copy";i:4;s:12:"quote-author";i:5;s:9:"quote-url";i:6;s:9:"audio-url";}
DEBUG TEST2: 1121
DEBUG TEST3: Custom Loop
因此,第一个测试(#1)显示所有自定义字段都是从
\'get_sitewide_tags_option\'
在第1行。第二个测试(#2)确认它正在查看正确的post\\u id,第三个测试(#3)确认它到达foreach循环,因此通过了条件子句。
编辑:另一个测试是检查foreach循环内的值,并查看其中包含的值$key
- 我发现的是$key
包含meta_key
名称(图像、视频嵌入…)理论上,当使用\'get_post_meta\'
.
我很想知道为什么没有-有什么想法或建议吗?
SO网友:barbara
我刚刚在我正在开发的一个网站上解决了一个类似的问题——在我将循环代码移动到插件后,我无法从帖子中获得任何元数据。
事实证明,当您在站点范围的插件中运行一个循环时,您访问post meta的方式是不同的。
不要写这样的内容:
get_post_meta($post->ID, \'start-time\', true);
你必须这样写:
get_post_meta(get_the_ID(), \'start-time\', true);
请注意,第一个参数,
$post->ID 更改为
get_the_ID().这为我解决了问题,希望你也能解决!