it-swarm.com.de

Wie finde ich einen Anhang anhand seines Namens?

Ist es möglich, die Anhangs-ID anhand ihres Namens abzurufen? Und auf einmal kann es möglich sein, Elternpost zu bekommen, der dieser Anhang zugeordnet ist?

1
Kirix

Sie müssen benutzerdefinierten Code schreiben, um die Anhangs-ID und post_parent von name / slug oder filename zu erhalten (falls dies beim Hochladen von Dateien nicht geändert wurde).

Fügen Sie den folgenden Code in die Datei functions.php Ihres Themas ein

if( ! ( function_exists( 'wp_get_attachment_by_post_name' ) ) ) {
    function wp_get_attachment_by_post_name( $post_name ) {
            $args           = array(
                'posts_per_page' => 1,
                'post_type'      => 'attachment',
                'name'           => trim( $post_name ),
            );

            $get_attachment = new WP_Query( $args );

            if ( ! $get_attachment || ! isset( $get_attachment->posts, $get_attachment->posts[0] ) ) {
                return false;
            }

            return $get_attachment->posts[0];
    }
}

dann können Sie die Funktion wie folgt aufrufen: -

$attachment = wp_get_attachment_by_post_name( $post_name );
// Replace post_name by the name/slug of the attachment
// It will give you an object, which you can render like below to get the ID and post_parent
if ( $attachment ) {
    echo $attachment->ID; // Gives the id of the attachment
    echo $attachment->post_parent; // Gives the post_parent id
    echo $attachment->post_title; // Gives the attachment title.
}
6
Maruti Mohanty

Ein anderer möglicher Ansatz besteht darin, $ wpdb direkt zu verwenden, um eine SQL-Abfrage in der Tabelle posts mit dem gesuchten Post-Titel und mit post_type "attachment" durchzuführen.

function get_attachment_url_by_title( $title ) {
    global $wpdb;

    $attachments = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_title = '$title' AND post_type = 'attachment' ", OBJECT );
    //print_r($attachments);
    if ( $attachments ){

        $attachment_url = $attachments[0]->guid;

    }else{
        return 'image-not-found';
    }

    return $attachment_url;
}
// usage:
get_attachment_url_by_title('your_image_title');

Beachten Sie, dass dieser Code den ersten Anhang mit diesem Titel zurückgibt.


Alternative Möglichkeit, ohne SQL-Abfrage. Besser in den meisten Fällen:

function get_attachment_url_by_title( $title ) {

$attachment = get_page_by_title($title, OBJECT, 'attachment');
//print_r($attachment);

  if ( $attachment ){

    $attachment_url = $attachment->guid;

  }else{
    return 'image-not-found';
  }

  return $attachment_url;
}

echo get_attachment_url_by_title('your_image_title');
2
Snade

get_page_by_title() erledigt den Trick.

Mit einer vollständigen URL als Titel:

get_page_by_title( pathinfo( 'https://www.example.com/file.jpg' )['filename'], "OBJECT", 'attachment' );

Gibt WP_Post Object oder Null zurück, wenn keine Posts/Anhänge gefunden wurden.

0
Lukas Heuser

Basis ist WordPress Codex ,

anhang '- ein Anhang. Während der Standardwert für WP_Query post_status "Publizieren" ist, haben Anhänge den Standardwert post_status "Vererben". Dies bedeutet, dass keine Anhänge zurückgegeben werden, es sei denn, Sie haben post_status explizit auf 'inherit' oder 'any' gesetzt. (Siehe post_status unten)

0
J. Li