web-dev-qa-db-ja.com

添付ファイルのメタデータに基づいて「投稿に挿入」の動作を変更する

私が取り組んでいるカスタムプラグインのために、私はここに提供される答えのような方法で添付ファイルエディタにチェックボックス要素を追加しました:

添付ファイルエディタにチェックボックス要素を追加する方法の例

そのチェックボックスの値に基づいて、[投稿に挿入]ボタンの動作を変更します。例えば、チェックボックスがチェックされていない場合、 "投稿に挿入"はファイルタイプに対してデフォルトのWordPressアクションを行います。ボックスがチェックされている場合は、代わりに私のプラグインのショートコードを挿入してください。私は次のことを試してみました(ここの答え に基づいています )。

function my_media_insert($html, $id, $caption, $title, $align, $url, $size, $alt) {
    $orig_html = $html;

    $attachment = get_post($id);
    $my_meta = get_post_meta($post->ID, '_myMeta', true); // try to get checkbox value

    $mime_type = $attachment->post_mime_type;
    if (($mime_type == "application/pdf") && ($my_meta == "1")) {
        $src = wp_get_attachment_url( $id );
        $html = '[shortcode url="'.$src.'"]';  
    } else {
        $html = $orig_html;
    }
    return $html;
}
add_filter('media_send_to_editor', 'my_media_insert', 20, 3);

...しかし、get_post_meta()は、使用する値を返すようには見えません。 (テスト目的で$ htmlの値を$ my_metaに変更した場合、挿入は "空白"になります。)

ショートバージョン:チェックボックスを使って添付ファイルにメタデータを設定し、それに応じてエディタに送信される$ htmlの値を変更する方法はありますか?

更新:私は基本的に私がやりたいこと(ボタンの振る舞いを変える)を達成する例を見つけました、しかし、私はこれを適応する添付ファイルのメタデータにチェックボックスを追加したいのです。 。そうすれば、必要に応じて動作を無効にすることができ、特定の種類のファイルにのみ適用できます。

http://justingable.com/2008/10/03/modifying-wordpress-default-method-for-inserting-media/

5
k3davis

それが他の誰かに役立つならば、これは私のコードがこれを達成するように見えたものです。私は、tbutelerの提案に従って、添付ファイルのデータをまったく保存することにはしませんでしたが、$ _REQUESTを使用するのではなく、$ attachment配列を直接使用できることに気付きました。

function my_attachment_fields_to_edit( $form_fields, $post ) {
    $supported_exts = supported_types(); // array of mime types to show checkbox for

    if ( in_array( $post->post_mime_type, $supported_exts ) ) {
        // file is supported, show fields
        $use_sc = true; // check box by default (false not to, or use other criteria)

        $checked = ( $use_sc ) ? 'checked' : '';

        $form_fields['use_sc'] = array(
            'label' =>  'Use SC',
            'input' =>  'html',
            'html'  =>  "<input type='checkbox' {$checked} name='attachments[{$post->ID}][use_sc]' id='attachments[{$post->ID}][use_sc]' /> " . __("Insert shortcode instead of link", "txtdomain"),
            'value' =>  $use_sc
        );
    }

    return $form_fields;
}

function my_media_insert( $html, $id, $attachment ) {
    if ( isset( $attachment['use_sc'] ) && $attachment['use_sc'] == "on" ) {
        $output = '[shortcode url="'.$attachment['url'].'"]';
        return $output;
    } else {
        return $html;
    }
}

// add checkbox to attachment fields
add_filter( 'attachment_fields_to_edit', 'my_attachment_fields_to_edit', null, 2 );

// insert shortcode if checkbox checked, otherwise default (link to file)
add_filter( 'media_send_to_editor', 'my_media_insert', 20, 3 );

2013年1月編集:この解決法はWordPress 3.5以降では機能しません。添付ファイル画面のチェックボックスはAJAXを送信します。添付ファイルのメタデータを保存するように要求します。これを踏まえて、添付ファイル画面でチェックボックスを単に「フラグ」として使用する方法はもうないようです。他の解決策が見つかった場合は、承認された回答を喜んで変更します。

1
k3davis