サポート » 使い方全般 » 投稿の付加投稿情報が取得出来ない

  • 解決済 yuki

    (@yuki84yuki)


    投稿の完全削除時にサムネイルを削除する為、function.phpにコードを書きました。
    下記サイトを参考にしています。
    https://securavita.net/wordpress-delete_post_attachment/

    
    function delete_post_attachment( $post_id ) {
      /* 添付画像の削除 */
      $args = array(
        'post_parent' => $post_id,
        'post_type'   => 'attachment', 
        'numberposts' => -1,
        'post_status' => 'any'
      );
      $attachments = get_children($args);
      foreach($attachments as $attachment) {
        wp_delete_post($attachment->ID);
      }
    }
    add_action( 'before_delete_post', 'delete_post_attachment' );
    

    投稿には確かにサムネイル(アイキャッチ画像)を添付していますが
    get_children()は空の配列を返します。
    post_typeをanyに変えるなど対応してみましたが、解決しませんでした。
    どのような原因が考えられますでしょうか?

    また、get_children()が内部的に呼び出すget_posts()についても
    post_typeとpost_parentを指定したものの取得出来ませんでした。

    追記です。
    $post_idは問題無く渡されています。
    なお、テーマファイル(single.php)に記述したところ、問題無く配列が返されています。
    function.php内で使用する方法はありますでしょうか?

    • このトピックはyukiが5ヶ月、 3週前に変更しました。
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • 提示されたコードにおける get_children() は対処の添付ファイルを返すと思います。

    なお、テーマファイル(single.php)に記述したところ、問題無く配列が返されています。

    確認ですが、function.php と記述していますが、実際には functions.php に記述されていますか?

    こんにちは

    投稿に対する添付ファイルを全て取得するのに、get_children はあまりいい方法ではないと思います。
    添付ファイルが持てる親の投稿は、アップロード時に挿入された投稿1つのみです。
    すでに他の投稿に紐づいている画像を、別の投稿のサムネイルに使ったりした場合、画像の親はあくまで最初に紐づいていた画像です。

    最初の投稿が削除された場合、など、これに当てはまらない場合もあると思いますが、どちらにしてもメディアファイルは複数の親を持つことが出来ません。

    get_children で取得できるファイルは、その投稿に最初に添付された画像だけです。

    single.php に記述した場合とは、使っている投稿が異なるのでは・・・と思います。

    yuki

    (@yuki84yuki)

    >ishitaka(@ishitaka)様

    失礼いたしました。
    functions.phpの間違いです。

    >munyagu(@munyagu)様

    サムネイルの仕様について理解しました。
    つまり原因は
    “既に他の投稿時に添付したサムネイルを使用した”
    という理由により起きていたわけですね。
    試しに、新たに添付したサムネイルは
    問題無く削除出来ました。

    また、”投稿に添付したサムネイルは別の別の投稿で再利用しない”
    という運用を行いますので、現在のサムネイルの仕様でも問題ないと思っています。

    なお、サムネイルを消す目的は、サーバーの空き容量対策です。
    定期的に、既に使用されていない画像を
    バッチ処理で消してくれるプラグインでもあれば良いのですが…

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。