GoFuckBiz.info
Форум успешных вебмастеров - GoFuckBiz.info
SEO · трафик · партнерские программы

   Форум успешных вебмастеров - GoFuckBiz.info > Бизнес-решения > Скрипты, программы и технические решения > WP. Автозамена текста

Просмотр полной версии : WP. Автозамена текста

04.04.2011, 12:34
iloveadult
Есть ли какой-нибудь плагин, чтобы автоматом заменял указаный текст на указаную ссылку в статьях?
Статьи публикуются автоматом. Т.е. если в тексте есть виагра, что должно заменить на ссылку
04.04.2011, 15:55
Bara
Terms Descriptions

вот такой поищи плагин
04.04.2011, 16:31
chesser
попробуй кинуть такой файлик в плагины wp-content/plugins/:
<?php
/*
Plugin Name: Chesser Relpace
Description: Find and replace substrings
Author: Chesser
Version: 1.0
Author URI: http://chesser.ru/blog/
*/

function func_replace($content) {
return str_replace(
array(
'vasya',
'masha',
),
array(
'petya',
'dasha',
),
$content
);
}

add_filter('the_content', 'func_replace');
?>

вроде должно работать, хотя не проверял
можно вместо "vasya заменить на petya" прикрутить визуальную настройку таблицы автозамен, но я пошел спать :)
str_replace можно заменить на str_ireplace - тогда будет заменять без учета регистра.
При работе с юникодом однобайтавая функция замены не катит, надо что-то из mb_string использовать
04.04.2011, 16:37
majordon
Т.е. если в тексте есть виагра, что должно заменить на ссылку

Terms Descriptions если нужно слово сделать гиперссылкой, если просто слово заменить ссылкой то увы плагин не поможет
04.04.2011, 17:02
iloveadult
попробуй кинуть такой файлик в плагины wp-content/plugins/:
<?php
/*
Plugin Name: Chesser Relpace
Description: Find and replace substrings
Author: Chesser
Version: 1.0
Author URI: http://chesser.ru/blog/
*/

function func_replace($content) {
return str_replace(
array(
'vasya',
'masha',
),
array(
'petya',
'dasha',
),
$content
);
}

add_filter('the_content', 'func_replace');
?>

вроде должно работать, хотя не проверял
можно вместо "vasya заменить на petya" прикрутить визуальную настройку таблицы автозамен, но я пошел спать :)
str_replace можно заменить на str_ireplace - тогда будет заменять без учета регистра.
При работе с юникодом однобайтавая функция замены не катит, надо что-то из mb_string использовать
красота, работает! Спасибо
04.04.2011, 17:27
iloveadult
только одна проблемка пока вроде:
если добавить:
спасибо
большое спасибо

g.com
y.com

то заменяет не правильно второе:
большое y.com получается
04.04.2011, 17:35
Sezeo8
только одна проблемка пока вроде:
если добавить:
спасибо
большое спасибо

g.com
y.com

то заменяет не правильно второе:
большое y.com получается
поменяй местами "большое спасибо" с "спасибо"
04.04.2011, 17:43
iloveadult
нет, так не катит, замены то не 2. добавил 10 штук, слова иногда пересекаются. надо чтоб каждое слово воспринималось отдельно и полностью
04.04.2011, 17:56
Sezeo8
так ты сделай по убыванию от много словных ключевых к одиночным, будет работать, я так делал
04.04.2011, 17:58
iloveadult
ну ща попробую, но ещё нашел баг:

гофак
меняем на URL="http://gofuckbiz.info/"]гофак forum[/URL]
получаем:
URL="http://gofuckbiz.info/"]URL="http://gofuckbiz.info/"]гофак forum[/URL] forum[/URL]

тоже самое, только в html кароче

