Обновление настраиваемого поля WordPress Advance на 40000 существующих сообщений - PullRequest
0 голосов
/ 28 января 2019

У меня 40000 сообщений на моем сайте.Вчера я создал новое расширенное настраиваемое поле со значением по умолчанию.Когда я открываю любую существующую запись, значение по умолчанию не отображается, однако, когда я нажимаю кнопку обновления или создаю новую запись, отображается значение по умолчанию.

Я нашел онлайн-скрипт для размещения в файле function.phpэто обновляет значения автоматически.Сценарий

add_action('admin_init', 'set_default_acf_values');

function set_default_acf_values() {

$args = [
    'post_type'      => 'chemicals',
    'posts_per_page' => -1,
];

   $posts = get_posts($args);

   foreach($posts as $post) 
    {
         if (empty(get_field('stock_1', $post->ID))) {
         update_field('stock_1', DEFAULT_AD_LINK, $post->ID);
    }





}
}

, однако, когда я запускаю сценарий, он показывает ошибку памяти.

Your PHP code changes were rolled back due to an error on line 916 of file wp-includes/meta.php. Please fix and try saving again.

Allowed memory size of 805306368 bytes exhausted (tried to allocate 20480 bytes)

Я полагаю, причина, по которой он показывает ошибку памяти, потому что слишком много сообщений.

Я также увеличил лимит памяти в файле wp-config.php, но это совсем не помогло

define( 'WP_MEMORY_LIMIT', '256M' );

Мне нужен способ извлечения значения по умолчанию из полей NEW насуществующие сообщения ИЛИ обновлять все существующие сообщения без получения ошибки памяти.

любая помощь или указатель будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 28 января 2019

вы можете попробовать ниже код.

$args = [
    'post_type'      => 'chemicals',
    'posts_per_page' => 10000,
];

   $posts = get_posts($args);

   foreach($posts as $post) 
    {
         if (empty(get_field('stock_1', $post->ID))) {
         update_field('stock_1', DEFAULT_AD_LINK, $post->ID);
    }

после этого вы можете использовать

$args = [
        'post_type'      => 'chemicals',
        'offset'  => 10000,
        'posts_per_page' => 10000,
    ];

       $posts = get_posts($args);

       foreach($posts as $post) 
        {
             if (empty(get_field('stock_1', $post->ID))) {
             update_field('stock_1', DEFAULT_AD_LINK, $post->ID);
        }

, он даст вам следующий 10000 пост, который начинается с 10001

...