通过WP REST API显示帖子特色图像和类别

时间:2018-03-15 作者:Michael G

我有一个自定义函数,可以从另一个Wordpress博客中提取(3)篇文章,它通过一个快捷码从我指定的特定类别中提取它们。

现在,尽管如此,我无法让它运行并显示实际图像,因为我只能让它显示特色图像(媒体附件)的ID本身。

这是我的功能代码,除了不显示图像外,它可以工作,而是图像ID(数值)

function feedpuller_func($atts)
{
    $url = $atts[\'url\'];

    $count = ($atts[\'count\'])?$atts[\'count\']:\'3\';

    if($atts[\'catid\'])
    {
        $cat = \'?categories=\'.$atts[\'catid\'].\'&per_page=\'.$count;
        $response = wp_remote_get( $url.\'/wp-json/wp/v2/posts/?_embed\'.$cat );
    }
    else if ($atts[\'slug\']) 
    {
        $slug = $atts[\'slug\'];
        echo $url . \'/wp-json/wp/v2/categories?slug=\'.$slug;
        $responseslug = wp_remote_get($url . \'/wp-json/wp/v2/categories?slug=\'.$slug );
        $postdata = json_decode( wp_remote_retrieve_body( $responseslug ) );
        if($postdata)
            $catid = $postdata[0]->id;
        else
            echo \'no record against this slug\';
        if($catid)
        {
            $cat = \'?categories=\'.$catid.\'&per_page=\'.$count;
            $response = wp_remote_get( $url.\'/wp-json/wp/v2/posts/?_embed\'.$cat );
        }

    }
    else 
        $cat = \'\';

    if( is_wp_error( $response ) ) {
        return;
    }

    $posts = json_decode( wp_remote_retrieve_body( $response ) );

    if( empty( $posts ) ) {
        return;
    }

    if( !empty( $instance[\'title\'] ) ) {
        echo $args[\'before_title\'] . apply_filters( \'widget_title\', $instance[\'title\'], $instance, $this->id_base ) . $args[\'after_title\'];
    }


    if( !empty( $posts ) ) {
        echo \'<ul class="feedothersite">\';
        foreach( $posts as $post ) { //echo \'<pre>\'; print_r($post);
            echo \'<li><a href="\' . $post->link . \'">\' . \'<img src="\' . $post->featured_media . \'">\' . \'<br>\'. $post->title->rendered .\'<br>\'. $post->excerpt->rendered . \'</a></li>\';
        }
        echo \'</ul>\';
    }
}

add_shortcode("feedpuller","feedpuller_func");
编辑:我不想使用已经制作好的插件,我也在相关帖子上尝试过解决方案,但我的功能不同,因为我显示的是特定类别的帖子,典型的帖子都是在没有这些参数的情况下拉出来显示的。

Suggested Method (I know this works for regular posts)

/?rest_route=/wp/v2/posts&_embed
/wp-json/wp/v2/posts?_embed

But mine are called like this:

/wp-json/wp/v2/categories?slug=\'.$slug

1 个回复
SO网友:Michael G

在一位好朋友的帮助下,我找到了解决办法。如果其他人需要使用这个功能,我会把它贴在这里。总之,此功能将显示来自其他博客的帖子,您可以输入来自其他博客的特定类别ID,还可以控制显示的帖子数量。

function feedpuller_func($atts)
{
    $url = $atts[\'url\'];

    $count = ($atts[\'count\'])?$atts[\'count\']:\'3\';
    $imgsize = (in_array($atts[\'img\'], array(\'thumbnail\',\'medium\',\'large\',\'full\')))?$atts[\'img\']:\'thumbnail\';

    if($atts[\'catid\'])
    {
        $cat = \'?_embed&categories=\'.$atts[\'catid\'].\'&per_page=\'.$count;
        $response = wp_remote_get( $url.\'/wp-json/wp/v2/posts/\'.$cat );
    }
    else if ($atts[\'slug\']) 
    {
        $slug = $atts[\'slug\'];
        echo $url . \'/wp-json/wp/v2/categories?slug=\' . $slug;
        $responseslug = wp_remote_get($url . \'/wp-json/wp/v2/categories?slug=\' . $slug);
        $postdata = json_decode( wp_remote_retrieve_body( $responseslug ) );
        if($postdata)
            $catid = $postdata[0]->id;
        else
            echo \'no record against this slug\';
        if($catid)
        {
            $cat = \'?categories=\'.$catid.\'&per_page=\'.$count;
            $response = wp_remote_get( $url.\'/wp-json/wp/v2/posts/\'.$cat );
        }

    }
    else 
        $cat = \'\';

    if( is_wp_error( $response ) ) {
        return;
    }

    $posts = json_decode( wp_remote_retrieve_body( $response ) );

    if( empty( $posts ) ) {
        return;
    }

    if( !empty( $instance[\'title\'] ) ) {
        echo $args[\'before_title\'] . apply_filters( \'widget_title\', $instance[\'title\'], $instance, $this->id_base ) . $args[\'after_title\'];
    }

    if( !empty( $posts ) ) {

        echo \'<ul class="feedothersite">\';
        foreach( $posts as $post ) { //echo \'<pre>\'; print_r(); exit;
            $imgurl = $post->_embedded->{\'wp:featuredmedia\'}[0]->media_details->sizes->$imgsize->source_url;
            if($imgurl)
                $img = \'<img src="\'.$imgurl.\'">\';
            else
                $img = \'\';

            echo \'<div class="feedcontent"><a href="\' . $post->link. \'"><li><div class="feedimg">\'.$img.\'<div><h2>\' . $post->title->rendered . \'</h2></a></div></li>\';
        }
        echo \'</ul>\';
    }
}

add_shortcode("feedpuller","feedpuller_func");
快捷码值应在[feedpuller url=”之后http://othersite.com/“catid=”22“count=”4“]要显示特色图像,请使用:img=“full”img=“medium”或img=“缩略图”

结束

相关推荐

从外部JSON数据创建动态页面而不存储在数据库中?

我想构建一个插件,向第三方API发出AJAX请求,该API用抽象的JSON响应,如下所示:{show1:[第1季:[{eposode1},{eposode2},{eposode3}],第2季:[{eposode1},{eposode2}]}因此,我将在Wordpress中为该节目设置一个页面,该页面位于:site/show1在该页面上,我可以从列出的每一集链接到如下url:site/show1/season1-episode1 而不必为每一集在Wordpress中构建页面或帖子。这可能吗?如果可能的话,关