我知道如何使用get_post_metadata()
, 但是,自定义RSS源模板中的以下代码:
while( have_posts()) : the_post();
// Has a custom URL been supplied? Use that in preference.
$feature_permalink = get_post_meta(get_the_ID(), \'_featureurl\', true);
[...]
正在给予:
HP致命错误:未捕获错误:调用未定义函数在/srv/www/foo/htdocs/wp-content/themes/bar/feed功能中获取\\u post\\u meta()。php
(事实上,PhpStorm编辑器会相应地突出显示它,但设置了xdebug断点后,我可以在调试控制台中很好地运行它。所有其他各种feed函数调用(用于标准的永久链接、标题、guid等)都可以很好地工作。)
模板位于functions.php
, 呼叫人:
function foo_custom_rss() {
if ( in_array(\'feature\', get_query_var(\'post_type\')) ) {
get_template_part( \'feed\', \'feature\' );
} else {
get_template_part( \'feed\', \'rss2\' );
}
}
remove_all_actions( \'do_feed_rss2\' );
add_action( \'do_feed_rss2\', \'foo_custom_rss\', 10, 1 );
最合适的回答,由SO网友:William Turrell 整理而成
这是一个解决方法,但它确实为我解决了问题。
首先,我将这个站点从我的vvv迁移到vvv2开发环境,以排除任何奇怪的地方。然后我浏览了WP配置文件和其他函数。php仔细寻找任何可能破坏事物的东西。
目前没有运气。
我在源代码中跟踪了get\\u post\\u meta(),认为我可能只能通过自己重写一个等效函数来解决这个问题(必要时创建一个DB查询)——读者可能知道它只是get_metadata() - 出于某种原因,这确实有效。
因此,如果有人能提出为什么get\\u post\\u meta()未定义,而get\\u metadata()未定义的原因。。。
SO网友:Dave Romsey
修改RSS项目的<link>
节点值,使用the_permalink_rss
滤器下面的代码对此进行了演示,其中如果feature
post的值设置为_featureurl
, 我们将返回自定义值。否则,将返回默认的永久链接:
/**
* Filters the permalink to the post for use in feeds.
*
* @param string $post_permalink The current post permalink.
*/
add_filter( \'the_permalink_rss\', \'wpse_the_permalink_rss\', 10, 1 );
function wpse_the_permalink_rss( $post_permalink ) {
// Bail if this is not a feature.
if ( \'feature\' !== get_query_var( \'post_type\') ) {
return $post_permalink;
}
// Get the permalink URL.
$feature_permalink = get_post_meta(
get_the_ID(),
\'_featureurl\',
true
);
// If the the custom URL has been specified return it, otherwise, use default permalink.
// Note: This is run through esc_url() via the_permalink_rss().
if ( $feature_permalink ) {
return $feature_permalink;
} else {
return $post_permalink;
}
}
的RSS输出示例
feature
post类型,具有以下URL:
http://example.com/feed/?post_type=feature
请注意
<link>
下的节点
<item>
节点包含URL
https://google.com
, 这就是我为
_featureurl
自定义字段:
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>
<channel>
<title>Features – WP Theme Testing</title>
<atom:link href="http://localhost/wp-theme-testing/feed/?post_type=feature" rel="self" type="application/rss+xml" />
<link>http://localhost/wp-theme-testing</link>
<description>I <3 testing themes!</description>
<lastBuildDate>Sun, 04 Mar 2018 05:46:16 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>https://wordpress.org/?v=4.9.1</generator>
<image>
<url>http://localhost/wp-theme-testing/wp-content/uploads/2017/06/cropped-favicon-32x32.png</url>
<title>Features – WP Theme Testing</title>
<link>http://localhost/wp-theme-testing</link>
<width>32</width>
<height>32</height>
</image>
<item>
<title>test feature</title>
<link>https://google.com</link>
<comments>http://localhost/wp-theme-testing/feartures/test-feature/#respond</comments>
<pubDate>Sun, 04 Mar 2018 05:41:29 +0000</pubDate>
<dc:creator><![CDATA[dave]]></dc:creator>
<guid isPermaLink="false">http://localhost/wp-theme-testing/?post_type=feature&p=3035</guid>
<description><![CDATA[a test!]]></description>
<content:encoded><![CDATA[<p>a test!</p>
]]></content:encoded>
<wfw:commentRss>http://localhost/wp-theme-testing/feartures/test-feature/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
</channel>
</rss>