Eliminar permanentemente la primera imagen de las publicaciones

2

Tengo más de 2,500 publicaciones en mi sitio donde inserté imágenes usando el método tradicional en el contenido de la publicación.

Al actualizar a un tema diferente, la página de publicación única ahora muestra la imagen destacada también antes del título (que deseo conservar), pero ahora me gustaría eliminar la primera imagen de the_content para evitar que se muestren imágenes duplicadas arriba.

Sé que se puede hacer con este filtro, pero ¿hay alguna forma de permanentemente eliminar las primeras imágenes de mis publicaciones anteriores además de revisarlas manualmente?

function remove_first_image ($content) {
if (!is_page() && !is_feed() && !is_feed() && !is_home()) {
$content = preg_replace("/<img[^>]+\>/i", "", $content, 1);
} return $content;
}
add_filter('the_content', 'remove_first_image');

Siento que este filtro puede requerir muchos recursos y ser muy poco flexible para las cosas que deseo hacer en el futuro dentro de las publicaciones.

Otro hilo mencionado "Exporta las tablas de tu base de datos a tu escritorio. Luego puedes eliminar todas las etiquetas no deseadas usando cualquier editor de texto como notepad ++". pero no estoy familiarizado con cómo hacer eso.

Cualquier ayuda es apreciada. Gracias

    
pregunta user2803938 26.04.2014 - 02:43

2 respuestas

4

Tal como sugiere @s_ha_dum, puedes recorrer todas tus publicaciones y actualizar el contenido de cada una.

Lo siguiente te da una idea pero no está probado:

$posts = get_posts( array( 
    'post_type'      => 'post', 
    'posts_per_page' => 500, 
    'offset'         => 0, 
) );

foreach( $posts as $post ):
    // Update each post with your reg-ex content filter:
    $pid = wp_update_post( array( 
        'ID'           => $post->ID,
        'post_content' => preg_replace( "/<img[^>]+\>/i", "", $post->post_content, 1 )
    ) );
    // Show the update process:
    printf( '<p>Post with ID: %d was %s updated</p>', 
        $post->ID, 
        ( 0 < $pid ) ? '' : 'NOT' 
    );     
endforeach;

Para evitar el tiempo de espera de PHP, agregué un número finito de publicaciones para actualizar con un desplazamiento dado. Puede ajustar esto a sus necesidades. Lo mejor es intentarlo primero en una sola publicación mientras lo estás probando.

Pero recuerda hacer una copia de seguridad de tu base de datos antes de probar esto !

Complemento de demostración - Removedor de primera imagen

Aquí hay un complemento de demostración con una página de administración personalizada:

ysupropioelementodemenúdeadministración:

Puede crear un archivo de complemento /wp-content/plugins/first-image-remover/first-image-remover.php con el siguiente código:

<?php
/**
 * Plugin Name: First Image Remover
 * Description: Remove the first image from the post content
 * Plugin URI:  http://wordpress.stackexchange.com/a/142494/26350 
 * Version:     0.0.1
 */

/**
 * Create the 'First Image Remover' admin menu
 */

function wpse_142494_create_menu()
{
    // Create new top-level menu:
    add_menu_page( 
        'First Image Remover', 
        'First Image Remover', 
        'manage_options', 
        'wpse_142494_settings_page', 
        'wpse_142494_settings_page'
    );
}

add_action('admin_menu', 'wpse_142494_create_menu');

/**
 * Create the 'Image Replacer' settings pge
 */
function wpse_142494_settings_page()
{ 
?>
    <div class="wrap">
        <h2>First Image Remover</h2>
        <p>Remove the first image of each post in the selected loop.</p>


        <h3>Help:</h3>
        <p>Avialable GET parameters: 
        <pre>
wpse_ppp - Posts Per Page (int), 
wpse_offset - Offset (int),
wpse_update - Update mode (boolean) 

Update Example for 5 posts with offset 10:

/wp-admin/admin.php?page=wpse_142494_settings_page&wpse_offset=10&wpse_ppp=5&wpse_update=yes
        </pre>
        <h3>Loop:</h3>
        <?php wpse_142494_loop(); ?>
    </div>
<?php
}

/**
 * Fetch posts based on user input
 */
function wpse_142494_loop()
{
    // Only site admin can update posts:
    if( ! current_user_can( 'manage_options' ) ) return;

    // Get user input:
    $params = filter_input_array( INPUT_GET, array( 
        'wpse_offset'  => FILTER_SANITIZE_NUMBER_INT,
        'wpse_ppp'     => FILTER_SANITIZE_NUMBER_INT, 
        'wpse_update'  => FILTER_VALIDATE_BOOLEAN, 
    ) );

    // Fetch posts to update:   
    $posts = get_posts( array( 
        'post_type'      => 'post', 
        'posts_per_page' => ( ! empty( $params['wpse_ppp'] ) )    ? $params['wpse_ppp']    : 10 , 
        'offset'         => ( ! empty( $params['wpse_offset'] ) ) ? $params['wpse_offset'] : 0, 
    ) );

    // Loop through posts:
    $li = '';
    foreach( $posts as $post ):

        if( $params['wpse_update'] ):           
            // Update each post with your reg-ex content filter:
            $pid = wp_update_post( array( 
                'ID'           => $post->ID,
                'post_content' => preg_replace( "/<img[^>]+\>/i", "", $post->post_content, 1 )
            ) );

            // Show the update process:
            $li .= sprintf( '<li>%d - <strong>%s</strong> - was %s updated</li>', 
                $post->ID, 
                $post->post_title,
                ( 0 < $pid ) ? '' : 'NOT' 
            );
        else:
            // Show the post list that will be updated
            $li .= sprintf( '<li>%d - <strong>%s</strong> - will be updated</li>', 
                $post->ID,
                $post->post_title
            );
        endif;

    endforeach;

    // Output:
    printf( '<strong>Settings:</strong> Posts: %d - Offset: %d - Update: %s <ul>%s</ul>', 
        $params['wpse_ppp'], 
        $params['wpse_offset'], 
        $params['wpse_update'] ? 'ON' : 'OFF', 
        $li 
    );
}

desde donde puedes acceder desde:

/wp-admin/admin.php?page=wpse_142494_settings_page

Luego puede ajustarlo a sus necesidades con los siguientes parámetros GET:

/wp-admin/admin.php?page=wpse_142494_settings_page&wpse_offset=10&wpse_ppp=5&wpse_update=no

Cuando lo ejecutes en el modo de actualización ( wpse_update=yes ) obtendrás algo como:

Esperamos poder extender esto y ajustarlo a sus necesidades.

    
respondido por el birgire 26.04.2014 - 05:17
0

Search RegEx es un buen complemento para poder buscar y reemplazar (opcionalmente con grep) y guardar a través de todas las publicaciones, páginas, extractos, comentarios, títulos y meta.

    
respondido por el markratledge 26.04.2014 - 03:20

Lea otras preguntas en las etiquetas