XF 2.2 Посты из Wordpress в виджете на Xenforo

Версия XenForo
2.2

osmxnxn

Проверенные
Сообщения
16
Реакции
0
Баллы
3
Здравствуйте. Подскажите, можно как-то реализовать вывод заголовков последних статей из Wordpress в виджете Xenforo?
 

Вставляем функцию в файл темы functions.php или в файл, где мы будем выводить последние записи (например, sidebar.php)

Код:
/**
* Выводит на экрна список последних записей.
*
* @param integer [$post_num = 5] Количество ссылок
* @param string [$format = ''] {avatar} {author}: {date:j.M.Y} - {a}{title}{/a} ({comments})
* @param string [$cat = ''] Категории из которых нужно выводить (5,15) или которые нужно исключить (-5,-15),
* через запятую (одновременно включение и исключение не работает (не имеет смысла) )
* @param string [$list_tag = 'li'] Тег списка
* @param boolean [$echo = true] Выводить на экран или возвращать
*
* @return string HTML.
* @version: 0.1.2
*/
function kama_recent_posts( $post_num = 5, $format = '', $cat = '', $list_tag = 'li', $echo = true ){
global $post, $wpdb;

$cur_postID = $post->ID;

// исключим посты главного запроса (wp_query)
$IDs = '';
foreach( $GLOBALS['wp_query']->posts as $post ) $IDs .= $post->ID .',';
$AND_NOT_IN = ' AND p.ID NOT IN ('. rtrim($IDs, ',') .')';

$DISTINCT = $SEL = $JOIN = $AND_category = $AND_taxonomy = '';

if( $cat ){
  $JOIN = "LEFT JOIN $wpdb->term_relationships rel ON ( p.ID = rel.object_id )
   LEFT JOIN $wpdb->term_taxonomy tax ON ( tax.term_taxonomy_id = rel.term_taxonomy_id ) ";
  $DISTINCT = "DISTINCT";
  $AND_taxonomy = "AND tax.taxonomy = 'category'";
  $AND_category = "AND tax.term_id IN ($cat)";

  // Проверка на исключение категорий
  if( strpos($cat, '-')!==false )
   $AND_category = 'AND tax.term_id NOT IN ('. str_replace( '-','', $cat ) .')';

}
// если нужно показать автора
if( false !== strpos($format, '{author}') ){
  $JOIN .= " LEFT JOIN $wpdb->users u ON ( p.post_author = u.ID )";
  $SEL = ", u.user_nicename AS author, u.user_email, u.user_url";

  // если нужно показать аватар (gavatar)
  if( strpos($format, '{avatar}')!==false )
   $av = "<img src='http://www.gravatar.com/avatar/%1\$s?s=25' alt='' />";
}

$sql = "SELECT $DISTINCT p.ID, post_title, post_date, comment_count, guid, post_author $SEL
FROM $wpdb->posts p $JOIN
WHERE post_type = 'post' AND post_status = 'publish' $AND_category $AND_taxonomy $AND_NOT_IN
ORDER BY post_date DESC LIMIT $post_num";
$results = $wpdb->get_results($sql);

if( ! $results )
  return false;

$out = '';
$x = '';
preg_match( '~\{date:(.*?)\}~', $format, $date_m );
foreach( $results as $pst ){
  $x = ( $x == 'li1' ) ? 'li2' : 'li1';
  if ( $pst->ID == $cur_postID ) $x .= " current-item";

  $a = '<a href="'. get_permalink($pst->ID) .'" title="'. esc_attr($pst->post_title) .'">';

  if( $format ){
   $avatar = isset($av) ? sprintf( $av, md5($pst->user_email) ) : '';
   $date = apply_filters('the_time', mysql2date($date_m[1], $pst->post_date));
   $Sformat = str_replace( $date_m[0], $date, $format);
   $Sformat = str_replace(
    array('{title}', '{a}', '{/a}', '{author}', '{comments}', '{avatar}'),
    array( esc_html($pst->post_title), $a, '</a>', esc_html($pst->post_author), $pst->comment_count, $avatar ),
    $Sformat
   );
  }
  else
   $Sformat = $a . esc_html($pst->post_title) .'</a>';

  $out .= "\n<$list_tag class='$x'>{$Sformat}</$list_tag>";
}

if( $echo ) echo $out;
return $out;
}


P.s если я не то понял или не то сделал то извиняюсь!​
 
Последнее редактирование:

Вставляем функцию в файл темы functions.php или в файл, где мы будем выводить последние записи (например, sidebar.php)

