webentwicklung-frage-antwort-db.com.de

Wie füge ich einem benutzerdefinierten Beitragstyp programmgesteuert hinzu?

Ich habe einen benutzerdefinierten Beitragstyp, in den ich Daten programmgesteuert importieren möchte. Ich habe diese Anweisungen und diese befolgt und kann dies problemlos für WP typische Seiten und Posts tun.

Mein benutzerdefinierter Beitragstyp verfügt jedoch über benutzerdefinierte Felder, z. B. für Längen- und Breitengrad. Wie kann ich herausfinden, wie auf diese Namen (Array-Schlüssel) im Post-Array verwiesen werden soll?

$defaults = array(
            'comment_status' => 'closed',
            'ping_status' => 'closed',
            'post_author' => $author_id,
            'post_name' => $slug,
            'post_title' => $title,
            'post_status' => 'publish',
            'post_type' => 'custom-post-type',
       longitude => $my_long,   // <- what's the key here?
       latitude  => $my_lat     // <- what's the key here?
            );

$images = array_of_images; // <- how do these get added?

Es gibt ungefähr 40 zusätzliche Felder, denen ich Daten hinzufügen muss.

Darüber hinaus verfügt jeder meiner Inhalte über Bildanhänge, und ich möchte diese auch programmgesteuert hinzufügen (entweder von einer URL oder von meiner lokalen Festplatte, je nachdem, welche Methode am besten geeignet ist).

Als Antwort suche ich ein sehr einfaches, aber voll funktionsfähiges Skript (oder zumindest vollständigen Pseudo-Code), das alle programmatischen Schritte berücksichtigt, die ich ausführen muss, um einen Beitrag mit dem zugehörigen Bild in die Datenbank aufzunehmen Anlagen. Das Ergebnis sollte das gleiche sein, als hätte ich alle Felder ausgefüllt, Medien hochgeladen und in Wordpress auf "Veröffentlichen" geklickt.

3
user658182

Sie sollten zuerst die wp_insert_post() ausführen, die die Beitrags-ID zurückgibt. Verwenden Sie dann diese Beitrags-ID, um Ihre benutzerdefinierten Felder hinzuzufügen. Verwenden Sie add_post_meta() , um die benutzerdefinierten Felder hinzuzufügen.

$post_id = wp_insert_post( $args );

add_post_meta( $post_id, 'longitude', $my_long );
add_post_meta( $post_id, 'latitude', $my_lat );

Für Bildanhänge können Sie sich auf diese Frage beziehen: So stellen Sie das ausgewählte Bild programmgesteuert auf einen benutzerdefinierten Beitrag von außen ein

9
RRikesh

Völlig ungetestet, aber ich habe das gerade zusammengeschmissen:

$post_data = array (
    'comment_status'    => 'closed',
    'ping_status'       => 'closed',
    'post_author'       => $author_id,
    'post_name'         => $slug,
    'post_title'        => $title,
    'post_status'       => 'publish',
    'post_type'         => 'custom-post-type', 
);

$post_ID = wp_insert_post( $post_data );

if ( ! is_wp_error( $post_ID ) ) {

    $post_meta = get_post_meta( $post_ID );

    if ( $post_meta ) {

        foreach ( $post_meta as $key => $value ) {

            if ( preg_match('/(\.jpg|\.png)$/', $value ) {

                $file = file_get_contents( $value );

                $tmpfname = tempnam( '/tmp',  'img' );

                $handle = fopen( $tmpfname );

                fwrite( $handle, $file );

                if ( getimagesize( $tmpfname ) ) {

                    $image_url  = $value;
                    $upload_dir = wp_upload_dir();
                    $image_data = file_get_contents( $image_url );

                    $filename   = end( explode( '/', $image_url ) );
                    $fileName   = end( explode( '/', $filename ) );

                    $uploadDir  = end( explode( 'uploads', $imageUrl ) );
                    $uploadDir  = str_replace( $fileName, '', $uploadDir );

                    $filename   = $fileName;

                    if ( wp_mkdir_p( $upload_dir['path'] ) ) {

                        $file = $upload_dir['basedir'] . $uploadDir . $filename;

                    } else {

                        $file = $upload_dir['basedir'] . $uploadDir . $filename;
                    }

                    file_put_contents( $file, $image_data );

                    $wp_filetype = wp_check_filetype( $filename, null );

                    $attachment = array (
                        'post_mime_type'    => $wp_filetype['type'], 
                        'post_title'        => sanitize_file_name( $filename ), 
                        'post_content'      => '', 
                        'post_status'       => 'inherit',
                    );

                    $attach_id = wp_insert_attachment( $attachment, $file, $post_ID );

                    // Include image.php
                    require_once(ABSPATH . 'wp-admin/includes/image.php');

                    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );

                    wp_update_attachment_metadata( $attach_id, $attach_data );

                }

                fclose( $handle );

            } else {

                add_post_meta( $post_ID, $key, $value );

            }

        }

    }

}

