J'ai actuellement configuré Wordpress pour qu'une publication puisse être copiée sur d'autres sites au sein d'un réseau Wordpress. Cependant, une publication peut être diffusée plus d'une fois et je souhaite vérifier si l'image est déjà publiée dans la table wp_posts
de ce site.
Par exemple, supposons qu'une image ait le chemin de l'image:
/wp-content/uploads/2012/01/an_image.jpg
Toutes les images sont stockées par le réseau dans cette configuration de dossiers (plutôt que le /blogs.dir/files/
par défaut).
En d'autres termes, Wordpress peut-il interroger la base de données pour vérifier si elle se trouve déjà dans la table, ou doit-elle être écrite en tant que requête de base de données PHP?
Oui, une requête de base de données est possible avec WordPress:
function is_image_in_network( $image_name )
{
global $wpdb;
$image = "uploads/2012/01/{$image_name}";
$value = '%'.like_escape( $image ).'%';
$blog_id = get_current_blog_id();
$wpdb->set_blog_id( $blog_id );
$image = $wpdb->get_var(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE post_status = 'publish'
AND post_content LIKE '%s'"
, $value
)
);
return is_null( $image ) ? false : true;
}
Vous pouvez l'utiliser comme fonction dans vos modèles. Ajoutez simplement le nom de l'image que vous recherchez en argument. La nouvelle "balise de modèle" fonctionne comme chaque valeur par défaut WP "balise conditionnelle".
Est-ce que image.php
dans la question est une faute de frappe?
Je laisse la chaîne de recherche %uploads/2012/01/an_image%
sans extension afin de pouvoir capturer toutes les images (images originales et miniatures).
Documentation: Class_Reference/wpdb .
La manière la plus simpledevraitsoit d'utiliser wp_attachment_is_image()
.
if ( ! wp_attachment_is_image( $post_ID ) )
{
// process needed tasks
}
Notez que cela ne prend en compte que les fichiers dont l'en-tête est image/*
ouune extension de 'jpg', 'jpeg', 'jpe', 'gif', 'png'
.
Ceci n'est pas testé.