Intereting Posts
Как добавить метатеги на домашнюю страницу с защитой паролем? Как упорядочить разные категории публикаций в шаблоне Электронная торговля одним продуктом Следующая ссылка на продукт Получение данных из базы данных с использованием $ WPDB Назначение нескольких макетов с помощью настраиваемых страниц в WordPress? Могу ли я получить идентификатор вставленного / связанного изображения? плагин получает значение от страницы панели администратора как отобразить строку в admin_notices зацепите плагин класса Получить идентификатор продукта из идентификатора заказа в Woocommerce Использование представления базы данных = воплощение зла? какие типы заказов я могу передать get_posts () через orderby? Можно ли создать автономное приложение для работы в качестве плагина WordPress? Заикание страницы при загрузке Нельзя использовать pre_set_site_transient_update_themes из темы в многопользовательском режиме WordPress рисует изображения по-разному на сетчатых экранах?

Виджет со случайными сообщениями из блога для внешних сайтов

Как создать настраиваемый виджет со случайными сообщениями из моего блога, которые могут быть опубликованы на другом сайте как js, iframe или div. Есть ли для этого плагин WordPress?

Solutions Collecting From Web of "Виджет со случайными сообщениями из блога для внешних сайтов"

Чтобы создать специальный вывод случайных сообщений:

  1. Зарегистрируйте конечную точку в корне вашего блога. Подробнее см. A (В основном) полное руководство по API перезаписи WordPress .
  2. Обновите настройки постоянной ссылки. Я бы сделал это только при активации (de).
  3. Подключитесь к 'template_redirect' и верните свой результат в зависимости от деталей запрашиваемой конечной точки. Затем exit .

Это все.

Ну … какой-то код может помочь понять детали. 🙂

Давайте построим небольшой плагин для вывода HTML и JSON.

Я назвал его T5 Random Posts Endpoint ; весь код переходит в класс со статическими методами, чтобы сохранить глобальное пространство имен в чистоте.

 add_action( 'init', array ( 'T5_Random_Posts_Endpoint', 'init' ) ); /** * Build a root endpoint. */ class T5_Random_Posts_Endpoint { /** * Register endpoint and actions. * * @wp-hook 'init' * @return void */ public static function init() { add_rewrite_endpoint( 'randomposts', EP_ROOT ); add_filter( 'request', array ( __CLASS__, 'filter_request' ) ); add_action( 'template_redirect', array ( __CLASS__, 'render' ) ); } } 

Как вы можете видеть, мы называем центральный метод init на 'init' чтобы … инициализировать наш плагин. Творческое именование, да?

Конечная точка называется randomposts и привязана к корню. Поэтому после активации вы можете получить свой код на example.com/randomposts/ или example.com/randomposts/json/ .

Но … если вы вызываете первый URL, то конечная точка работает, а randomposts переменной randomposts задается, но она пуста . Вот почему мы подключаемся к 'request' и присваиваем переменной значение по умолчанию, с которым мы можем работать позже. Давайте используем html по умолчанию:

  /** * Prepare the endpoint variable so it has always a value. * * @wp-hook 'request' * @param array $request * @return array */ public static function filter_request( $request ) { if ( isset ( $request['randomposts'] ) and empty ( $request['randomposts'] ) ) { $request['randomposts'] = 'html'; } return $request; } 

