Массовые обновления для публикации контента


Хорошо, итак, у меня есть пользовательский тип записи (назовем его "custompost"), содержащий около 3000 сообщений, и в каждом из них содержится около 150 расширенных пользовательских элементов данных полей. Я пытаюсь обновить post_content для всего этого с помощью плагина, который я сделал:

<?php

/**
 * Plugin Name:       Bulk Post Update
 * Version:           1.0.0
 **/

add_action('init','bulk_post_update');

function bulk_post_update(){

$my_posts = get_posts( array('post_type' => 'custompost', 'posts_per_page' => -1 ) );

foreach ( $my_posts as $my_post ):

$my_post->post_content = 'Text I want to update all my post content to';
wp_update_post( $my_post );

endforeach;
}

?>

Все работает нормально, если я просто использую небольшое значение, например 'posts_per_page' => 50, но если я попытаюсь использовать -1 для всех сообщений, то я думаю, что есть проблемы с памятью, так как мой сайт просто опустеет.

В любом случае, чтобы получить это работаешь? Либо путем увеличения объема памяти, либо каким-то другим способом?

Может быть, как-то запустить это в партиях по 50? Как бы я сделал это не утомительным способом?

Любая помощь/предложения приветствуются.

Заранее большое спасибо.

Author: joeyjoejoejrshabidu, 2016-10-13

1 answers

<?php

/**
 * Plugin Name: Bulk Post Update
 * Version:     1.0.0
 *
 * @author Nabil Kadimi <[email protected]>
 * $link   http://wordpress.stackexchange.com/a/242499/17187
 **/

add_action( 'init', function() {

    global $wpdb;

    $table            = $wpdb->posts;
    $post_type        = 'custompost';
    $new_post_content = 'Text I want to update all my post content to';

    $affected = $wpdb->query(
        $wpdb->prepare( "UPDATE {$table} SET post_content = %s, WHERE post_type = %s"
            , $new_post_content
            , $post_type
        )
    );

    echo $affected . ' rows modified, please disable code.' . "\n";
    echo 'File: ' . __FILE__ . "\n";
    echo 'Line: ' . __LINE__ . "\n";
    die();
} );

Редактировать

Основываясь на нашем обсуждении, я считаю, что переопределение контента на лету с помощью кода будет менее интенсивным на PHP и MySQL, вот как я бы это сделал:

<?php

/**
 * Plugin Name: Override Post Content
 * Version:     1.0.0
 *
 * @author Nabil Kadimi <[email protected]>
 * $link   http://wordpress.stackexchange.com/a/242499/17187
 **/

add_filter( 'the_content', function( $content ) {

    global $post;
    $custom text = 'blah [blah]';

    /**
     * Ignore other post types.
     */
    if ( 'custompost' !== $post->post_type ) {
        return $content;
    }

    /**
     * Return the value I want to override with.
     */
    return do_shortcode( $custom_text );
} );
 0
Author: Nabil Kadimi, 2016-10-13 14:23:06