upd поменял местами получилось ещё хуже))
кодеры, подкскажите плиз, что дописать, чтоб воспринималось полностью фраза в кавычках отдельно
04.04.2011, 20:30
incognito
вот попробуй мой г.код:
<?php
function func_replace($content) {
$search_replace = "THANKS{-}thanks{;}BIG THANKS{-}big thanks{;}VERY BIG THANKS{-}very big thanks";
#или из файла:
//$search_replace = file_get_contents('searchreplace.txt');

$content = strip_tags($content); //удалить все теги
$sr_arr_tmp = explode('{;}',$search_replace);
foreach ($sr_arr_tmp as $value_sr){
$sr_para_tmp = explode('{-}',$value_sr);
$sr_para[$sr_para_tmp[0]] = $sr_para_tmp[1];
$search_long[$sr_para_tmp[0]] = strlen($sr_para_tmp[0]);
}
arsort($search_long,SORT_NUMERIC);

foreach ($search_long as $key_sl=>$value_sl){
$search_arr[] = $key_sl;
$replace_arr[] = $sr_para[$key_sl];
}

return str_replace($search_arr,$replace_arr,$content);
}

add_filter('the_content', 'func_replace');
?>
По идее должно работать так:
- Удалит все теги("img" тоже).
- Расставит массив "что ищем" по уменьшению кол-ва символов.
- Заменит все.

пс Работает ли ХЗ. :pardon:
04.04.2011, 20:52
href
search-regex плагин - поиск и замена по регуляркам, можно проверить перед заменой что найдется и на что заменится
04.04.2011, 20:59
sspy
Есть ли какой-нибудь плагин, чтобы автоматом заменял указаный текст на указаную ссылку в статьях?
Статьи публикуются автоматом. Т.е. если в тексте есть виагра, что должно заменить на ссылку

плагин Internal Link Building
05.04.2011, 15:28
iloveadult
вот попробуй мой г.код:
<?php
function func_replace($content) {
$search_replace = "THANKS{-}thanks{;}BIG THANKS{-}big thanks{;}VERY BIG THANKS{-}very big thanks";
#или из файла:
//$search_replace = file_get_contents('searchreplace.txt');

$content = strip_tags($content); //удалить все теги
$sr_arr_tmp = explode('{;}',$search_replace);
foreach ($sr_arr_tmp as $value_sr){
$sr_para_tmp = explode('{-}',$value_sr);
$sr_para[$sr_para_tmp[0]] = $sr_para_tmp[1];
$search_long[$sr_para_tmp[0]] = strlen($sr_para_tmp[0]);
}
arsort($search_long,SORT_NUMERIC);

foreach ($search_long as $key_sl=>$value_sl){
$search_arr[] = $key_sl;
$replace_arr[] = $sr_para[$key_sl];
}

return str_replace($search_arr,$replace_arr,$content);
}

add_filter('the_content', 'func_replace');
?>
По идее должно работать так:
- Удалит все теги("img" тоже).
- Расставит массив "что ищем" по уменьшению кол-ва символов.
- Заменит все.

