私は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-feature.phpにある未定義の関数►get_post_meta()を呼び出します
(そして実際にPhpStormエディタはそれに応じてそれを強調していますが、xdebugブレークポイントを設定すれば、私はそれをデバッグコンソールでうまく動かすことができます。
テンプレートは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 );
これは回避策ですが、それは私のための問題を解決しました。
最初に私はこのサイトを私のvvvからvvv2 dev環境に移動しました。それから私はWP configファイルと残りのfunctions.phpを注意深く調べて物事を壊す可能性のあるものを探しました。
これまでのところ運はありません。
私はget_post_meta()をソースでたどりましたが、自分で同等の関数を書き直すことによってのみ解決できると思います(必要に応じてDBクエリを作成する) get_metadata() の単純なラッパーです。何らかの理由で、このは動作します。
もし誰かがget_post_meta()が未定義でget_metadata()がなぜ定義されていないのかを示唆できるのであれば...
RSSアイテムの<link>
ノード値を変更するには、the_permalink_rss
フィルタを使います。これは以下のコードで示されています。ここで、feature
投稿に_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;
}
}
次のURLを持つfeature
投稿タイプのRSS出力例。
http://example.com/feed/?post_type=feature
<link>
ノードの下の<item>
ノードには、https://google.com
というURLが含まれています。これは、_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>