[Решено на 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. Тут сложно что-то комментировать, по моему больше похоже на попытку что-то сделать, а получается просто упражнения в коддинге. Поэтому держи в курсе, что там будет получаться, возможно сам поймешь потом что все делал не так или наоборот