Специалисты по Wordpress есть вопрос

SR
На сайте с 07.07.2004
Offline
484
926

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

может плагин какой и тп

ноуфоллоу нашел, а вот как анкоры заменить нет

R
На сайте с 20.02.2015
Offline
59
#1

Такой плагин врятли существует. Вариантов два.

1) SQL запрос с preg_replace если установлено это https://github.com/mysqludf/lib_mysqludf_preg расширение, для замены ссылок по шаблону непосредственно в БД.

2) Писать скрипт. Рандомно перебирать записи и опять таки по шаблону regexp заменять ссылки и сохранять результат.

SR
На сайте с 07.07.2004
Offline
484
#2
rereg:
Такой плагин врятли существует. Вариантов два.
1) SQL запрос с preg_replace если установлено это https://github.com/mysqludf/lib_mysqludf_preg расширение, для замены ссылок по шаблону непосредственно в БД.
2) Писать скрипт. Рандомно перебирать записи и опять таки по шаблону regexp заменять ссылки и сохранять результат.

спасибо за ответ

вопрос по запросу

UPDATE wp_posts
SET post_content = REPLACE (post_content, '>АНКОР</a>', ' >подробнее</a>

вот "АНКОР" как обозначить любое содержимое между этих двух символов?

R
На сайте с 20.02.2015
Offline
59
#3
SSA.RU:
спасибо за ответ
вопрос по запросу
UPDATE wp_posts
SET post_content = REPLACE (post_content, '>АНКОР</a>', ' >подробнее</a>

вот "АНКОР" как обозначить любое содержимое между этих двух символов?

С REPLACE никак, я же писал выше PREG_REPLACE

Попробуйте на PHP


<?php
define('db_host', "localhost");
define('db_user', "root");
define('db_pass', "");
define('db_table', "");
define('db_charset', "utf8");

set_time_limit(0);

$db = mysql_connect(db_host, db_user, db_pass);
mysql_select_db(db_table, $db);
mysql_query("set names '".db_charset."'");

$find = "anchor"; // что ишим, можно regex
$replace = "replace_anchor"; // на что заменяем

$sql = mysql_query("select `ID`,`post_content` from `wp_posts`");
while ($row = mysql_fetch_assoc($sql)) {
if (!preg_match_all("#<a\s[^>]*>({$find})</a>#i", $row['post_content'], $matches))
continue;

foreach ($matches[0] as $idx => $tag) {
$tag = str_replace($matches[1][$idx], $replace, $matches[0][$idx]);
$row['post_content'] = str_replace($matches[0][$idx], $tag, $row['post_content']);
}

mysql_query("update `wp_posts` set `post_content` = '".mysql_real_escape_string($row['post_content'])."' where `ID` = ".intval($row['ID']));
if (mysql_affected_rows())
echo("<pre>Update post_id: {$row['ID']}</pre>");
flush();
}
?>

Есть у меня похожий код, слегка подправил под вашу задачу. Он как раз таки перебирает записи и заменяет по шаблону.

SR
На сайте с 07.07.2004
Offline
484
#4
rereg:
С REPLACE никак, я же писал выше PREG_REPLACE
Попробуйте на PHP

<?php
define('db_host', "localhost");
define('db_user', "root");
define('db_pass', "");
define('db_table', "");
define('db_charset', "utf8");

set_time_limit(0);

$db = mysql_connect(db_host, db_user, db_pass);
mysql_select_db(db_table, $db);
mysql_query("set names '".db_charset."'");

$find = "anchor"; // что ишим, можно regex
$replace = "replace_anchor"; // на что заменяем

$sql = mysql_query("select `ID`,`post_content` from `wp_posts`");
while ($row = mysql_fetch_assoc($sql)) {
if (!preg_match_all("#<a\s[^>]*>({$find})</a>#i", $row['post_content'], $matches))
continue;

foreach ($matches[0] as $idx => $tag) {
$tag = str_replace($matches[1][$idx], $replace, $matches[0][$idx]);
$row['post_content'] = str_replace($matches[0][$idx], $tag, $row['post_content']);
}

mysql_query("update `wp_posts` set `post_content` = '".mysql_real_escape_string($row['post_content'])."' where `ID` = ".intval($row['ID']));
if (mysql_affected_rows())
echo("<pre>Update post_id: {$row['ID']}</pre>");
flush();
}
?>

Есть у меня похожий код, слегка подправил под вашу задачу. Он как раз таки перебирает записи и заменяет по шаблону.

спасибо

поясните до конца плз:)

как запустить этот скрипт?

R
На сайте с 20.02.2015
Offline
59
#5


define('db_host', "localhost");
define('db_user', "root"); // имя пользователя БД
define('db_pass', ""); // пароль
define('db_table', ""); // имя базы данных
define('db_charset', "utf8");


$find = "anchor"; // анкор который надо заменить
$replace = "replace_anchor"; // на что заменить

Отредактируйте как выше, закиньте скрипт на сервер в любое место и выполните, предварительно сделав бекап БД.

SR
На сайте с 07.07.2004
Offline
484
#6
rereg:

define('db_host', "localhost");
define('db_user', "root"); // имя пользователя БД
define('db_pass', ""); // пароль
define('db_table', ""); // имя базы данных
define('db_charset', "utf8");


$find = "anchor"; // анкор который надо заменить
$replace = "replace_anchor"; // на что заменить


Отредактируйте как выше, закиньте скрипт на сервер в любое место и выполните, предварительно сделав бекап БД.

да я понял, что надо базу вписать и тп

возрващаемся к самому первому вопросу, что надо заменить "ХХХХХ" любой анкор на определенный, какая функция у "любого анкора"

R
На сайте с 20.02.2015
Offline
59
#7

PHP я так понял знаите..

Вот же:

$find = "anchor"; // анкор который надо заменить

$replace = "replace_anchor"; // на что заменить

для любого анкора $find = "[\s\S]+?"

либо правте саму регулярку "#<a\s[^>]*>({$find})</a>#i" как вам удобней.

Вроде все понятно.. не понимаю в чем трудность.

SR
На сайте с 07.07.2004
Offline
484
#8
rereg:
PHP я так понял знаите..
Вот же:
$find = "anchor"; // анкор который надо заменить
$replace = "replace_anchor"; // на что заменить

для любого анкора $find = "[\s\S]+?"
либо правте саму регулярку "#<a\s[^>]*>({$find})</a>#i" как вам удобней.

Вроде все понятно.. не понимаю в чем трудность.

трудность в то что я не знаю ни пхп ничего:) не работаю с пхп

код читать умею

кладу скрипт в корень сайта, с расширением php запускаю, получаю белый лист

что не правильно делаю?:)

R
На сайте с 20.02.2015
Offline
59
#9

Положите сюда, то что положили в корень сайта.

И это сделали $find = "[\s\S]+?" для любого анкора?

SR
На сайте с 07.07.2004
Offline
484
#10
rereg:
Положите сюда, то что положили в корень сайта.
И это сделали $find = "[\s\S]+?" для любого анкора?

все получилось

была синтаксическая ошибка

спасибо!!!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий