web-dev-qa-db-ja.com

プラグインクラス内でattachment_fields_to_editフィルタを使用する

私はOOPを使ってプラグインを書いています。私は、フィルタとアクションフックは、WordPressのコンストラクタメソッド内に次のように配置する必要があることに気付きました。

add_action('wp_enqueue_scripts', array($this, 'add_js_css'));

私が理解している限りでは、フィルタについても同じでなければなりません。

add_filter('attachment_fields_to_edit', array($this, 'attachment_fields', 15, 2));

attachment_fields()メソッドは配列を返すべきです(私はクラスの外側でそれをテストしました、そしてそれは動作します)、しかしそれはクラスの中で呼ばれるときnullを返すようです。私はそれがクラスの中で呼ばれているからだと思いますが、私はそれについて何をすべきかわかりません!

それが便利ならば、メソッドは次のようになります。

public function attachment_fields($form_fields) {
    global $post;
    $file = wp_get_attachment_url($post->ID);
    unset($form_fields['post_excerpt']);
    unset($form_fields['post_content']);
    unset($form_fields['url']['helps']);
    $form_fields['url']['label'] = 'URL';
    $form_fields['url']['html'] = "<input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($file) . "' /><br />";
    $form_fields['buttons'] = array(
    'label' => '',
    'value' => '',
    'html' => "<input type='submit' class='button' name='send[$post->ID]' value='" . esc_attr__( 'Add MP3' ) . "' />",
    'input' => 'html'
    );
    return $form_fields;
}

何かアドバイス?

3
Richard Sweeney

これが本当にあなたのコードの場合:

<?php
add_filter('attachment_fields_to_edit', array($this, 'attachment_fields', 15, 2));

うまくいかないのは、かっこが間違っているためです。これを試して:

<?php
add_filter('attachment_fields_to_edit', array($this, 'attachment_fields'), 15, 2);
1
chrisguitarguy