it-swarm.com.de

Erstes Bild dauerhaft aus Beiträgen entfernen

Ich habe mehr als 2.500 Posts auf meiner Site, bei denen ich Bilder auf herkömmliche Weise in den Post-Content selbst eingefügt habe.

Beim Upgrade auf ein anderes Thema wird auf der einzelnen Postseite jetzt auch das vorgestellte Bild vor dem Titel angezeigt (den ich behalten möchte), aber ich möchte jetzt das erste Bild aus dem Inhalt entfernen, damit keine doppelten Bilder angezeigt werden.

Ich weiß, dass dies mit diesem Filter möglich ist, aber gibt es eine Möglichkeit, permanent die ersten Bilder aus meinen alten Posts zu entfernen, außer die einzelnen manuell zu durchsuchen?

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');

Ich habe das Gefühl, dass dieser Filter ressourcenintensiv und sehr unflexibel für Dinge sein könnte, die ich in Zukunft in Beiträgen tun möchte.

Ein anderer Thread erwähnte "Exportieren Sie Ihre Datenbanktabellen auf Ihren Desktop. Dann können Sie alle unerwünschten Tags mit einem beliebigen Texteditor wie Notepad ++ entfernen." aber ich bin nicht vertraut damit.

Jede Hilfe wird geschätzt. Vielen Dank

2
user2803938

Wie @s_ha_dum vorschlägt, können Sie alle Ihre Posts durchlaufen und den Inhalt der einzelnen Posts aktualisieren.

Das Folgende bringt Sie auf die Idee, ist aber nicht getestet:

$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;

Um eine PHP Zeitüberschreitung zu vermeiden, habe ich eine begrenzte Anzahl von Posts hinzugefügt, die mit einem bestimmten Offset aktualisiert werden sollen. Sie können dies an Ihre Bedürfnisse anpassen. Versuchen Sie es am besten zuerst an einem einzelnen Beitrag, während Sie ihn testen.

Aber Denken Sie daran, Ihre Datenbank zu sichern, bevor Sie dies testen !

Demo Plugin - Erster Image Remover

Hier ist ein Demo-Plugin mit einer benutzerdefinierten Administrationsseite:

Admin page

und es ist ein eigener Admin-Menüpunkt:

Admin menu

Sie können eine Plugin-Datei /wp-content/plugins/first-image-remover/first-image-remover.php mit folgendem Code erstellen:

<?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 
    );
}

wo Sie darauf zugreifen können:

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

Sie können es dann mit den folgenden GET-Parametern an Ihre Bedürfnisse anpassen:

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

Wenn Sie es im Aktualisierungsmodus (wpse_update=yes) ausführen, erhalten Sie Folgendes:

Update mode

Sie können dies dann hoffentlich erweitern und an Ihre Bedürfnisse anpassen.

4
birgire

Search RegEx ist ein gutes Plugin, um zu suchen und zu ersetzen (optional mit grep) und durch alle Beiträge, Seiten, Auszüge, Kommentare, Titel und Meta zu speichern.

0
markratledge