在RSS模板的循环中使用时未定义GET_POST_METADATA()

时间:2018-03-02 作者:William Turrell

我知道如何使用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 );

2 个回复
最合适的回答,由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> 节点包含URLhttps://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 &#8211; 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 &#60;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 &#8211; 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&#038;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>

结束

相关推荐

PHP已弃用:WP_RSSjb具有已弃用的构造函数

我在调试中收到消息。PHP日志已弃用:在PHP的未来版本中,与类同名的方法将不会是构造函数;WP\\U RSSjb在/home/dccomp/competitions中有一个已弃用的构造函数。com/wp-content/plugins/rss-just-better/rss-just-better。php第57行。如何修改此内容?这条线是class WP_RSSjb extends WP_Widget { /** * Widget setup. */ fun