it-swarm.com.de

Wie überprüfe ich, ob das Bild bereits in der Post-Datenbank einer Site gespeichert ist? (Netzwerk)

Ich habe derzeit Wordpress so konfiguriert, dass ein Beitrag auf andere Websites innerhalb eines Wordpress-Netzwerks kopiert werden kann. Ein Beitrag kann jedoch mehrmals gesendet werden, und ich möchte überprüfen, ob das Bild bereits in der Tabelle wp_posts dieser Site veröffentlicht ist.

Nehmen wir als Beispiel an, ein Bild hat den Bildpfad:

/wp-content/uploads/2012/01/an_image.jpg

Alle Bilder werden vom Netzwerk in diesem Ordnersetup gespeichert (anstelle des Standardcodes /blogs.dir/files/).

Kann Wordpress mit anderen Worten die Datenbank abfragen, um zu überprüfen, ob diese bereits in der Tabelle enthalten ist, oder muss sie als PHP -Datenbankabfrage geschrieben werden?

6
Ollie

Ja, eine Datenbankabfrage ist mit WordPress möglich:

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

Sie können es als Funktion in Ihren Vorlagen verwenden. Fügen Sie einfach den Bildnamen hinzu, den Sie als Argument suchen. Das neue "Template Tag" funktioniert wie jedes Standard-WP "Conditional Tag".

Ist der image.php in der Frage ein Tippfehler?

Ich lasse die Suchzeichenfolge %uploads/2012/01/an_image% ohne Erweiterung, damit alle Bilder (Original und Miniaturansichten) erfasst werden.

Dokumentation: Klassenreferenz/wpdb .

2
brasofilo

Der einfachste Weg sollte sein wp_attachment_is_image() zu benutzen.

if ( ! wp_attachment_is_image( $post_ID ) )
{
    // process needed tasks
}

Beachten Sie, dass dies nur die Dateien berücksichtigt, die einen Header von image/* oder eine Erweiterung von 'jpg', 'jpeg', 'jpe', 'gif', 'png' haben.

Dies wird nicht getestet.

0
kaiser