пс Работает ли ХЗ. :pardon:
странно, залил в папку плагинов, а админка не видит его(


плагин Internal Link Building
блог бурж, кодировка ���������� ))) в плагине не нашел кодировку вообще
05.04.2011, 15:30
oso
странно, залил в папку плагинов, а админка не видит его(
Надо добавить название плагина, наверно.
/*
Plugin Name:
Description:
Author:
Version:
Author URI:
*/
05.04.2011, 15:36
iloveadult
Надо добавить название плагина, наверно.
/*
Plugin Name:
Description:
Author:
Version:
Author URI:
*/
похоже да, но:
Parse error: syntax error, unexpected T_STRING in ..../wp-content/plugins/auto-auto.php on line 11
05.04.2011, 15:46
oso
<?php
/*
Plugin Name: replace plugin
Description: This is replace text plugin
Version: 1.0
*/
function func_replace($content) {
$search_replace = "THANKS{-}thanks{;}BIG THANKS{-}big thanks{;}VERY BIG THANKS{-}very big thanks";
#или из файла:
//$search_replace = file_get_contents('searchreplace.txt');

$content = strip_tags($content); //удалить все теги
$sr_arr_tmp = explode('{;}',$search_replace);
foreach ($sr_arr_tmp as $value_sr){
$sr_para_tmp = explode('{-}',$value_sr);
$sr_para[$sr_para_tmp[0]] = $sr_para_tmp[1];
$search_long[$sr_para_tmp[0]] = strlen($sr_para_tmp[0]);
}
arsort($search_long,SORT_NUMERIC);

foreach ($search_long as $key_sl=>$value_sl){
$search_arr[] = $key_sl;
$replace_arr[] = $sr_para[$key_sl];
}

return str_replace($search_arr,$replace_arr,$content);
}

add_filter('the_content', 'func_replace');
?>
05.04.2011, 15:52
iloveadult
а бля...
кароче и тот наверно работал, дело в том, что вставляются ссылки, т.е.:
THANKS{-}<a href="http://xyipizda.com/">cheap xyipizda</a>{;}

и оно жалуется, с текстом вроде пашет, только опять, кодировка не верная
05.04.2011, 16:56
iloveadult
search-regex опять-таки не пашет если слова повторяются :(
ну и кроме этого ваще не удобный для автомат работы + в новом не заменяет.
05.04.2011, 16:56
chesser
а чем мой вариант не подошел уж?

только что попробовал со ссылками:
function func_replace($content) {
return str_replace(
array(
'buy cheap',
'Cialis online',
),
array(
'<a href="http://chesser.ru/buy-cheap">buy cheap</a>',
'<a href="http://chesser.ru/Cialis online">Cialis online</a>',
),
$content
);
}

вот результат: http://chesser.ru/blog/services/copywriting/
см "Пример выполненного заказа"

ps: важен порядок search-подстрок и строк-замен
в первом столбце перечислены строки, которые ищем
во-втором - на что меняем, т.е. первый элемент первого столбца меняется на первый элемент второго столбца, второй на второй и тд.
05.04.2011, 16:58
iloveadult
Только что отписал тебе в личку)

твой вариант хороший, но (http://gofuckbiz.info/showpost.php?p=464223&postcount=10), вот поправить бы эту хрень было б круто
05.04.2011, 18:03
chesser
iloveadult, в моем скрипте нужна правильная ручная расстановка/сортировка кеев, которые ищешь и на которые меняешь. Сначало сортируем все кей, которые ты ищешь по длине, начиная от длинного к короткому
function func_replace($content) {
return str_replace(
array(
'gofuck forum',
'forum',
),
array(
'<a href="http://gofuckbiz.info">gofuck forum</a>',
'<a href="http://gofuckbiz.com">forum</a>',
),
$content
);
}

далее, находим те кеи, такие как forum - те которые попали и в замененные и в заменяемые, и добавляем снизу так:
function func_replace($content) {
return str_replace(
array(
'gofuck forum',
'forum',
'jdhgfuiredguidnfuig',
),
array(
'<a href="http://gofuckbiz.info">gofuck jdhgfuiredguidnfuig</a>',
'<a href="http://gofuckbiz.com">forum</a>',
'forum'
),
$content
);
}

jdhgfuiredguidnfuig - это любая уникальная последовательность, которой нет в тексте

по идеи это все можно сделать на автомате
05.04.2011, 18:26
iloveadult
спасибо, ща попробую разобратся)
05.04.2011, 18:28
chesser
во, набросал автомат, теперь порядок строк в заменах не важен:
function func_replace($content) {
$replace = array(
'gofuck forum' => '<a href="http://gofuckbiz.info">gofuck forum</a>',
'forum' => '<a href="http://gofuckbiz.com">forum</a>',
'gofuck forum link' => '<a href="http://gofuckbiz.info">gofuck forum link</a>',
);
function cmp($a, $b) {
$a = strlen($a);
$b = strlen($b);
if ($a == $b) return 0;
return ($a < $b) ? 1 : -1;
}
uksort($replace, 'cmp');

$replace_after = array();
$tmp = $replace;
array_shift($tmp);
foreach($replace as $k=>$v) {
foreach($tmp as $kk=>$vv)
if(strpos($v, $kk) !== false) {
$md5_kk = md5($kk) . 'gofuck';
$replace[$k] = str_replace($kk, $md5_kk, $v);
$replace_after[$md5_kk] = $kk;
}
array_shift($tmp);
}
$content = str_replace(array_keys($replace), array_values($replace), $content);
$content = str_replace(array_keys($replace_after), array_values($replace_after), $content);
return $content;
}

ps два раза проверил - вроде работает
05.04.2011, 19:03
iloveadult
блин, а у меня ваще ниодной замены не сделало
05.04.2011, 20:24
balamutik
Не хочу новую тему создавать,на пирожке когда ставишь ссылки,вокруг них автоматом появляется <noindex> это что такое в вордпрессе и можно ли убрать? Гугл ваще понимает <noindex> или это ток для яндекса?)
05.04.2011, 22:03
chesser
блин, а у меня ваще ниодной замены не сделало