Код:
/**
* Выводит на экрна список последних записей.
*
* @param integer [$post_num = 5] Количество ссылок
* @param string [$format = ''] {avatar} {author}: {date:j.M.Y} - {a}{title}{/a} ({comments})
* @param string [$cat = ''] Категории из которых нужно выводить (5,15) или которые нужно исключить (-5,-15),
* через запятую (одновременно включение и исключение не работает (не имеет смысла) )
* @param string [$list_tag = 'li'] Тег списка
* @param boolean [$echo = true] Выводить на экран или возвращать
*
* @return string HTML.
* @version: 0.1.2
*/
function kama_recent_posts( $post_num = 5, $format = '', $cat = '', $list_tag = 'li', $echo = true ){
global $post, $wpdb;

$cur_postID = $post->ID;

// исключим посты главного запроса (wp_query)
$IDs = '';
foreach( $GLOBALS['wp_query']->posts as $post ) $IDs .= $post->ID .',';
$AND_NOT_IN = ' AND p.ID NOT IN ('. rtrim($IDs, ',') .')';

$DISTINCT = $SEL = $JOIN = $AND_category = $AND_taxonomy = '';

if( $cat ){
  $JOIN = "LEFT JOIN $wpdb->term_relationships rel ON ( p.ID = rel.object_id )
   LEFT JOIN $wpdb->term_taxonomy tax ON ( tax.term_taxonomy_id = rel.term_taxonomy_id ) ";
  $DISTINCT = "DISTINCT";
  $AND_taxonomy = "AND tax.taxonomy = 'category'";
  $AND_category = "AND tax.term_id IN ($cat)";

  // Проверка на исключение категорий
  if( strpos($cat, '-')!==false )
   $AND_category = 'AND tax.term_id NOT IN ('. str_replace( '-','', $cat ) .')';

}
// если нужно показать автора
if( false !== strpos($format, '{author}') ){
  $JOIN .= " LEFT JOIN $wpdb->users u ON ( p.post_author = u.ID )";
  $SEL = ", u.user_nicename AS author, u.user_email, u.user_url";

  // если нужно показать аватар (gavatar)
  if( strpos($format, '{avatar}')!==false )
   $av = "<img src='http://www.gravatar.com/avatar/%1\$s?s=25' alt='' />";
}

$sql = "SELECT $DISTINCT p.ID, post_title, post_date, comment_count, guid, post_author $SEL
FROM $wpdb->posts p $JOIN
WHERE post_type = 'post' AND post_status = 'publish' $AND_category $AND_taxonomy $AND_NOT_IN
ORDER BY post_date DESC LIMIT $post_num";
$results = $wpdb->get_results($sql);

if( ! $results )
  return false;

$out = '';
$x = '';
preg_match( '~\{date:(.*?)\}~', $format, $date_m );
foreach( $results as $pst ){
  $x = ( $x == 'li1' ) ? 'li2' : 'li1';
  if ( $pst->ID == $cur_postID ) $x .= " current-item";

  $a = '<a href="'. get_permalink($pst->ID) .'" title="'. esc_attr($pst->post_title) .'">';

  if( $format ){
   $avatar = isset($av) ? sprintf( $av, md5($pst->user_email) ) : '';
   $date = apply_filters('the_time', mysql2date($date_m[1], $pst->post_date));
   $Sformat = str_replace( $date_m[0], $date, $format);
   $Sformat = str_replace(
    array('{title}', '{a}', '{/a}', '{author}', '{comments}', '{avatar}'),
    array( esc_html($pst->post_title), $a, '</a>', esc_html($pst->post_author), $pst->comment_count, $avatar ),
    $Sformat
   );
  }
  else
   $Sformat = $a . esc_html($pst->post_title) .'</a>';

  $out .= "\n<$list_tag class='$x'>{$Sformat}</$list_tag>";
}

if( $echo ) echo $out;
return $out;
}


P.s если я не то понял или не то сделал то извиняюсь!​
Хочется выводить последние посты со своего сайта на Wordpress, на своем форуме на XenForo. Вот что имел ввиду.
 
Хочется выводить последние посты со своего сайта на Wordpress, на своем форуме на XenForo. Вот что имел ввиду.
Как типо тему создал и хотите на другой сайт перевести?
 
Без прямой интеграции WP и XF думаю никак. Вы хотите статьи из WP выводить на XF в виде виджета, как я понимаю. Хотя, может этот плагин чем-то поможет...
 
Без прямой интеграции WP и XF думаю никак. Вы хотите статьи из WP выводить на XF в виде виджета, как я понимаю. Хотя, может этот плагин чем-то поможет...
Этот плагин я так понял на Shared не работает. Потому что там в плагине XenForo нужно указать папку с WordPress на хостинге. Получается WordPress с XenForo должны быть на одном хостинге.
У меня на одном хостинге, но судя по всему место под каждый сайт обособлено на Shared.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу