Menu
Рецепты WordPress

Рецепты WordPress

Сборник решений для увеличения удобства при работе с wordpress

Вставлять php код в страницы

В functions.php добавить

 
if( 'Исполняемый PHP код в контенте' ){
 
    add_filter( 'the_content', 'content_exec_php', 0 );
 
    function content_exec_php( $content ){
        return preg_replace_callback( '/\[exec( off)?\](.+?)\[\/exec\]/s', '_content_exec_php', $content );
    }
 
    function _content_exec_php( $matches ){
 
        if( ' off' === $matches[1] ){
            return "\n\n<".'pre>'. htmlspecialchars( $matches[2] ) .'.">\n\n";
        }
        else {
            eval( "ob_start(); {$matches[2]}; \$exec_php_out = ob_get_clean();" );
            return $exec_php_out;
        } 
    } 
}

 Использование:

[exec]PHP_код[/exec]

Убрать URL из комментариев

В functions.php добавить

 add_filter('comment_form_default_fields', 'unset_url_field');
function unset_url_field($fields){
if(isset($fields['url']))
unset($fields['url']);
return $fields;
}

Ограничение длины комментария

В functions.php добавить

function number_characters_comments($comment) {
  if ( strlen( $comment['comment_content'] ) > 500 ) {
      wp_die('Комментарий слишком длинный.');
  }
  if ( strlen( $comment['comment_content'] ) < 20 ) {
      wp_die('Комментарий слишком короткий. Пожалуйста, введите не менее 30 символов.');
  }
  return $comment;
}
add_filter( 'preprocess_comment', 'number_characters_comments' );

Показывать изображение записи в RSS

В functions.php:

function wcs_post_thumbnails_in_feeds( $content ) {
  global $post;
  if( has_post_thumbnail( $post->ID ) ) {
      $content = '
'
.preg_replace( '/(width|height)="\d*"/', '', get_the_post_thumbnail( get_the_ID(), 'thumbnail' ) ) . '' . $content;
  }
  return $content;
# get_the_post_thumbnail( $post->ID )
#  preg_replace( '/(width|height)="\d*"/', '', get_the_post_thumbnail( get_the_ID(), 'large' ) )
}
add_filter( 'the_excerpt_rss', 'wcs_post_thumbnails_in_feeds' );
add_filter( 'the_content_feed', 'wcs_post_thumbnails_in_feeds' );

Создание меню и страниц управления в админке WP

В functions.php:

add_action( 'admin_menu', 'my_menu' );

 /** Пункты меню */

function my_menu() {
add_menu_page( 'My Menu', 'My Menu', 'manage_options', 'my_menu', 'main_menu' );
add_submenu_page('my_menu', '1 submenu', 'First Submenu', 'manage_options', 'First Submenu', 'sub_menu_1');
add_submenu_page('my_menu', '2 submenu', 'Second Submenu', 'manage_options', 'SecondSubmenu', 'sub_menu_2');
}

/** Функции меню -1 */

function main_menu() {
  if ( !current_user_can( 'manage_options' ) )  {
    wp_die( __( 'You do not have sufficient permissions to access this page.' ));
  }
echo '<br />Основные функции<br />';
// тут всякие функции
echo '&nbsp <a href="#") class="button button-primary button-large">SomeThing</a>' ;
}
function sub_menu_1() {
  if ( !current_user_can( 'manage_options' ) )  {
    wp_die( __( 'You do not have sufficient permissions to access this page.' ));
  }
echo '<br />Еще функции<br />';
// тут всякие функции
}

Дубликатор постов в WP

Вставить в functions.php

/*  Start post dublication
* Function for post duplication. Dups appear as drafts. User is redirected to the edit screen
*/

function rd_duplicate_post_as_draft(){
global $wpdb;
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) {
wp_die('No post to duplicate has been supplied!');
}

/*
* Nonce verification
*/

if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
return;

/*
* get the original post id
*/

$post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );

/*
* and all the original post data then
*/

$post = get_post( $post_id );

