До того, как я узнал о возможности добавления мета-поля (с пользовательскими мета-выборами постов) на страницу и в редактор постов, я использовал (и до сих пор в какой-то степени) использую категории для определения пользовательских мета-постов.
Например, чтобы сделать публикацию nofollow или noindex, я создал категорию с названием nofollow и другую с названием noindex и назначил одну или обе эти категории публикации или странице.
Затем в моем файле header.php я бы выполнил тест in_category, чтобы записать на страницу соответствующие метатеги.
Пример:
<?php
if (in_category('noindex') && in_category('nofollow')){?>
<meta name="robots" content="noindex, nofollow">
<?php}?>
У меня также есть пользовательские категории для таких вещей, как «Отключить AdSense для этой страницы», «Не показывать прикрепленные изображения для этой страницы», «Скрыть эту страницу из меню» и т. д.
Итак, теперь, когда я решил отказаться от использования категорий, где я должен использовать пользовательские метаданные сообщений, вместо этого приведенный выше код в header.php становится…
<?php
if (get_post_meta( $post->ID, '_noindex', true ) && get_post_meta( $post->ID, '_nofollow', true )){>?
<meta name="robots" content="noindex, nofollow">
<?php } ?>
Итак, это мой план, но теперь у меня проблема с обновлением сайтов, которые используют старые средства определения пользовательских параметров публикации через назначения категорий.
Итак, мне нужна маршрутизация, которая касается переназначения значений категории на настраиваемые мета-значения сообщений для каждого сообщения и страницы на сайте, который я обновляю.
Я просто ищу несколько быстрых советов о том, как это сделать, и, возможно, некоторые подсказки кода по необходимой процедуре.
Поскольку это тема, которую можно обновить, как часть процесса обновления, я хотел бы запустить скрипт один раз, когда тема впервые установлена (или пользователь щелкает мою утилиту обновления), который проходит через таблицу параметров и для каждого экземпляра одного из моих настраиваемых назначений категорий он создает необходимое настраиваемое метаназначение для этой записи или страницы.
Например, если сообщение в настоящее время относится к категории «Скрытые», оно будет присвоено метаданным сообщения «_hidden».
Надеюсь, я объяснил это достаточно хорошо. Я ценю любые идеи, которые вы можете предоставить.
Возможно, это так же просто, как серия пользовательских операторов SQL, которые выполняются для каждой возможной категории?
Основная идея заключалась бы в том, чтобы перебирать сообщения и их категории, назначая мета для совпадений.
Что-то вроде этого (обязательно проверьте тестовую копию данных и т.д. и т.п.):
Забыл добавить удаление после завершения:
Хорошо выглядит Рарст. Я попробую и отчитаюсь. Большое спасибо за быстрый и исчерпывающий ответ.
Это может быть плохой идеей, если у вас очень большая база данных. Большинство сайтов, вероятно, могут загружать все сообщения одновременно, но если у вас много тысяч сообщений, это может увеличить время выполнения вашего PHP или что-то в этом роде. WP Core делает такие вещи частями, используя AJAX. Должен быть плагин, который это делает, но я его не нашел.
Если вы тщательно удалили категорию из сообщения, а не удалили ее полностью, вы могли бы использовать небольшое число, например 500 сообщений, и просто продолжать перезагружать страницу/нажимать кнопку до тех пор, пока в запросе категории не останется сообщений.
@ Джереми Кларк, да, это имеет смысл. Во время ответа я не стал вдаваться в подробности, так как мой первоначальный ответ был принят, и я пришел к выводу, что он достаточно хорош для Скотта.