Как отобразить RSS-ленту WordPress на вашем сайте? - PullRequest
7 голосов
/ 10 февраля 2012

Здравствуйте, у меня есть веб-сайт и блог, я хочу показать свой блог WordPress на своем веб-сайте.

  1. Я хочу показать только 3 сообщения на моем веб-сайте.
  2. Я хочу автоматически проверять наличие новых сообщений каждый раз, когда я перезагружаю свой веб-сайт, чтобы отображались только последние три.
  3. Я хочу показать полное название моего блога WordPress, но конкретные письма с описанием.
  4. Также описание должно заканчиваться словом, а не каким-нибудь фрагментом словарного слова, оканчивающимся на "..."

Как это можно сделать, я слышал, что это можетбыть сделано через RSS.Кто-нибудь может мне помочь?

Ответы [ 3 ]

5 голосов
/ 10 февраля 2012

Для этого вам нужно прочитать RSS блога, из RSS вам нужно прочитать Заголовок и описание, после прочтения всего описания и заголовка вам нужно обрезать описание до нужного вам количества букв. После этого вам нужно проверить, было ли завершено описание последнего слова или нет, а затем вам нужно удалить последнее слово, если оно не завершено, и поставить «...».

Сначала мы сделаем скрипт, чтобы обрезать описание и поставить «...» в последнем: -

<?php
global $text, $maxchar, $end;
function substrwords($text, $maxchar, $end='...') {
    if (strlen($text) > $maxchar || $text == '') {
        $words = preg_split('/\s/', $text);      
        $output = '';
        $i      = 0;
        while (1) {
            $length = strlen($output)+strlen($words[$i]);
            if ($length > $maxchar) {
                break;
            } 
            else {
                $output .= " " . $words[$i];
                ++$i;
            }
        }
        $output .= $end;
    } 
    else {
        $output = $text;
    }
    return $output;
}

Теперь мы определим переменные, в которых будем хранить значения: -

$xml=("http://your-blog-path/rss/");
global $item_title, $item_link, $item_description;

$xmlDoc = new DOMDocument();

$xmlDoc->load($xml);

$x=$xmlDoc->getElementsByTagName('item');

Теперь мы создадим массив и сохраним в нем значения. Я беру только 3, потому что вы спросили об этом. Вы можете изменить его на что угодно (номер поста, который вы хотите показать, поместите его в цикл)

for ($i=0; $i<3; $i++)

{

$item_title[$i] = $x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;

$item_link[$i] = $x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;

$item_description[$i] = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

}

?>

Теперь повторим все эти значения, ссылка - это значение, по которому пользователь щелкнет, и он попадет в ваш блог: -

ПЕРВАЯ ПОСЛЕДНЯЯ ПОЧТА:

<a href="<?php echo $item_link[0]; ?>"><?php echo $item_title[0]; ?></a>
<?php echo substrwords($item_description[0],70); ?>

ВТОРОЕ ПОСЛЕДНЕЕ ПОСТ:

<a href="<?php echo $item_link[1]; ?>"><?php echo $item_title[1]; ?></a>
<?php echo substrwords($item_description[1],70); ?>

ТРЕТЬЕ ПОСЛЕДНЕЕ ПОСТ:

<a href="<?php echo $item_link[2]; ?>"><?php echo $item_title[2]; ?></a>
<?php echo substrwords($item_description[2],70); ?>

Надеюсь, это решит вашу проблему. Кстати Хороший вопрос.

3 голосов
/ 28 сентября 2014

Нажмите здесь для ознакомления с оригинальной документацией по отображению RSS-каналов с помощью PHP.

Функция substrwords Django Anonymous используется для обрезки описания и вставки... в конце описания, если оно передает значение $maxchar.


Полный код:

blog.php

<?php
    global $text, $maxchar, $end;
    function substrwords($text, $maxchar, $end='...') {
        if (strlen($text) > $maxchar || $text == '') {
            $words = preg_split('/\s/', $text);      
            $output = '';
            $i      = 0;
            while (1) {
                $length = strlen($output)+strlen($words[$i]);
                if ($length > $maxchar) {
                    break;
                } else {
                    $output .= " " . $words[$i];
                    ++$i;
                }
            }
            $output .= $end;
        } else {
            $output = $text;
        }
        return $output;
    }

    $rss = new DOMDocument();
    $rss->load('http://wordpress.org/news/feed/'); // <-- Change feed to your site
    $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 = 3; // <-- Change the number of posts shown
    for ($x=0; $x<$limit; $x++) {
        $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
        $link = $feed[$x]['link'];
        $description = $feed[$x]['desc'];
        $description = substrwords($description, 100);
        $date = date('l F d, Y', strtotime($feed[$x]['date']));
        echo '<p><strong><a href="'.$link.'" title="'.$title.'">'.$title.'</a></strong><br />';
        echo '<small><em>Posted on '.$date.'</em></small></p>';
        echo '<p>'.$description.'</p>';
    }
?>

Вы можете легко поместить это в отдельный файл PHP (blog.php) и вызвать его внутри вашей фактической страницы.

Пример:

social.php

<h3>Latest blog post:</h3>
<?php require 'blog.php' ?>

Кроме того, этот код дружественный к Plug-N-Play.

0 голосов
/ 01 августа 2013

Почему бы не использовать API Wordpress REST для получения сообщений -

URL-адрес API: https://public -api.wordpress.com / rest / v1 / sites / $ site / posts /

где $ site - идентификатор сайта вашего блога WordPress

или просто используйте этот плагин -

http://www.codehandling.com/2013/07/wordpress-feeds-on-your-website-with.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...