J'ai ici le curseur de la pièce qui prend toutes les images de la galerie. Je reçois les pièces jointes par le code suivant:
$attachments = get_posts(array('post_type' => 'attachment', 'post_parent' => $post->ID));
Mais cette fonction me donne également des images, qui ont été affichées en ligne sur une page. Si je regarde l'article image, je peux voir l'image dans la galerie d'onglets. L'image est également affichée dans l'éditeur.
Comment puis-je exclure des images insérées dans l'éditeur?
J'ai vu qu'il existe une option exclude
pour get_posts
, mais ni get_the_post_thumbnail();
ni get_post_thumbnail_id();
ne fonctionnent pour moi. L'image est toujours incluse dans le curseur et la publication.
Modifier:
Il semble qu'il soit impossible de placer une image dans un article sans la mettre dans la galerie. Si c'est dans la galerie, c'est aussi dans le résultat de get_posts
. Maintenant, j'ai téléchargé un fichier par FTP sur le serveur Web et placé l'image à l'aide d'une URL. Maintenant, cela semble fonctionner, mais ce n'est pas une solution acceptable ...
J'ai eu un problème similaire il y a un moment et j'ai aidé à y répondre ici. Je n'avais pas encore de compte à ce moment-là et je ne trouve pas le message original, sinon je le lierais. Si je me souviens bien, Jan Fabry m'a donné l'ordre de marcher et j'ai piraté quelque chose. Remarquez, je ne connais pas la nature exacte de la façon dont vous insérez des images dans le curseur pièce. J'imagine que vous parcourez les résultats de get_posts et que vous crachez des images une par une. Quoi qu'il en soit, voici du code. Assez moche, mais ça marche.
Commencez donc par utiliser le crochet 'wp_insert_post' pour ajouter une méta-valeur unique à toute image insérée dans le contenu du message.
add_action('wp_insert_post', 'insertedImage_save_meta');
function insertedImage_save_meta($post_id) {
$upPost = get_post($post_id);
$rawPostDoc = new DOMDocument();
@$rawPostDoc->loadHTML($upPost->post_content);
$imgs = $rawPostDoc->getElementsByTagName('img');
foreach($imgs as $img){
$imgIDStr = substr($img->getAttribute('class'), (stripos($img->getAttribute('class'),'wp-image-')+9), 8);
$imgID = preg_replace("[^0-9]", '', $imgIDStr);
if($imgID !== false && $imgID !== '') { // double falsy check because of specific nature of stripos() returns coupled with the preg_replace return. Not sure if this is necessary.
if(get_post_meta($imgID, '_inserted-image', true) === '')
update_post_meta($imgID, '_inserted-image', 'yes');
}
}
}
Ensuite, pour votre affichage, lors de la lecture en boucle de vos objets image, vérifiez cette méta unique avec un appel get_post_meta () et négligez de cracher du code HTML si vous le trouvez.
Donc, si je parcourais mes résultats get_posts avec foreach ($ images en tant que $ image), je procéderais ainsi:
if ( get_post_meta( $image->ID, '_inserted-image', true ) === 'yes' )
continue;
LIMITATIONS: Cela ne supprimera pas la méta-valeur attribuée des images si l'image insérée est supprimée du contenu de l'article, mais reste dans la galerie de l'article. Mais la fonction pourrait très facilement être étendue pour vérifier toutes les images attachées de la publication et supprimer la balise méta si une image ne se trouvait pas dans le contenu du corps.