Теперь мы подключаемся к 'template_redirect' поэтому WordPress не будет использовать шаблон по умолчанию index.php но наш собственный вывод.

  /** * Create output. * * @wp-hook 'template_redirect' * @return void */ public static function render() { // This is not our endpoint. if ( '' === $type = get_query_var( 'randomposts' ) ) { return; } // Someone is poking around. // You can extend this and build different output variants. if ( ! in_array( $type, array ( 'html', 'json' ) ) ) { status_header( 414 ); print 'Unsupported Media Type. Use "html" or "json" only.'; exit; } // Empty blog? if ( ! $posts = get_posts( array ( 'numberposts' => 10, 'orderby' => 'rand' ) ) ) { status_header( 404 ); print 'No posts found.'; exit; } self::$type( self::prepare_post_data( $posts ) ); exit; } 

Сначала мы проверяем, действительно ли мы находимся на нашей конечной точке, просматривая get_query_var( 'randomposts' ) . Мы заполнили эту переменную в нашем фильтре запросов, поэтому, если она все еще пуста, мы точно знаем , что это не наш бизнес, и мы быстро возвращаемся.

Затем мы проверяем, был ли запрос для одного из наших предопределенных вариантов вывода html или json . Если кто-то вызывает /randomposts/css или /randomposts/lala мы /randomposts/lala ошибку 414 с полезным сообщением. И выйти.

Затем мы получим, наконец, наши сообщения с get_posts() и удалим все данные, которые нам не нужны, в специальном методе с именем prepare_post_data() :

  /** * Build a simple array with just titles and permalinks. * * @wp-hook 'template_redirect' * @param array $posts * @return void */ protected static function prepare_post_data( $posts ) { $data = array (); foreach ( $posts as $post ) { if ( empty ( $post->post_title) ) { continue; } $data[ $post->ID ] = array ( 'title' => strip_tags( $post->post_title ), 'url' => get_permalink( $post->ID ) ); } return $data; } 

Мы передаем этот простой массив методу, названному точно так же, как и наш вывод: html() или json() .
Начнем с json() ; это легкая часть. См. Раздел Как кодировать содержимое сообщения как JSON? для некоторого фона.

  /** * Render JSON output * * @wp-hook 'template_redirect' * @param array $data * @return void */ protected static function json( array $data ) { header( 'Content-type: application/json' ); print json_encode( $data ); } 

Легко, не так ли? html() не намного сложнее, просто дольше:

  /** * Render HTML output * * @wp-hook 'template_redirect' * @param array $data * @return void */ protected static function html( array $data ) { ?> <!doctype html> <title><?php bloginfo( 'name' ); ?></title> <meta name="viewport" content="width=device-width; initial-scale=1.0"> <?php // Just a sample style. Be creative! :) ?> <style> body, body * { display: block; font: 1em/1.4 Calibri, sans-serif; list-style: none; margin: 0; padding: 0; text-decoration: none; } a { background: #f5f5f5; border-bottom: 1px solid #ddd; color: #333; padding: 5px 10px; } a:hover, a:focus { background: #333; color: #f5f5f5; } h1 a { font-size: 1.2em; font-weight: bold; } </style> <h1><a href="<?php bloginfo( 'url' ); ?>"><?php bloginfo( 'name' ); ?></a></h1> <ul> <?php foreach ( $data as $post ) { print '<li><a href="' . $post['url'] . '">' . $post['title'] . '</a></li>'; } ?> </ul> <?php } 

Вот как это выглядит с данными теста темы :

введите описание изображения здесь

Теперь наш выход завершен – мы все еще находимся в render() – и мы вызываем exit потому что иначе WordPress будет включать index.php из активной темы.

Теперь нам нужен только способ обновления настроек постоянной ссылки:

  /** * Reset permalinks. * * @wp-hook 'activate_' . __FILE__ * @wp-hook 'deactivate_' . __FILE__ * @return void */ public static function flush_rewrite_rules() { remove_action( 'init', array ( __CLASS__, 'init' ) ); add_action( 'init', 'flush_rewrite_rules', 11 ); } 

Мы предотвращаем наш init hook здесь, потому что при активации мы находимся в списке плагинов, где нам не нужна конечная точка, и при деактивации мы не хотим перерегистрировать текущую неизменную ссылку.

Мы присоединяем этот метод к (де) активации с помощью:

 // refresh permalink settings register_activation_hook( __FILE__ , array ( 'T5_Random_Posts_Endpoint', 'flush_rewrite_rules' ) ); register_deactivation_hook( __FILE__ , array ( 'T5_Random_Posts_Endpoint', 'flush_rewrite_rules' ) ); 

И теперь мы можем сказать: вот и все. В самом деле.

Если вы сделали это, хватайте полный плагин от GitHub .

Я думаю, по сути, что вы говорите, это пользовательский виджет, который будет анализировать и отображать RSS-канал вашего блога. Здесь вы можете создать собственный виджет собственного и жестко закодировать URL-адрес RSS-ленты своего блога в своем самом PHP-виджете, чтобы убедиться, что пользователь Widget не изменил URL-адрес; поэтому ваш виджет покажет только RSS вашего блога.

Теперь, как только вы закончите использовать RSS для разблокировки своего блога, перед вами откроется несколько вариантов. Либо вы можете использовать собственные возможности RSS-ленты WordPress, чтобы сэкономить ваше время (но это наложит много ограничений), либо напишите свой собственный код создателя RSS-ленты, поскольку веб-служба, установленная на вашем сервере / веб-хостинге, будет взаимодействовать с вашим виджетами. Итак, сделайте свой Widget PHP для отправки запроса на веб-службу публикации RSS-канала вашего блога; затем проанализируйте результаты, возвращаемые вашим сервером, и отобразите элементы RSS-фида.

Если у вас есть время инвестировать и серьезно относиться к этому виджету, то лучше реализовать свой собственный веб-сервис. Я не думаю, что это будет слишком сложно для вас … просто играйте с WP_Query и верните результаты в правильном формате XML-фида RSS. Таким образом, вы также сможете предлагать список категорий в раскрывающемся списке для своего пользователя-виджета на свой выбор и сделать свой Widget PHP запросом RSS сообщений только из выбранной категории вашего блога. Кроме того, вам будет лучше контролировать, сколько сообщений нужно возвращать в RSS-фиде, запрошенном вашим виджетами.

Надеюсь, это поможет.

Ура,

Ruturaaj.