web-dev-qa-db-ja.com

添付ファイルが添付されている投稿を探す

この配列を使用して作成された添付ファイルIDのリストがあります。

$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );

このリストから画像IDを取り出して、画像が添付されているPOSTのタイトルとパーマリンクを見つけることは可能ですか?

メディアライブラリがそれを示しているのでそれが実行可能であることを私は知っている、しかし私はコーデックスでこれをするための正しい方法を見つけることができない。

私はこのコードを試しましたが、添付されている投稿ではなく、タイトルとパーマリンクを添付ファイル自体に返します。

$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);
4
Pat

だから、あなたがこれで始めるなら:

$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );

$all_imagesオブジェクトの配列です。それぞれ一歩ずつ進みます。

foreach ( $all_images as $image ) {}

そのforeachの中で、$postオブジェクトに利用可能な通常のパラメータを使うことができます:

  • $image->IDは添付ファイル投稿のIDです
  • $image->post_parentは添付ファイル投稿のparent postのIDです

それでは、 get_the_title()get_permalink() を使って、自分のやりたいことを手に入れましょう:

// Get the parent post ID
$parent_id = $image->post_parent;
// Get the parent post Title
$parent_title = get_the_title( $parent_id );
// Get the parent post permalink
$parent_permalink = get_permalink( $parent_id );

それはほとんどそれです!

すべてを一緒に入れて:

<?php
// Get all image attachments
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
// Step through all image attachments
foreach ( $all_images as $image ) {
    // Get the parent post ID
    $parent_id = $image->post_parent;
    // Get the parent post Title
    $parent_title = get_the_title( $parent_id );
    // Get the parent post permalink
    $parent_permalink = get_permalink( $parent_id );
}
?>
4
Chip Bennett

$imagesは、投稿オブジェクト(添付ファイル)の配列です。 wp_list_pluckを使って、親のIDを配列に取り出すことができます。 (array_uniquearray_filterはそれぞれ重複したIDと空のIDを削除します - これは望ましくないかもしれません)。

投稿のパーマリンクとタイトルを取得するには、IDをループ処理して get_permalinkget_the_title を使用します。

$images = get_posts( array(
    'post_type' => 'attachment',
    'numberposts' => -1,
) );
$parents = array_filter(wp_list_pluck($images,'post_parent'));
$parents = array_unique($parents);
echo "<ul>";
foreach ($parents as $id){
    echo "<li><a href='".get_permalink($id)."' >".get_the_title($id)."</a></li>";
}
echo "</ul>";
2
Stephen Harris