在 PHP 函数中使用 WP 元值

Use WP meta value within PHP function

我正在尝试在 wordpress post 中显示来自 RSS 提要的内容。我希望能够将 RSS URL 输入到 Wordpress post 中,以便提要内容可以从 post 更改为 post。

我可以使用此代码创建所需的输出并直接输入 RSS url 其中说 'ENTER RSS URL HERE'

    <?php
    $rss = new DOMDocument();
    $rss->load('ENTER RSS URL HERE');
    $feed = array();
    foreach ($rss->getElementsByTagName('item') as $node) {
        $item = array ( 
            'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
            'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
            'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
            'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
            );
        array_push($feed, $item);
    }
    $limit = 6;
    for($x=0;$x<$limit;$x++) {
        $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
        $link = $feed[$x]['link'];
        $description = $feed[$x]['desc'];
        $date = date('l F d, Y', strtotime($feed[$x]['date']));
                echo '<div class="product-item">';
        echo '<p>'.$description.'</p>';
            echo '<p><strong><a href="'.$link.'" title="'.$title.'">'.$title.'</a></strong><br />';
                echo '</div>';
    }
?>

而且我还可以输出作为 post 元值输入的 URL,如下所示:

<?php echo get_post_meta($post->ID, 'RSS', true); ?>

我只是不确定如何将两者结合起来,以便可以动态更改 RSS URL。任何帮助将不胜感激。

如果 RSS-URL 总是在 post 元数据中,您可以简单地使用它:

$rss->load(get_post_meta($post->ID, 'RSS', true));

还是我对你的问题有误?

您可以尝试以下方法

<?php
global $post;
$url = ((filter_var(get_post_meta($post->ID, 'RSS', true), FILTER_VALIDATE_URL)) ? get_post_meta($post->ID, 'RSS', true) : 'fallback url');
$rss = new DOMDocument();
$rss->load($url);
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node)
{
    $item = array(
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
        'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
        'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
    );
    array_push($feed, $item);
}
$limit = 6;
for ($x = 0; $x < $limit; $x++)
{
    $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
    $link = $feed[$x]['link'];
    $description = $feed[$x]['desc'];
    $date = date('l F d, Y', strtotime($feed[$x]['date']));
    echo '<div class="product-item">';
    echo '<p>' . $description . '</p>';
    echo '<p><strong><a href="' . $link . '" title="' . $title . '">' . $title . '</a></strong><br />';
    echo '</div>';
}
?>

这是我正在使用的最终代码,它似乎运行良好,谢谢!

    <?php
global $post;
$url = ((filter_var(get_post_meta($post->ID, 'RSS', true))) ? get_post_meta($post->ID, 'RSS', true) : 'ENTER FALL BACK URL HERE');
$rss = new DOMDocument();
$rss->load($url);
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node)
{
    $item = array(
        'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
        'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
        'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
        'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
    );
    array_push($feed, $item);
}
$limit = 6;
for ($x = 0; $x < $limit; $x++)
{
    $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
    $link = $feed[$x]['link'];
    $description = $feed[$x]['desc'];
    $date = date('l F d, Y', strtotime($feed[$x]['date']));
    echo '<div class="product-item">';
    echo '<p>' . $description . '</p>';
    echo '<p><strong><a href="' . $link . '" title="' . $title . '">' . $title . '</a></strong><br />';
    echo '</div>';
}
?>