/*
* if you don't want current user to be the new post author,
* then change next couple of lines to this: $new_post_author = $post->post_author;
*/

$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;

/*
* if post data exists, create the post duplicate
*/

if (isset( $post ) && $post != null) {

/*
* new post data array
*/

$args = array(
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $new_post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name,
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => 'draft',
'post_title' => $post->post_title,
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
'menu_order' => $post->menu_order
);

/*
* insert the post by wp_insert_post() function
*/

$new_post_id = wp_insert_post( $args );

/*
* get all current post terms ad set them to the new post draft
*/

$taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag");
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
}

/*
* duplicate all post meta just in two SQL queries
*/

$post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
if (count($post_meta_infos)!=0) {
$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
foreach ($post_meta_infos as $meta_info) {
$meta_key = $meta_info->meta_key;
if( $meta_key == '_wp_old_slug' ) continue;
$meta_value = addslashes($meta_info->meta_value);
$sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";
}
$sql_query.= implode(" UNION ALL ", $sql_query_sel);
$wpdb->query($sql_query);
}

/*
* finally, redirect to the edit post screen for the new draft
*/

wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
exit;
} else {
wp_die('Post creation failed, could not find original post: ' . $post_id);
}
}
add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );

/*
* Add the duplicate link to action list for post_row_actions
*/

function rd_duplicate_post_link( $actions, $post ) {
if (current_user_can('edit_posts')) {
$actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate</a>';
}
return $actions;
}

add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
##add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);

### Edn post dublicate

Плагин постинга на стену VK, в ленту Телеграм и импорт со стены VK

Установка плагина

За основу взят пример плагина Димона за что ему премного благодарен

В размещении  ../wp_content/plugins/ создать папку wp-vk и в ней создать файл wp-vk.php с содержимым:

<?php

/**
 * Plugin Name: vkcom_vk_autopost
 * Description: Постинг на стену VK, в Телеграм и импорт со стены VK
 */
// Создание поста из вк
add_action('wp_ajax_postgen', 'postgen');

// Запуск автопостинга при публикации нового WP-поста.
#add_action('publish_post', 'vkcom_vk_publish_new');
// Запуск автопостинга по команде VK
add_action('wp_ajax_vkcom_vk', 'vkcom_vk_ajax');

// Запуск автопостинга по команде Telegram
add_action('wp_ajax_telegram_ajax', 'telegram_ajax');

// Добавление диалога плагина в редактирование WP-поста.
add_action('admin_init', 'vkcom_vk_box', 1);

// функция создания поста
function postgen()
{
    //если открытые записи - достаточно сервис токена
    $access_token="MYKEY";
    // Берем ID редактируемого WP-поста.
    $vk_post_id = $_REQUEST['vk_post_id'];
    $owner_id = '-'.$_REQUEST['owner_id'];
    $wall = file_get_contents('https://api.vk.com/method/wall.get?owner_id='.$owner_id.'&count=40&v=5.130&access_token='.$access_token.' ');
    $posts = json_decode($wall, true)['response'];
    //echo $wall;
    $id = 0;
    foreach($posts['items'] as $n)
      if($n['id']==$vk_post_id) {
        $img="no"; $video='';
        $title = substr($n['text'],0,stripos($n['text'],PHP_EOL));
        if(strlen($title)<5) $title = substr($n['text'],0,stripos($n['text'],'. '));
        if(strlen($title)<5) $title="Title";
        $content = substr($n['text'],stripos($n['text'],PHP_EOL),10000);
        $content2=preg_replace("/\s?\[[^>]*?\|\s?/si", ' ',$content);
        $content=preg_replace("/\]/", ' ',$content2);
        if(strlen($content)<5) $Content="   ";
        echo $video.'<h4>'.$title.'</h4><p>'.$content.' </p>';
        $postarr = array(
            'post_title' => $title,
            'post_content' => $content,
            'post_type' => 'post',//or whatever is your post type slug.
            'post_status' => 'draft', //publish
            'post_category' => array( 48 ),
            'meta_input' => array(
            //If you have any meta data, that will go here.
                ),
        );
        $insert_id = wp_insert_post($postarr, true);
        echo $insert_id;

    }
    header("Location: http://".$_SERVER['HTTP_HOST']."/wp-admin/post.php?post=$insert_id&action=edit");

  exit;
}

