2. Нужно отследить по таблицам базы данных связь между идентификатором поста и слагом категории этого поста, чтобы извлечь слаг для использования в целевом адресе при перенаправлении.
Я позавчера по мотивам вашей темы написал статью о перенаправлении со сменой post_id на postname – все работает. Как появится немного свободного времени, может, и с категориями сделаю – нужно посмотреть, как они связаны с постами.
---------- Добавлено 03.11.2016 в 18:25 ----------
Попробуйте сделать внутреннее перенаправление (не указывайте флаг R=301) на index.php?p=$1, тогда, быть может, WP будет сам делать перенаправление на нужные вам адреса, как сказал SeVlad.
Зачем делать два перенаправления? 500 штук – тяжеловато. Нужно сделать на отдельном сайте. Для этого существуют специальные скрипты. Если не найдете в открытом доступе, можно и написать – это не очень сложно.
Это вы, видимо, не поняли, что я написал. Я всего лишь сказал, что то, что вы показали, обычно делается более централизованным путем.
---------- Добавлено 01.11.2016 в 20:29 ----------
Существуют не слишком масштабные каркасы. Отдельная точка входа используется лишь в крайних случаях. Ничего сверхтяжеловесного в вашей задаче я не увидел. После первого обращения к миниатюре она будет сгенерирована скриптом и в дальнейшем отдаваться непосредственно сервером. Кстати, при первом обращении она тоже может отдаваться сервером – для этого у всех популярных серверов есть поддержка специальных неофициальных заголовков (на уровне ядра или расширений).
Фронт-контроллер выполняет обращение к роутеру, по итогам которого запускается обработчик с параметром вроде images/upload/i180x180/image.jpg (первый элемент пути обычно используется для выбора самого обработчика; в созданных мной сайтах обычно и images нет, т.к. этот каталог размещается в корне сайта наравне с каталогом files и сам по себе может быть завязан на одноименный обработчик; upload обычно тоже по-другому использую). Параметр может быть не один, а являться совокупностью уже выделенных из показанной строки элементов: в последнем элементе находится краткое имя файла, в предпоследнем – требуемый формат. Вы можете заранее при загрузке разместить в соответствующей таблице БД нужные строки, чтобы самостоятельно не заниматься проверкой их корректности в момент обращения к файлу – ядро сайта самостоятельно сделает сверку и в случае несовпадения не будет вызывать соответствующий обработчик, а сразу выдаст ошибку.
Если кратко, вы можете во время загрузки файла не создавать дополнительные файлы, а лишь добавить соответствующие им записи в БД.
Можно хаком по маске ^\d+\.htm$ в .htaccess – решение с перенаправлением на /%postname%.htm я уже вижу. На /%category%/%postname%.htm скорее всего будет не намного сложнее, просто я с WP не очень хорошо знаком (поля id и post_name когда-то видел в таблице постов, а вот про категорию что-то не вспомню, но какая-то связь в любом случае должна быть).
sookhov, занимайтесь рубашками, у вас это лучше получается – у меня есть пара – нравятся. А в этом вопросе доверьтесь мнению специалистов. РАН в предыдущем посте все верно написал. Если уж так хочется сделать перенаправление на главную, используйте перенаправление на JavaScript по таймеру (причем я бы дал пользователю достаточно много времени перед срабатыванием перенаправления, чтобы вникнуть в суть произошедшего) и дополнительно выводите ссылку. Страница 404-ой может быть тоже достаточно информативна, так что делать перенаправление вовсе не обязательно.
---------- Добавлено 28.10.2016 в 19:45 ----------
P.S. А почему написание фамилии в домене и в бренде различается? Развод что ли?
Вы еще в запросе попросили выдать вам запись с нужным значением $link[0]. Если соответствующее поле содержит уникальные значения, у вас в результате будет получена либо одна интересующая вас запись, либо ни одной. Замените подобную проверку на такую:
if ($result)
Можно даже прямо в условии написать так:
if ($result=mysqli_fetch_assoc($sql))
Семантика имен переменных немного странная. Чаще $sql обозначают текст запроса, а не его результат. Результат же обозначают $result. А то что вы получили в последней функции, это лишь одна запись из результата запроса, поэтому и название следовало бы подобрать подходящее.
---------- Добавлено 28.10.2016 в 15:46 ----------
barabash: На звание профессионала в php я не претендую...
Это понятно, но в Web-программировании так делать не принято. Если с самого начала так будете писать, потом будет труднее переучиваться. Учитесь все с самого начала делать правильно. Всего хорошего.
1. Написал в личном сообщении.
2. Нужно отследить по таблицам базы данных связь между идентификатором поста и слагом категории этого поста, чтобы извлечь слаг для использования в целевом адресе при перенаправлении.
P1otr, никогда не встречали?
/index.php?route=category/item
/go.php?url=http://example.com/
Если делать полный разбор строки параметров самостоятельно, то можно пожонглировать и ? c &.
Как правильно прописать перенаправление?
Например так:
Я позавчера по мотивам вашей темы написал статью о перенаправлении со сменой post_id на postname – все работает. Как появится немного свободного времени, может, и с категориями сделаю – нужно посмотреть, как они связаны с постами.
---------- Добавлено 03.11.2016 в 18:25 ----------
Попробуйте сделать внутреннее перенаправление (не указывайте флаг R=301) на index.php?p=$1, тогда, быть может, WP будет сам делать перенаправление на нужные вам адреса, как сказал SeVlad.
Нужно в значении переменной использовать знак ":"
Не нужно. Но можно.
Зачем делать два перенаправления? 500 штук – тяжеловато. Нужно сделать на отдельном сайте. Для этого существуют специальные скрипты. Если не найдете в открытом доступе, можно и написать – это не очень сложно.
Это вы, видимо, не поняли, что я написал. Я всего лишь сказал, что то, что вы показали, обычно делается более централизованным путем.
---------- Добавлено 01.11.2016 в 20:29 ----------
Существуют не слишком масштабные каркасы. Отдельная точка входа используется лишь в крайних случаях. Ничего сверхтяжеловесного в вашей задаче я не увидел. После первого обращения к миниатюре она будет сгенерирована скриптом и в дальнейшем отдаваться непосредственно сервером. Кстати, при первом обращении она тоже может отдаваться сервером – для этого у всех популярных серверов есть поддержка специальных неофициальных заголовков (на уровне ядра или расширений).
Это все обычно делается централизованно. В корне сайта размещается основной файл сайта с т.н. фронт-контроллером и .htaccess примерно такого типа:
Фронт-контроллер выполняет обращение к роутеру, по итогам которого запускается обработчик с параметром вроде images/upload/i180x180/image.jpg (первый элемент пути обычно используется для выбора самого обработчика; в созданных мной сайтах обычно и images нет, т.к. этот каталог размещается в корне сайта наравне с каталогом files и сам по себе может быть завязан на одноименный обработчик; upload обычно тоже по-другому использую). Параметр может быть не один, а являться совокупностью уже выделенных из показанной строки элементов: в последнем элементе находится краткое имя файла, в предпоследнем – требуемый формат. Вы можете заранее при загрузке разместить в соответствующей таблице БД нужные строки, чтобы самостоятельно не заниматься проверкой их корректности в момент обращения к файлу – ядро сайта самостоятельно сделает сверку и в случае несовпадения не будет вызывать соответствующий обработчик, а сразу выдаст ошибку.
Если кратко, вы можете во время загрузки файла не создавать дополнительные файлы, а лишь добавить соответствующие им записи в БД.
Можно хаком по маске ^\d+\.htm$ в .htaccess – решение с перенаправлением на /%postname%.htm я уже вижу. На /%category%/%postname%.htm скорее всего будет не намного сложнее, просто я с WP не очень хорошо знаком (поля id и post_name когда-то видел в таблице постов, а вот про категорию что-то не вспомню, но какая-то связь в любом случае должна быть).
sookhov, занимайтесь рубашками, у вас это лучше получается – у меня есть пара – нравятся. А в этом вопросе доверьтесь мнению специалистов. РАН в предыдущем посте все верно написал. Если уж так хочется сделать перенаправление на главную, используйте перенаправление на JavaScript по таймеру (причем я бы дал пользователю достаточно много времени перед срабатыванием перенаправления, чтобы вникнуть в суть произошедшего) и дополнительно выводите ссылку. Страница 404-ой может быть тоже достаточно информативна, так что делать перенаправление вовсе не обязательно.
---------- Добавлено 28.10.2016 в 19:45 ----------
P.S. А почему написание фамилии в домене и в бренде различается? Развод что ли?
Вот эта проверка бессмысленная:
Вы еще в запросе попросили выдать вам запись с нужным значением $link[0]. Если соответствующее поле содержит уникальные значения, у вас в результате будет получена либо одна интересующая вас запись, либо ни одной. Замените подобную проверку на такую:
Можно даже прямо в условии написать так:
Семантика имен переменных немного странная. Чаще $sql обозначают текст запроса, а не его результат. Результат же обозначают $result. А то что вы получили в последней функции, это лишь одна запись из результата запроса, поэтому и название следовало бы подобрать подходящее.
---------- Добавлено 28.10.2016 в 15:46 ----------
На звание профессионала в php я не претендую...