Справка короткого кода требуется
Вопрос
У меня есть функция WordPress для отображения последних 5 твитов пользователя, эти твиты могут отображаться двумя способами, которые один проходит через прямое вход в идентификатор пользователя в меню администратора, которое я создал, а во -вторых, через пользовательские поля,
Здесь я хочу избежать пользовательских полей и хочу начать с короткометражного кода, я знаю, что я слаб в коротком коде, потому что это мой второй вопрос, связанный с ним, но нуждается в коротком коде в этой функции
Вот код
function tweet_fetcher(){
global $post;
$doc = new DOMDocument();
if((get_option('tweetID'))!=null){
$meta=get_option('tweetID');
$feed = "http://twitter.com/statuses/user_timeline/$meta.rss";
$doc->load($feed);
}
elseif((get_option('tweetID'))==null){
if ( $meta =get_post_meta($post->ID, 'username:', true) ) {
$feed = "http://twitter.com/statuses/user_timeline/$meta.rss";
$doc->load($feed);
}
}
$outer = "<ul>";
$max_tweets = 5;
$i = 1;
foreach ($doc->getElementsByTagName('item') as $node) {
$tweet = $node->getElementsByTagName('title')->item(0)->nodeValue;
//if you want to remove the userid before the tweets then uncomment the next line.
//$tweet = substr($tweet, stripos($tweet, ':') + 1);
$tweet = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',
'<a href="$1">$1</a>', $tweet);
$tweet = preg_replace("/@([0-9a-zA-Z]+)/",
"<a href=\"http://twitter.com/$1\">@$1</a>",
$tweet);
$outer .= "<li>". $tweet . "</li>\n";
if($i++ >= $max_tweets) break;
}
$outer .= "</ul>\n";
return $outer;
}
function append_the_content($content) {
$content .="<p>Latest Tweets".tweet_fetcher($meta)."<Script Language='Javascript'>
<!--
document.write(unescape('%3C%61%20%68%72%65%66%3D%22%68%74%74%70%3A%2F%2F%6D%62%61%73%2E%69%6E%2F%22%20%74%61%72%67%65%74%3D%22%5F%62%6C%61%6E%6B%22%3E%50%6F%77%65%72%65%64%20%62%79%20%4D%42%41%73%3C%2F%61%3E'));
//-->
</Script></p>";
return $content;
add_filter('the_content', 'append_the_content');
require_once ('tweet-fetcher-admin.php');
Решение
Ну вот:
add_shortcode('latest_tweets', 'latest_tweets');
function latest_tweets($atts){
extract(shortcode_atts(array(
'max' => 5
), $atts));
$twitter_id = esc_attr(strip_tags($atts[0]));
// try to get data from cache to avoid slow page loading or twitter blocking
if (false === ($output = get_transient("latest_tweets_{$twitter_id}"))):
$doc = new DOMDocument();
$feed = "http://twitter.com/statuses/user_timeline/{$twitter_id}.rss";
$doc->load($feed);
$output = "<ul>";
$i = 1;
foreach ($doc->getElementsByTagName('item') as $node) {
$tweet = $node->getElementsByTagName('title')->item(0)->nodeValue;
//if you want to remove the userid before the tweets then uncomment the next line.
//$tweet = substr($tweet, stripos($tweet, ':') + 1);
$tweet = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $tweet);
$tweet = preg_replace("/@([0-9a-zA-Z]+)/", "<a href=\"http://twitter.com/$1\">@$1</a>", $tweet);
$output .= "<li>{$tweet}</li>\n";
if($i++ >= $max) break;
}
$output .= "</ul>\n";
set_transient("latest_tweets_{$twitter_id}", $output, 60*10); // 10 minute cache
endif;
return $output;
}
Применение:
[latest_tweets "DarthVader" max=5]
PS: У вас есть некоторый эксплойт в коде, который вы разместили в своем вопросе. Вы должны позаботиться об этом ...
PPS: Для людей, которые хотят сделать что -то вроде этого:
использовать Yahoo Query Language, запросы должны быть более быстрее теоретически, и у вас меньше шансов быть ограниченным сервисом, с которой вы запрашиваете данные
Используйте формат JSON для запроса данных
Используйте WP Http api Чтобы сделать внешние запросы