wake-up-neo.net

Fügen Sie ein Bild per API in einen Beitrag ein

Mit dem folgenden Code kann ich einen neuen Beitrag erstellen und ein Bild als Anhang über die übermittelten Daten eines Formulars in das Verzeichnis upload von wordpress hochladen.

    $new_post = array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish',
        'post_date' => date('Y-m-d H:i:s'),
        'post_author' => $user_ID,
        'post_type' => 'post',
        'post_category' => array(3)
    );
    $post_id = wp_insert_post($new_post);

    if (!function_exists('wp_generate_attachment_metadata')){
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');
    }
    if ($_FILES) {
        foreach ($_FILES as $file => $array) {
            if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                return "upload error : " . $_FILES[$file]['error'];
            }
            $attach_id = media_handle_upload( $file, $post_id );
        }   
    }

Ich möchte ein Bild einfügen, um es zu posten, nicht das vorgestellte Bild ersetzen, daher ist die Funktion set_post_thumbnail() nicht geeignet. Ich habe festgestellt, dass, wenn ich ein Bild zum Posten manuell einfüge, der folgende HTML-Code generiert wird:

<a href="http://192.168.1.12/wp/wp-content/uploads/2012/09/H530U_08.jpg"><img class="alignnone size-medium wp-image-136" title="HARP_SH530U_0" src="http://192.168.1.12/wp/wp-content/uploads/2012/09/HARP_SH530U_08-300x167.jpg" alt="" width="300" height="167" /></a>

Welche API würde also die Funktion zum Einfügen von Bildern zum Posten bereitstellen, den obigen HTML-Code generieren und das vorgestellte Bild nicht ersetzen?

Vielen Dank

3
Charles Yeung

Sie können das hochgeladene Bild als Beitragsminiatur festlegen über,

update_post_meta($post_id,'_thumbnail_id',$attach_id);

Beispiel...

if ($_FILES) {
    foreach ($_FILES as $file => $array) {
        if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
            return "upload error : " . $_FILES[$file]['error'];
        }
        $attach_id = media_handle_upload( $file, $post_id );
    }   
}

update_post_meta($post_id,'_thumbnail_id',$attach_id);

Wenn Sie eine Reihe von Bildern hochladen, möchten Sie möglicherweise angeben, welches Bild durch Verweisen auf den Schlüssel angezeigt wird.

$file[0] //for the first image in the array
$file[1] //for the second image in the array
$file[2] //for the third image in the array
etc...

... aber das sollte beim Hochladen eines einzelnen Bildes nicht nötig sein.

Aktualisieren:

Basierend auf Ihren Kommentaren, wenn Sie das Bild am Anfang oder vor dem Inhalt Ihres Beitrags einfügen möchten, ist es wahrscheinlich das Beste, wenn Sie die the_content -Funktion so filtern,

add_filter( 'the_content', 'insert_img_to_post', 20 );

function insert_img_to_post( $content ) {

    global $post;
    $post_id = $post->ID;

    if ( is_single() )

        $content = sprintf(
            '<img class="post-icon" src="%s" alt="Post icon" title=""/>',
            wp_get_attachment_url(get_post_meta( $post_id, '_thumbnail_id', true )),
            $content
        );

    return $content;
}

... füge diese Funktion als separate Funktion/Filter in deine functions.php Datei ein. Versuchen Sie nicht, es in Ihrer wp_insert_post -Funktion zu bündeln, da es sonst nicht funktioniert. Dies soll von selbst ausgeführt werden, indem Sie den the_content-Filter aktivieren, das Bild am oberen Rand des Posts vor dem Inhalt einfügen und dann den Inhalt darunter anhängen.

Dies wird derzeit auf einer einzelnen Postseite (is_single) ausgeführt, wenn Sie möchten, dass sie auf einer anderen Seite (z. B. einer Seite) ausgeführt wird, und ändern Sie sie in is_page oder in ein anderes bedingtes Tag, das Ihren Anforderungen entspricht.

5
userabuser