[Решено на 80%] Сервис сокращения ссылок
Вот результат (первый топорны) !!
Давно болел идеей поднять свой (закрытый-а позже может и открытый) сервис сокращения ссылок как у goo.gl и других.

1 Покупка отпадает, так как таких сервисов много и их нужно развивать и продвигать, и доход очень сложно сейчас с сервиса поднять, а также иногда не устраивает дизайн или функционал (короче свои бубенцы в голове) и его сложно будет править.
1.2 Заказать плагин не вариант - однажды думал за 100$ купить+ на 50$ доработок заказать - в итоге справился сам 10-20 строчками кода и 10 переделываний по феншую
2 Бесплатные отпадают - часто вирусню можно подхватить или взлом (моя параноя), а также проекты некоторые закрылись, а другие не известно когда закроются, а так же часто движки примитивны до безобразия
3 На базе вордпресс - не так страшно за взлом, частые обновления, легко править и все остальные преимущества движка
требования к сервису
1 Только вордпресс (решено)
2 возможность редактирования полученных ссылок
3 Минимальная (позже максимальная) статистика
4 Возможность выбора редиректа с рекламой или без
5 возможность выбора реклама взрослая или с детским фильтром
6 Возможность массового редактирования
7 Возможность массового просмотра (решено)
как я себе это представлял:
Создам отдельную таблицу БД, впишу туда ссылки и прочее, потом подшаманю и буду прямые записи ссылок и статистики в эту таблицу делать и все заработает. Но не все для меня так просто))
Как я вижу это сейчас - У вордпресса есть форматы постов, на этом думаю и сыграю
1,1 Создам отдельный формат поста к примеру "Shortlink"
1,2 В БД wp_posts - нужно будет добавить парочку столбцов: URL-редиректа, реклама ON or OFF, тип рекламы Править таблицы БД
2,1 Создам отдельную страницу (шаблон) для ввода ссылки для сокращения, со страницы ссылка с настройками будет попадать в таблицу бд "Shortlink" - PHP-wp_insert_post
2,2 добавить при создании ссылки - парсер заголовка целевой страницы
2,3 как решить проблему с аяксом - т.е. вывод нового URL - не знаю
2.4 Решить вопрос с генерацией новых урл = чтоб wordpress перепроверял существующие и при совпадении заново создавал анадромный URL
3 Создам отдельный дизайн под посты "Shortlink" - данный вопрос уже на где-то описывался
4 Создам отдельное меню в админке "Все Shortlink"
5 настройки к страницам можно реализовать как и через произвольные поля так и через таксономии - через таксономии можно будет массово редактировать ссылки
6 - вопрос татистики от части отпадает, так как есть достаточно плагинов ))
Много чего не знаю и не знаю смогу ли реализовать - буду собирать инфу в данной записи по крупицам
Интересуют ваши советы и предложения (если есть подобного рода плагин, то будет вообще отлично)
Делов на 20 минут, а изучения на год!
РЕШЕНИЕ
1.0 Используем Формат постов
1.1 Если не включено, то включаем нужные (для меня нужен link)
add_theme_support( 'post-formats', array( 'aside', 'image', 'video', 'quote', 'link', 'gallery', 'status', 'audio', 'chat', ) );
2.0 Шаблон страницы
2.1 Создаем свой шаблон страницы которая будет отвечать за обработку ссылок, так как я не умею правильно пользоваться формами и прочим, сделал как мог.
2.2 Я создал шаблон и поместил (зарегистрировал\создал URL ) его по адресу moi_example.com/sql/ - каждый настраивает под себя
2.3 Заполняем шаблон
<?php
/*
Template Name: Hide URL
*/
?>
<?php get_header(); ?>
<body>
<h1>Страница сокращения ссылок:</h1>
<form method="post">
Оригинальный URL: <input type="text" name="original_url" required/><br />
<?php
$my_site_url = $_SERVER['SERVER_NAME'];
// проверяем валидность URL b его заполненость
if ($_POST['original_url'] && filter_var($_POST['original_url'], FILTER_VALIDATE_URL) === FALSE && $_POST['original_url'] !== $my_site_url."/sql/") {
$bad_url = true;
} else {
// вторая проверка - тут можно установить стоп слова и прочие проверки
if ($_POST['original_url'] !== NULL && $_POST['original_url'] !== $my_site_url."/sql/" ){
// рандомный URL
$length = 10;
$chars = 'abcdefghijklmnopqrstuvwxyz123456789';
$numChars = strlen($chars);
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}
$new_random_url = $string; // запись в БД (guid)
$full_new_url = $my_site_url.'/'.$string.'/'; // ссылка для пользователя
}
}
?>
<input type="submit" value="Генерируем адрес" />
</form>
<?php
// вывод
if ( $bad_url == true) {
// плохой URL
echo '<h2 style="color: red;">Плохой URL</h2>';
} else {
if ( !$bad_url && !empty($_POST['original_url']) && $_POST['original_url'] !== NULL && $_POST['original_url'] !== $my_site_url."/sql/" ){
echo "<b>Оригинал</b> <BR>";
echo $original_url = $_POST['original_url'];
echo "<BR>";
echo "<b>Новый URL</b> <BR>";
echo $full_new_url;
echo "<BR>";
echo "<b>Title сокращённой ссылки:</b><BR>";
// парсим записываем и выводим title
$page = file_get_contents($_POST['original_url']);
$pattern = "#<title>(.*?)</title>#";
preg_match($pattern, $page, $matches);
htmlspecialchars($matches[0]); // результат с тегами
//ограничиваем символы в title
echo $page_shrink_title = mb_strimwidth(wp_strip_all_tags($matches[1]), 0, 65,"");
// если не удалось получить title
if (empty($page_shrink_title)){
$page_shrink_title = $new_random_url; // "NO TITLE";
}
// Создаем массив для базы данных
$post_data = array(
'post_title' => $page_shrink_title,
// 'post_content' => 'Здесь должен быть контент (текст) записи.',
'post_status' => 'publish',
'post_author' => 1,
'post_name' => $new_random_url // - запись рабочего урл
);
// Вставляем данные в БД для перенаправления
$post_id = wp_insert_post( wp_slash($post_data) );
set_post_format( $post_id, "link" ); // вносит изменения в wp_term_relationships - устанавливает тем самым формат LINK
update_post_meta($post_id,'redirect_url',$original_url); // создаем в пост мета таблицы с целевым URL
}
}
?>
</body>
<?php get_footer(); ?>
3.0 Админка постов
3.1 Создаем для удобства дополнительную колонку просмотра целевого URL (добавляем в functions.php)
// создаем новую колонку
add_filter('manage_post_posts_columns', 'add_meta_column_original_url', 4);
function add_meta_column_original_url( $columns ){
$num = 10; // после какой по счету колонки вставлять новые
$new_columns = array(
'original_url' => 'Целевой URL',
);
return array_slice( $columns, 0, $num ) + $new_columns + array_slice( $columns, $num );
}
// заполняем колонку данными
add_filter('manage_post_posts_custom_column', 'fill_column_original_url', 5, 2); // wp-admin/includes/class-wp-posts-list-table.php
function fill_column_original_url( $colname, $post_id ){
if( $colname === 'original_url' ){
echo get_post_meta($post_id, 'redirect_url', 1);
}
}
// подправим ширину колонки через css
add_action('admin_head', 'add_column_original_url_css');
function add_column_original_url_css(){
if( get_current_screen()->base == 'edit')
echo '<style type="text/css">.column-original_url{width:350px;}</style>';
}
3.2 Добавляем колонку статистики просмотров\переходов через плагин к примеру "WP-PostViews" - или какой вам более подходит