// Функция постинга в Телеграм
function wp_telegram($wp_post_id)
{

                $CHATID='-ZZZZZZZZ'; 
                $botid='MYBOTID';

     // Получаем информацию по WP-посту.
    $wp_post_url = get_permalink($wp_post_id);
    $wp_post_arr = get_post($wp_post_id);
    $wp_post_title = $wp_post_arr->post_title;
    $wp_post_content_arr = get_extended($wp_post_arr->post_content);
    $wp_post_desc =str_replace("\n", "",  strip_tags($wp_post_content_arr['main']));

   $telegram_text.='<b>'.$wp_post_title.'</b>'."\n".$wp_post_desc
        ."\n".'<a href="' . get_the_post_thumbnail_url( $wp_post_arr->ID, 'thumbnail' ) . '" >...</a>'
        ."\n".'<a href="'.$wp_post_url.'">Подробнее</a>'."\n";

$telegram = <<<TEXT
$telegram_text
TEXT;

    $bot_url    = "https://api.telegram.org/bot".$botid."/";
    $url        = $bot_url  . 'sendMessage';
    $post_fields = array('chat_id' => $CHATID,
                'text' => $telegram,
                'parse_mode' => 'HTML',
                'disable_web_page_preview' => false,
                );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type:multipart/form-data"));
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $output = curl_exec($ch);
        curl_close($ch);

}

