Рецепты WordPress
Сборник решений для увеличения удобства при работе с wordpress
- Вставлять php код в страницы
- Убрать URL из комментариев
- Ограничение длины комментария
- Показывать изображение записи в RSS
- Дубликатор постов в WP
- Создание меню и страниц управления в админке
- Плагин постинга на стену VK, в ленту Телеграм и импорт со стены VK
- Параметры NGINX
Вставлять 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 '  <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