4.0 Свой шаблон для постов формата LINK
4.1 В директории темы создаем файл post_sql.php либо сразу в файл single.php вписываем код
либо почитать про format-link.php
4.2 Я сразу вписал код в single.php позже буду создавать несколько шаблонов, так как некоторые шаблоны будут без рекламы и быстрым редиректом, другие с рекламой только для взрослых, остальные шаблоны для просмотра всем без ограничений
В single.php перед get_header(); вставляем код, в нем таймер на редирект на 10 секунд
if ( has_post_format( 'link' )) {
get_header();
// header('Refresh: 5; url=http://rambler.ru/');
echo 'Это страница ссылка ))';
echo "<br> Едем сюда через 10 секунд <br> ";
echo $value = get_post_meta( $post->ID, 'redirect_url', true ); //> значение 1
?>
<script type="text/javascript">
setTimeout('location.replace("<?php echo $value ?>")',10000);
</script>
<meta http-equiv="refresh" content="10; url=<?php echo $value ?>">
<?php
get_sidebar();
get_footer();
} else {
вот на выходе 2 страницы , одна ввода , другая промежуточная
в результате все работает, но нужно тестировать и подгонять CSS и прочие плюшки, тем более что я не знаю как передавать переменные из формы в формате POST в php файлы (я так на всех примерах видел), а также не дошел до использования AJAX
Пока что в раздумиях - куда писать параметры для ссылок (с рекламой или без)
1 - можно добавить дополнительную колонку в wp_posts - но тем самым частично нарушу структуру WP
2 - можно в post_meta, это будут лишние запросы и лишние затраты, но думаю они минимальны для 20000 переходов в сутки
Уже отловил пару БАГОВ!
только для того чтобы дать статье короткий URL - не путайте! цель не сократить а замаскировать и показать свою рекламу! к сайту на котором все делается не имеет никакого отношения (плагины сокращения ссылок которые в базе ВП предназначены только для формирования URL текущего сайта ), этот же код ориентирован на сторонние домены
по поводу home_url() - сам не знаю что лучше - даже статьи по этому поводу находил, задумываться много времени не было, поставил что понравилось.
Хитрость в том что название не несет смысловой нагрузки - а Эта идея нужна для TGP-сайтов - и рекламных ссылок, тема давно рабочая , ранее по 100$ в месяц на автомате получал (сейчас 10$), но зачем кормить других !!
--
немного продвигаюсь, кнопки и таймеры на JS уже прикручиваю - некий Франкенштейн получится, но бесплатно и просто, а главное что в WP уже все есть и придумано до меня, не нужен даже велосипед.
Все замороченные вопросы которые я задаю на этом сайте, я подсмотрел на больших сайтах с большим заработком , типо СОЦСЕТЕЙ, ГАЛЕРЕЙ и ПОРНО-САЙТОВ - и желаю эти идеи воплотить на ВП малой кровью.
Идею выше вынашивал 2 года , но она была не приоритетной, а вчера за 6-10 часов реализовал, и ничего придумывать не пришлось, обидно что плагин не нашел
Я все равно сути так и не уловил, как это работать должно непонятно, что скрывать зачем скрывать 
Я знаю 4 назначения данных сайтов:
1 - Статистика - этим занимается goo.gl от гугл
2 - Временные сайты + рекламные блоки - человек создает ссылку на товар алиэкспресс [сократил её] , размещает эту сокращённую ссылку на форумах, со временем товар-магазин закрывают, но мертвая ссылка на многих форумах останется, вам достаточно будет на сайте (что я предложил) поменять конечную ссылку на новый товар, тем самым на форумах не нужно все менять, а действий вы затратите только пару кликов и оживите ссылку!
3 - Реклама, размещаете сокращённую ссылку на форуме, человек перед тем как попасть на нужный ресурс просмотрит 5 секунд рекламы , а вы заработаете
4 - Ссылочный спам, когда ресурс забанен, а трафик вам нужен, вы можете потянуть трафик через такой сервис
Вот, теперь прояснилось 90%!




Неужели оно того стоит? Вижу по коду много недоработок. Например почему юзаешь $_SERVER['SERVER_NAME'], а не home_url(), почему в хэше не фигурирует сам URL, так ведь он теоретически может быть не уникальный...
Хотя я не понимаю логику, зачем все это нужно, зачем в типы записей это все писать, зачем такая сложная структура, только для того чтобы дать статье короткий URL. Тут сложно что-то комментировать, по моему больше похоже на попытку что-то сделать, а получается просто упражнения в коддинге. Поэтому держи в курсе, что там будет получаться, возможно сам поймешь потом что все делал не так или наоборот