// Функция автопостинга в ВК.
function vkcom_vk($wp_post_id,$gr_id)
{
  // ID-номер стены юзера, куда надо постить.
  $vk_user = $vk_group = $gr_id; 

  // Секретный ключ, который был получен для приложения VK.
  $vk_token = 'MYKEY';

  // Получаем информацию по WP-посту.
  $wp_post_url = get_permalink($wp_post_id);
  $wp_post_arr = get_post($wp_post_id);
  $wp_post_title = $wp_post_arr->post_title;
  $wp_post_content_arr = get_extended($wp_post_arr->post_content);
  $wp_post_desc =str_replace("\n", "",  strip_tags($wp_post_content_arr['main']));

  // Формируем текст VK-поста.
  $vk_text = $wp_post_title.'

'.$wp_post_desc;

  // Если у WP-поста есть миниатюра.
  if(($wp_post_image = get_post_thumbnail_id($wp_post_id)) > 0)
  {
    // Пытаемся получить массив для этой же картинки в большом размере.
    if(is_array($wp_post_image = wp_get_attachment_image_src($wp_post_image, 'large' )))
    {
      // Получили, фоhмируем URL для этой картинки до нужного вида.
      $wp_post_image = $_SERVER['DOCUMENT_ROOT'].substr($wp_post_image[0], strlen($_SERVER['SERVER_NAME'])+7);
    }
    else { unset($wp_post_image); }
  }
  // Иначе пробуем взять картинку из аттачей WP-поста.
  elseif($wp_post_image = get_attached_media('image', $wp_post_id))
  {
    // Сокращаем массив, берем лишь первую картинку.
    $wp_post_image = array_shift($wp_post_image);
    if(mb_strlen($wp_post_image = $wp_post_image->guid))
    {
      // Взяли, фоhмируем URL для этой картинки до нужного вида.
      $wp_post_image = $_SERVER['DOCUMENT_ROOT'].substr($wp_post_image, strlen($_SERVER['SERVER_NAME'])+7);
    }
    else { unset($wp_post_image); }
  }
  else { unset($wp_post_image); }

  // Если изображение нашлось.
  if(mb_strlen($wp_post_image))
  {
    // Узнаем VK-сервер, куда будем заливать изображение.
#user    $ph_ser = json_decode(file_get_contents('https://api.vk.com/method/photos.getWallUploadServer?v=5.81&access_token='.$vk_token));
    $ph_ser = json_decode(file_get_contents('https://api.vk.com/method/photos.getWallUploadServer?group_id='.$vk_group.'&v=5.81&access_token='.$vk_token));
    // Заливаем изображение на VK-сервер.
    $ph_upl = json_decode(curlPost($ph_ser->response->upload_url, $wp_post_image));
    // Сохраняем изображение, как фото к VK-посту на стене.
#user    $ph_sav = json_decode(file_get_contents('https://api.vk.com/method/photos.saveWallPhoto?user_id='.$vk_user.'&photo='.$ph_upl->photo.'&server='.$ph_upl->server.'&hash='.$ph_upl->hash.'&v=5.81&access_token='.$vk_token));

    $ph_sav = json_decode(file_get_contents('https://api.vk.com/method/photos.saveWallPhoto?group_id='.$vk_group.'&photo='.$ph_upl->photo.'&server='.$ph_upl->server.'&hash='.$ph_upl->hash.'&v=5.81&access_token='.$vk_token));
    // Узнаём id залитого изображения.
    $ph_id = $ph_sav->response[0]->id;
  }

  // Начинаем формировать запрос для отправки VK-поста.
#user  $st_zap = "https://api.vk.com/method/wall.post?owner_id=".$vk_user."&friends_only=0&message=".urlencode($vk_text)."&attachments=";
  $st_zap = 'https://api.vk.com/method/wall.post?owner_id=-'.$vk_group.'&friends_only=0&from_group=1&message='.urlencode($vk_text).'&attachments=';
  // Если изображение было загружено, то добавляем его в запрос.
  if(mb_strlen($ph_id)) { $st_zap .= 'photo'.$ph_sav->response[0]->owner_id.'_'.$ph_id.','; }
  // Добавляем URL на WP-пост.
  // если добавлять, то VK не рейтингует пост
#  $st_zap .= $wp_post_url;

  // Дополнительный постинг в другие социальные сети.
  //$st_zap .= '&services=twitter,facebook';
  // Завершаем формировать запрос.
 //5.37ap .= '&v=5.81&access_token='.$vk_token;

  // Отправляем сформированный запрос в VK.
  $st_1 = str_replace(' ', '%20', $st_zap);
//   json_decode(file_get_contents(str_replace(' ', '%20', $st_zap)));
  $st_res = json_decode(file_get_contents(str_replace(' ', '%20', $st_zap)));

  // Узнаём ID опубликованного VK-поста.
  $st_id = $st_res->response->post_id;

  // Если все ок.
  if(mb_strlen($st_id)>1)
  {
    // Добавяем в WP ссылку на VK-пост.
    add_post_meta($wp_post_id, 'vkcom_vk_link', $vk_user.'_'.$st_id);
    // Добавяем в WP ссылку на изображение VK-поста.
    add_post_meta($wp_post_id, 'vkcom_vk_photo', $ph_id);
  }
}

// Функция запуска автопостинга при публикации в WP нового поста.
function vkcom_vk_publish_new($wp_post_id)
{
  // Если WP-пост опубликован.
  if(($_POST['post_status'] == 'publish') && ($_POST['original_post_status'] != 'publish'))
  {
    // Пытаемся получить из WP ссылку на VK-пост.
    $test = get_post_meta($wp_post_id, 'vkcom_vk_link');
    // Если ссылка не найдена.
    if(count($test) == 0)
    {
      // Получаем Unix-метку времени WP-поста с поправкой на временную зону GTM.
      $wp_post_time = get_post_time('U', true, $wp_post_id);
      $wp_post_time_plus = $wp_post_time + 60*60*24*2; // двое суток.

      // Если WP-пост новый. WP-посты, публикуемые задним числом, игнорируем.
      if($wp_post_time_plus > current_time('timestamp'))
      {
        // Запуск автопостинга.
        vkcom_vk($wp_post_id);
      }
    }
  }
}

