J'ai utilisé ce code:
function remove_first_image ($content) {
if (!is_page() && !is_feed() && !is_feed()) {
$content = preg_replace("/<img[^>]+\>/i", "", $content, 1);
} return $content;
}
add_filter('the_content', 'remove_first_image');
depuis quelques années maintenant sur mon site qui compte près de 20 000 posts avec des images insérées en haut. J'ai un plugin qui utilise également la première image en tant qu'image sélectionnée. Parfois, je dois quand même insérer une première image dans le contenu pour ne pas supprimer une autre image que j'ai postée.
J'aimerais que la première image du contenu soit complètement supprimée des publications. de sorte que, dans le futur, je n'ai pas à insérer une image sélectionnée dans le contenu à chaque fois, il suffit que d'autres images apparaissent lorsque j'ai plusieurs images. Jusqu'à présent, je n'ai rien trouvé à ce sujet, si ce n'est de devoir aller dans 20 000 messages et de supprimer la première image.
Des idées?
Je ne connais aucun plugin spécifique à cela, il n'y a rien dans WP qui le fasse mais ce n'est pas trop difficile à implémenter avec un peu de php, même 20k posts ne devraient pas être trop extrêmes. En fonction des paramètres de votre serveur, vous devrez peut-être appliquer certaines solutions de contournement pour vous assurer que la connexion reste active, mais l'idée de base serait de parcourir toutes les publications, de vérifier qu'elles sont correctes (pas de page, de révision, de type personnalisé, etc.) puis exécutez une chaîne de remplacement sur le contenu très semblable au code que vous avez déjà.
Ceci n'est pas testé, juste à titre d'exemple:
$query = new WP_Query( array(
'post_type' => 'post',
'post_status' => 'publish'
) );
foreach ( $query->posts as $edit_post ) {
$edit_post->post_content
wp_update_post( array(
'ID' => $edit_post->ID,
'post_content' => preg_replace( "/<img[^>]+\>/i", "", $edit_post->post_content, 1 )
);
}
Vous voudrez probablement mettre cela dans un plugin qui lui est propre avec un code de page d’administrateur pour le faire tourner dans un endroit sûr, espérons que vous aurez l’idée.
WP-CLI permet d'effectuer des éditions en bloc avec search-replace des chaînes de la base de données et pourrait probablement être utilisé pour faire quelque chose de similaire.
$ wp search-replace '/<img[^>]+\>/i' '' wp_posts --regex
Si vous voulez seulement le cacher, vous pouvez le faire en CSS.
.your-post-content-class img:first-of-type { display:none; }
Si vous voulez vraiment supprimer si de post_content
, vous pouvez obtenir le premier tag d'image dans votre post_content
puis le mettre à jour.
function removeFirstImgTag($post_id) {
$post = get_post($post_id);
$content = $post->post_content;
preg_match('<img([\w\W]+?)/>', $content, $matches);
$content = str_replace($matches[0][0], '', $content);
wp_update_post(array(
'ID' => $post_id,
'post_content' => $content,
));
}
Vous obtenez le post_content sans apply_filters('the_content')
, puis vous obtenez le premier tag img avec regex, puis vous le mettez à jour.
Je n'ai pas encore testé cela, mais je pense que ça marche :)
Vous pourriez probablement faire cela au début en utilisant quelque chose comme ceci
$('img ')[0].remove()