scottb
  • 0
Гуру

Нужен совет > преобразование назначений категорий в настраиваемые мета-значения записей

  • 0

До того, как я узнал о возможности добавления мета-поля (с пользовательскими мета-выборами постов) на страницу и в редактор постов, я использовал (и до сих пор в какой-то степени) использую категории для определения пользовательских мета-постов.

Например, чтобы сделать публикацию 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, которые выполняются для каждой возможной категории?

Share
  1. Основная идея заключалась бы в том, чтобы перебирать сообщения и их категории, назначая мета для совпадений.

    Что-то вроде этого (обязательно проверьте тестовую копию данных и т.д. и т.п.):

    $posts = get_posts( array(
        'numberposts' => -1
    ) );
    
    foreach( $posts as $post ) {
    
        $categories = get_the_category( $post->ID );
    
        foreach( $categories as $category ) {
    
            if( 'Hidden' ==  $category->name )
                add_post_meta( $post->ID, '_hidden', 'yes', true );
        }
    
    }
    

    Забыл добавить удаление после завершения:

    $category = get_category_by_slug( 'hidden' );
    wp_delete_category( $category->term_id );
    
    • 0
    • Хорошо выглядит Рарст. Я попробую и отчитаюсь. Большое спасибо за быстрый и исчерпывающий ответ.

      • 0
    • Это может быть плохой идеей, если у вас очень большая база данных. Большинство сайтов, вероятно, могут загружать все сообщения одновременно, но если у вас много тысяч сообщений, это может увеличить время выполнения вашего PHP или что-то в этом роде. WP Core делает такие вещи частями, используя AJAX. Должен быть плагин, который это делает, но я его не нашел.

      • 0
    • Если вы тщательно удалили категорию из сообщения, а не удалили ее полностью, вы могли бы использовать небольшое число, например 500 сообщений, и просто продолжать перезагружать страницу/нажимать кнопку до тех пор, пока в запросе категории не останется сообщений.

      • 0
    • @ Джереми Кларк, да, это имеет смысл. Во время ответа я не стал вдаваться в подробности, так как мой первоначальный ответ был принят, и я пришел к выводу, что он достаточно хорош для Скотта.

      • 0

Оставить ответ

You must login to add an answer.