// Функция запуска автопостинга по команде.
function vkcom_vk_ajax()
{
  // Берем ID редактируемого WP-поста.
  $wp_post_id = $_REQUEST['post_id'];
  $gr_id = $_REQUEST['gr_id'];
  // Если WP-пост опубликован.
  if(get_post_status($wp_post_id) == 'publish')
  {
    // Запуск автопостинга.
    vkcom_vk($wp_post_id,$gr_id);
  }
  header("Location: http://".$_SERVER['HTTP_HOST']."/wp-admin/admin.php?page=To_social_repost");
  // post.php?post=".$wp_post_id."&action=edit");
  exit;
}

// Функция запуска автопостинга по команде Telegr
function telegram_ajax()
{
  // Берем ID редактируемого WP-поста.
  $wp_post_id = $_REQUEST['post_id'];
  // Если WP-пост опубликован.
  if(get_post_status($wp_post_id) == 'publish')
  {
    // Запуск автопостинга.
    wp_telegram($wp_post_id);
  }
  header("Location: http://".$_SERVER['HTTP_HOST']."/wp-admin/admin.php?page=To_social_repost");
  // post.php?post=".$wp_post_id."&action=edit");
  exit;
}

// Функции диалога плагина в редактирование WP-поста.
function vkcom_vk_box()
{
  add_meta_box('vkcom_vk_box', 'vkcom_vk_autopost', 'vkcom_vk_box_inner', 'post', 'side');
}
function vkcom_vk_box_inner($post)
{
  $vkcom_vk_box_link = get_post_meta($post->ID, 'vkcom_vk_link');
  $vkcom_vk_box_image = get_post_meta($post->ID, 'vkcom_vk_photo');
  if(count($vkcom_vk_box_link) > 0)
  {
    echo '<p>Существующие VK-записи <strong>('.count($vkcom_vk_box_link).'):</strong></p>';
    $i=0;
    while($i < count($vkcom_vk_box_link))
    {
      echo '<p><a target="_blank" href="//vk.com/wall'.$vkcom_vk_box_link[$i].'">Пост</a>';
      if(mb_strlen($vkcom_vk_box_image[$i]>1))
      {
        echo ' (<a target="_blank" href="//vk.com/photo'.get_option('vkcom_vk_opt_gid').'_'.$vkcom_vk_box_image[$i].'">изображение</a>)';
      }
      echo '</p>';
      $i++;
    }
  }
  else
  {
    echo '<p>Постов в VK не было!</p>';
  }
  $link = admin_url('admin-ajax.php?action=vkcom_vk&post_id='.$post->ID);
  if(get_post_status($post->ID)=='publish')
  {
    echo '<a href="'.$link.'" id="vkcomvk" class="button button-primary button-large">Запостить в VK!</a>';
  }
}

// Функция cURL (вспомогательная)
function curlPost($url, $img)
{
  if(!isset($url) || !isset($img))
  {
    return false;
  }
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
#  curl_setopt($ch, CURLOPT_POSTFIELDS, array('file1' => new CurlFile($img)));
    if (class_exists('\CURLFile')) {
            curl_setopt($ch, CURLOPT_POSTFIELDS, array('file1' => new CURLFile($img)));
        } else {
            curl_setopt($ch, CURLOPT_POSTFIELDS, array('file1' => "@$img"));
        }
  $response = curl_exec($ch);
  curl_close($ch);
  return $response;
}

?>

Использование функции постинга в ВК

(Я выключил функцию автопостинга, так как никогда с первого раза невозможно сделать пост правильно )

Вставить куда-то в страницу админки: 

echo ' <a href="'.admin_url('admin-ajax.php?action=vkcom_vk&post_id='.$post->ID.'&gr_id=[GROUP_ID]').'" id="vkcomvk" class="button button-primary button-large">Запостить в VK</a>';

,где требуется указать GROUP_ID группы, где Ваше приложение имеет права

Использование функции постинга в Телеграм

