現在、下記のようなコードをプラグイン化し、外部RSSを取得して、投稿画面にショートコードを記入することで、投稿ページに外部のRSSを表示しています。
これを第三者にしてもらうに当たり、外部RSSのフィードと表示する件数のみを入力してもらうことで、誰にでもできるような簡潔な作業にしたいと思い、Advanced Custom Fieldsを使って投稿画面の簡略化を試みているのですが、いくらやってもコードそのままが表示されてしまい、外部RSSが表示されず困っております。
Advanced Custom Fieldsにこだわるつもりはないのですが、自分が出来そうな範囲ですと、他にこれと言った方法も思いつかない状態でして、そこも含めてどなたかお知恵を貸して頂けないかと思い、投稿させて頂きました。宜しく御願い致します。
ショートコードは[paka3Feed url="外部RSS" count=表示数]となっております。
<?php add_shortcode("paka3Feed",paka3_shortcode_rss); add_action('wp_enqueue_scripts','paka3_shortcode_rss_css'); //本体 function paka3_shortcode_rss($atts){ //ショートコードに定義した値を取得&デフォルト値 extract( shortcode_atts( array( 'url' => "http://yotsuba-d.com/blog/feed/", 'count' => 3 ), $atts ) ); //$urlが空の場合はfalseを返す if(!$url) return false; //*エスケープ $url = sprintf(esc_html("%s"),$url); //ここからfeedを取得して行きます。 add_filter ( 'wp_feed_cache_transient_lifetime' , 'return_1800' ); $feed = fetch_feed( $url ); remove_filter( 'wp_feed_cache_transient_lifetime' , 'return_1800' ); //*表示数を設定 if ( ! is_wp_error( $feed ) ) { $maxitems = $feed->get_item_quantity( $count ); $rss_items = $feed->get_items( 0, $maxitems ); } //サイト名とサイトURLの取得 $title = $feed->get_title(); $site_url = $feed->get_permalink(); ///表示数 $str=""; if ( $maxitems > 0){ foreach ( $rss_items as $item ){ $f_link = esc_url( $item->get_permalink() ); $f_date = sprintf( __( '%s', 'my-text-domain' ), $item->get_date('j F Y | g:i a') ); $f_title = esc_html( $item->get_title() ); $f_content = mb_strimwidth(strip_tags($item->get_content()), 0, 70, "...","UTF-8"); if(preg_match_all('/<img.*?src=(["\'])(.+?)\1.*?>/i',$item->get_content(),$img_array)){$site_img = $img_array[2][0]; } if(!preg_match('/^http(s)?:\/\/[^\/\s]+(.*)$/',$site_img,$r)){ $site_img = $site_url.$site_img; } //itemのhtmlの生成 $str .= <<<EOS <div class="feed_item"> <a href="{$f_link}" title="{$f_date}" rel="nofollow" > <div class=feed_item_img><img src = {$site_img} /></div> <h4>{$f_title}</h4> <p>{$f_content}</p> </a> </div>
EOS;
}
}
//全体の
echo <<< EOS
<div class="feed_block">
<h2><a href="{$site_url}" rel="nofollow" >{$title}</a></h2>
{$str}
</div>
EOS;
}
function return_1800(){
return 1800;
}
あなたの回答
tips
プレビュー