web-dev-qa-db-ja.com

その名前で添付ファイルを見つける方法は?

添付ファイルIDをその名前で取得することは可能ですか?そして、この添付ファイルが割り当てられている親の投稿を取得することは可能ですか。

1
Kirix

添付ファイルIDとpost_parentを name / slug または filename で取得するためのカスタムコードを記述する必要があります(ファイルのアップロード中に変更されていない場合)。

あなたのテーマの functions.php ファイルに以下のコードを入れてください。

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

それからあなたは以下のようにあなたがそれを必要とするところで関数を呼ぶことができます: -

$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

もう1つの可能なアプローチは、$ wpdbを直接使用して、postsテーブル内で、検索された役職とpost_type "attachment"を使用してSQLクエリを実行することです。

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');

このコードはこのタイトルの最初の添付ファイルを返すことに注意してください。


別の方法、SQLクエリなしほとんどの場合より良いです:

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()がうまくいくでしょう。

完全なURLをタイトルとして

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

投稿/添付ファイルが見つからなかった場合は、WP_PostオブジェクトまたはNullを返します。

0
Lukas Heuser

WordPress Codex に基づく

添付ファイル ' - 添付ファイル。デフォルトのWP_Queryのpost_statusは 'publish'ですが、添付ファイルのデフォルトのpost_statusは 'inherit'です。つまり、明示的にpost_statusを 'inherit'または 'any'に設定しない限り、添付ファイルは返されません。 (下記のpost_statusを参照)

0
J. Li