web-dev-qa-db-ja.com

WPAlchemy MediaAccessでメディアリンクを挿入しています WP メタボックスのカスタムフィールドではなくエディタ

私は現在、WPAlchemyクラスを使ってカスタム投稿タイプでメタボックスを作成しています(EventEspressoプラグインからのイベント)。

このメタボックスは、メディアアップローダを呼び出して、いくつかのカスタムメタの画像を挿入することができるはずです。

それはかなりうまくいきます、私はメディアアップローダを呼び、テキストフィールドからのデータを保持することができます。ただし、メディアアップローダを開いて画像を選択し、[投稿に挿入]をクリックします。画像リンクは、カスタムメタボックスの私のテキストフィールドの代わりにWP Editor textareaに行きます。

みんなありがとう。十分に明確で、おそらくあまりよく書かれていない英語を残念に思ってください。

1
Renato Gomes

私はそれをなんとか解決した。問題は Metabox.php/MediaAccess.php でカスタム投稿タイプを使用することにありました(両方ともWPAlchemyクラスから)

WPAlchemy_MetaBoxオブジェクトをインスタンス化するときには、その種のCostumizationを有効にするためにいくつかのオプションパラメータを渡すことができるので、WPAlchemyでカスタム投稿タイプを使用できると考えられます。このような:

$mb = $my_custom_metabox = new WPAlchemy_MetaBox(array
(
    'id' => '_palestrantes_metabox',
    'title' => 'Palestrantes',
    'types' => array('post','espresso_events'),
    'template' => get_stylesheet_directory() . '/metaboxes/custom-meta.php'
));

しかしMetaBox.phpの中では、 _init 関数はいくつかの検証コードを使って処理を進めます。

559   // must be creating or editing a post or page
560   if ( ! WPAlchemy_MetaBox::_is_post() AND ! WPAlchemy_MetaBox::_is_page()) return;

_is_post() _is_page() の両方の関数が、

static function _get_current_post_type()
{
    $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : NULL ;
    if ( isset( $uri ) ) {
        $uri_parts = parse_url($uri);
        $file = basename($uri_parts['path']);

        if ($uri AND in_array($file, array('post.php', 'post-new.php'))) {
            $post_id = WPAlchemy_MetaBox::_get_post_id();

            $post_type = isset($_GET['post_type']) ? $_GET['post_type'] : NULL ;

            $post_type = $post_id ? get_post_type($post_id) : $post_type ;

            if (isset($post_type)) {
                return $post_type;
            }
            else {
                // because of the 'post.php' and 'post-new.php' checks above, we can default to 'post'
                return 'post';
            }
        }
    }
    return NULL;
}

ここでの問題はURIを通して検証することです、それはすべての投稿またはページがそのURIに 'post.php'または 'post-new.php'を持つことを想定しています。私の場合は、次のようになりました。

/wp-admin/admin.php?page=espresso_events&message=1&action=edit&post=1750&edit_nonce=2de45bf97b&return=editpost

だから(それを誇りに思っていない)それを修正する。 'page = espresso_events' および 'action = edit' の両方の実行を許可するには、 Metabox.php/MediaAccess.php の両方に別の検証を追加する必要がありました。

まあそれはそれです。それが役に立てば幸い。ありがとう。

0
Renato Gomes