Der Code sollte sich selbst dokumentieren, Sie können jedoch jederzeit fragen, ob Sie Fragen haben oder ob er nicht funktioniert.

1
jacobwarduk
<?php
require_once 'wp-load.php'; //path of wp-load.php

$name = 'my post';
$content = 'dummy Content here';
$featured_image = 'fullimage url.jpg'; //pass here full image url

$post_data = array(
    'post_title'    => wp_strip_all_tags( $name ),
    'post_content'  => $content,
    'post_status'   => 'publish',
    'post_type'     => 'post',
    'post_author'   => 1,
    'post_category' => array(1,2),
    'page_template' => ''
);
$post_id = wp_insert_post( $post_data, $error_obj );

// for custom field
//add_post_meta( $post_id, 'post_date', 'Dec 5, 2018' ); // second parameter is your custom field name, 3rd parameter is value

generate_Featured_Image($featured_image, $post_id );

function generate_Featured_Image( $image_url, $post_id  ){
    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents($image_url);
    $filename = basename($image_url);
    if(wp_mkdir_p($upload_dir['path']))
        $file = $upload_dir['path'] . '/' . $filename;
    else
        $file = $upload_dir['basedir'] . '/' . $filename;
    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );
    $attachment = array(
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => sanitize_file_name($filename),
        'post_content' => '',
        'post_status' => 'inherit'
    );
    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
    $res1= wp_update_attachment_metadata( $attach_id, $attach_data );
    $res2= set_post_thumbnail( $post_id, $attach_id );
    echo 'post created...';
}
?>
0

Post programmgesteuert einfügen und aktualisieren. http://www.pearlbells.co.uk/insert-udpate-wordpress-post-programmatically/

 if( $mydb->num_rows >  0) {

    echo 'Post '.$postCSVContent[0].' exist'.PHP_EOL;
    $template_file = get_post_meta( $postCSVContent[0], '_wp_page_template', true );
    echo 'Template File : '.$template_file.PHP_EOL;

    $updatePost = array(   
        'ID' => $postCSVContent[0],
        'post_title'    => $postCSVContent['1'],
        'post_content'  => $postCSVContent['2'],
        'post_type' => 'doors',
        'post_status'   => 'publish',
        'post_author'   => 1
    );

    wp_update_post( $updatePost );

    update_post_meta( $postCSVContent[0], '_wp_page_template', $template_file );
    updateAcf( $postCSVContent , $postCSVContent[0] );

}
else
{
    echo 'Post '.$postCSVContent[0].' is not existing'.PHP_EOL;        
    echo 'Post parent '.$parentId.PHP_EOL;

    $newIds = wp_insert_post( array(
            'post_title' => $postCSVContent['1'],
            'post_content' => $postCSVContent['2'],
            'post_type' => 'doors',
            'post_status' => 'publish',        
            'post_author'   => 1,
            'post_parent' => $parentId
    ));

    updateAcf( $postCSVContent , $newIds );

Bitte lesen Sie auch das Tutorial, das acf aktualisiert. http://www.pearlbells.co.uk/insert-update-acf-image-repeater-field-programmatically/

0
Liz Eipe C