Вставить куда-то в страницу админки: 

echo '<a href="'.admin_url('admin-ajax.php?action=telegram_ajax&post_id='.$post->ID) .'" id="telegram_send" class="button button-primary button-large">Запостить в Telegram</a>';

Использование функции импорта из ВК:

Вставить куда-то в страницу админки создав путем добавления функционала:

    $posts2 = [];
#стена
$owner_id = ["-GROUD_ID_1", "-GROUD_ID_2" ];
date_default_timezone_set('Europe/Moscow');
echo '<br />Новости в группах на ';  echo date('d-M H:i'); 
#если открытые записи - достаточно сервис токена
$access_token="SERVICE_KEY";
foreach($owner_id as $gr)
{
  $g_name_r = file_get_contents('https://api.vk.com/method/groups.getById?group_id='.abs($gr).'&v=5.130&access_token='.$access_token.' ');
$g_name_j = json_decode($g_name_r, true)['response'];
foreach($g_name_j as $n) {    $g_name = $n['screen_name'];  }
$wall = file_get_contents('https://api.vk.com/method/wall.get?owner_id='.$gr.'&count=15&v=5.130&access_token='.$access_token.' ');
$posts = json_decode($wall, true)['response'];
  foreach($posts['items'] as $n) {
  $img="no"; $video='';
  foreach($n['attachments'] as $item) {
      $video = $item['video']['title'].'<br />';
        foreach ($item['video']['image'] as $pic_size)
        $img=$pic_size['url'];
      foreach ($item['photo']['sizes'] as $pic_size)
          $img=$pic_size['url'];
  }
#  $content = mb_strimwidth($n['text'], 0, 2350, "...");
    $title = substr($n['text'],0,stripos($n['text'],PHP_EOL));
if(strlen($title)<5) $title = substr($n['text'],0,stripos($n['text'],'. '));
      if(strlen($title)<5) $title="###";

    $content = substr($n['text'],stripos($n['text'],PHP_EOL),10000);
            $posturl='https://vk.com/public'.abs($gr).'?w=wall'.$gr.'_'.$n['id'];
$postdate = $n['date'];
    $posts2[$postdate]['owner_id'] = $gr;
    $posts2[$postdate]['g_name'] = $g_name;
    $posts2[$postdate]['post_id'] = $n['id'];
    $posts2[$postdate]['img'] = $img;
    $posts2[$postdate]['title'] = $title;
    $posts2[$postdate]['content'] = $content;
    $posts2[$postdate]['date'] = $postdate;
    $posts2[$postdate]['img'] = $img;
    $posts2[$postdate]['video'] = $video;
}
}
krsort($posts2);  

foreach($posts2 as $p) {
$posturl='https://vk.com/public'.abs($p['owner_id']).'?w=wall'.$p['owner_id'].'_'.$p['post_id'];
  $content2=preg_replace("/\s?\[[^>]*?\|\s?/si", ' ',$p['content']);
$content2=preg_replace("/\]/", ' ',$content2);
echo '<br /><hr><h3><u>'.$p['g_name'].'</u> > <i>'.date('d-M H:i', $p['date']).' </i>> 
'.$p['title'].'</h3>
<img src="'.$p['img'].'" alt="" width=200   >
'.$p['video'].'   '.$content2.' <br />
<a href="'.admin_url('admin-ajax.php?action=postgen&owner_id='.abs($p['owner_id']).'&vk_post_id='.$p['post_id'])
.'" id="WP_post_create" class="button button-primary button-large">Создать пост WP</a>
<a href="'.$posturl.'">'.$posturl.'</a>    ';
}

Покажет посты в нескольких группах с обратной сортировкой по времени - такой агрегатор открытых групп

Параметры NGINX

Основные параметры конфигурации NGINX для WordPress

location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
      expires max;
      log_not_found off;
  }
location / {
      #try_files $uri $uri/ =404;
      try_files $uri $uri/ /index.php$is_args$args;
  }

    

Lisolog / 2023