найди строку:
$replace[$k] = str_replace($kk, $md5_kk, $v);

и замени ее на:
$replace[$k] = str_replace($kk, $md5_kk, $replace[$k]);

полный код:

<?php
/*
Plugin Name: Chesser Relpace
Description: Find and replace substrings
Author: Chesser
Version: 1.0
Author URI: http://chesser.ru/blog/
*/

function func_replace($content) {
$replace = array(
'gofuck forum' => '<a href="http://gofuckbiz.info">gofuck forum</a>',
'forum' => '<a href="http://gofuckbiz.com">forum</a>',
'gofuck forum link' => '<a href="http://gofuckbiz.info">gofuck forum link</a>',
);
function cmp($a, $b) {
$a = strlen($a);
$b = strlen($b);
if ($a == $b) return 0;
return ($a < $b) ? 1 : -1;
}
uksort($replace, 'cmp');

$replace_after = array();
$tmp = $replace;
array_shift($tmp);
foreach($replace as $k=>$v) {
foreach($tmp as $kk=>$vv)
if(strpos($v, $kk) !== false) {
$md5_kk = md5($kk) . 'gofuck';
$replace[$k] = str_replace($kk, $md5_kk, $replace[$k]);
$replace_after[$md5_kk] = $kk;
}
array_shift($tmp);
}
$content = str_replace(array_keys($replace), array_values($replace), $content);
$content = str_replace(array_keys($replace_after), array_values($replace_after), $content);
return $content;
}

add_filter('the_content', 'func_replace');
?>

пробовал на твоем примере из лички, работало
05.04.2011, 22:18
iloveadult
работает, ахуенно, спасибо
06.04.2011, 00:02
sergeospb
Так как лично у меня на блогах и так стоит куча плугинов, что юзают add_filter('the_content', 'xxx), чтобы у меня заработало я поправил:
add_filter('the_content', 'func_replace', 100);
06.04.2011, 09:49
chesser
тоже добавил параметр приоритета в код wordpress-плагина автозамены текста (http://chesser.ru/blog/wordpress-plugin-chesser-autoreplace-text/). Может потом еще веб-форму настройки правил прикручу.
Хотел вчера залить плагин в wordpress svn, что-то папку с плагином создавать не хочет. Может апрув надо ждать? Хотя с предыдущим плагином не было таких проблем :eek:
13.04.2011, 03:07
chesser
кстати, залил новую версию плагина в репозиторий Wordpress
у кого работает автоматическая установка плагинов в админ зоне wp, можно найти мой плагин автозамены текста по слову chesser

инструкция по настройке по ссылке выше, но там все просто: таблица из двух колонок "что искать" и "на что заменять".

С юникодом не стал заморачиваться, как-то оно там криво выходит с ним.

Если есть баги - пишите, поправлю

Работает на vBulletin® версия 3.8.6. Copyright ©2000-2011, Jelsoft Enterprises Ltd. Перевод: zCarot