web-dev-qa-db-ja.com

投稿から画像をデタッチする方法は?

最初に this のようないくつかのトピックを見ましたが、それらは私を助けませんでした。


enter image description here 

これらの添付画像を表示するために、single.phpファイルで次のコードを使用しました。

if ( have_posts() ) : while ( have_posts() ) : the_post();           
    $args = array(
        'post_type'   => 'attachment',
        'numberposts' => -1,
        'post_status' => null,
        'post_parent' => $post->ID
    );      
    $attachments = get_posts( $args );
    if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
            echo '<li>';
            echo wp_get_attachment_image( $attachment->ID, 'full' );
            echo '<p>';
            echo apply_filters( 'the_title', $attachment->post_title );
            echo '</p></li>';
        }
    }       
endwhile; endif;

これは添付された画像を表示して正常に動作します。

問題:

添付画像を投稿から削除すると

enter image description here 

削除された画像はその投稿にまだ存在します。

投稿から画像を完全に切り離すにはどうすればよいですか。

P.S Ctrl + F5も試しました

4
Hamed Kamrava

メディアライブラリを list モードで表示した場合

/wp-admin/upload.php?mode=list

そうすると、添付ファイルごとに Attach / Detach リンクが表示されます。

各添付ファイルは、post_parentテーブルのwp_posstフィールドを介して単一の親にのみ添付できます。

投稿エディタから画像を削除しても、post_parentフィールドは0に変更されません。

人生を少し楽にします!

投稿を編集するときに、 Media View popup内でできるようにすると、メディアライブラリ内で検索するのに長い時間がかかる可能性があるため、便利です。

Custom link 

最初にカスタムBackboneマイクロテンプレートを作成し、それを 添付ファイルの詳細 ビューに追加します。

<script type="text/html" id="tmpl-wpse-open-in-library">
    <div class="wpse-open-in-library">
        <a href="<?php echo admin_url('upload.php?mode=list&p=');?>{{ data.id }}" target="_blank">
             <?php _e( 'Open in Media Library' ); ?>
        </a>
    </div>
</script>

{{ data.id }}は現在の添付ファイルのIDです。

これは、 Delete Attachment リンクの後に挿入する方法です。

$( wp.media.template('wpse-open-in-library')(
      { 
         id: attachment.get( 'id' )  // <-- This is how we can fetch the current ID 
      }
    ) 
 ).insertAfter('.delete-attachment');

カスタムマイクロテンプレートにid変数を渡します。

以下のオプションを選択することで全ての添付ファイルを見ることができます:

attached files 

デモプラグイン

これがデモのプラグイン全体です。

/**
 * Open an attachment in the Media Library, to be able to attach/detach it
 *
 * @link https://wordpress.stackexchange.com/a/206179/26350
 */
add_action( 'print_media_templates', function()
{ ?>

  <!-- Custom template part -->
  <script type="text/html" id="tmpl-wpse-open-in-library">
        <div class="wpse-open-in-library">
            <a href="<?php echo admin_url('upload.php?mode=list&p=');?>{{ data.id }}" target="_blank">
                <?php _e( 'Open in Media Library' ); ?>
           </a>
       </div>
  </script>

  <!-- Extend the Attachment Details View -->
  <script>
      jQuery(document).ready( function( $ ) 
      {
          wp.media.view.Settings.AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay.extend(
          {
              render: function() 
              {
                  wp.media.View.prototype.render.apply( this, arguments );
                  var attachment = this.options.attachment;
                  $( wp.media.template('wpse-open-in-library')(
                        { 
                            id: attachment.get( 'id' ) 
                        }
                     ) 
                  ).insertAfter('.delete-attachment');

                return this;
            }
      } );
    } );
  </script>
<?php
} );

この答え @ kalimah-appsと 答えはここ @bongerと@Fabien Quatravauxによると、このデモプラグインを作成するのに非常に役立ちました。

次のステップは、 Detach リンクを追加して、さらに簡単にすることです。

12
birgire