web-dev-qa-db-fra.com

WPAlchemy MediaAccess insérant un lien multimédia dans WP Editeur au lieu du champ personnalisé dans metabox

Je travaille actuellement avec la classe WPAlchemy pour créer une métabox dans un type de publication personnalisé (événements du plug-in EventEspresso plus précisément).

Cette metabox devrait pouvoir appeler le téléchargeur de média et insérer des images pour certaines métas personnalisées.

Cela fonctionne plutôt bien, je peux appeler l'utilitaire de téléchargement de média et conserver les données des champs de texte. Mais, après avoir ouvert le chargeur de média, sélectionnez l'image et cliquez sur "Insérer dans le message". Le lien image va vers WP Editor textarea au lieu de mon champ de texte dans la métabox personnalisée.

Merci les gars. J'espère que c'est assez clair et désolé pour l'anglais probablement pas très bien écrit.

1
Renato Gomes

J'ai réussi à le résoudre. Le problème résidait dans l'utilisation d'un type de message personnalisé avec Metabox.php/MediaAccess.php (tous deux de la classe WPAlchemy).

Soi-disant, vous pouvez utiliser des post-types personnalisés avec WPAlchemy car, lors de l'instanciation d'un objet WPAlchemy_MetaBox, vous pouvez transmettre certains paramètres facultatifs pour permettre ce type de personnalisation. Comme ça:

$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'
));

Mais dans MetaBox.php, la fonction _ init utilise un code de validation pour continuer:

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

Les deux fonctions _ is_post () et _ is_page () , finissent par appeler le

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;
}

Le problème ici est de valider à travers l'URI, cela suppose que chaque article ou page aura le "post.php" ou "post-new.php" dans son URI. Ce qui dans mon cas s'est avéré être:

/wp-admin/admin.php? page = événements_espresso & message = 1 & action = modifier & poster = 1750 & edit_nonce = 2de45bf97b & return = editpost

Donc, pour le réparer (pas fier fier). Je devais ajouter une autre validation dans les deux Metabox.php/MediaAccess.php pour permettre également l'exécution lorsque 'page = espresso_events ' et ' action = edit '

Eh bien c'est ça. J'espère que ça aide. Merci.

0
Renato Gomes