MyBB.support, le portail francophone de MyBB

Version complète : Liaison WordPress/Mybb (Fatal error: Cannot redeclare)
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour à tous !

J'ai fait une recherche avant de poster et je n'ai rien trouvé de concluant.

Rentrons tout de suite dans le vif du sujet : Je possède un site WordPress et un forum Mybb. J'ai voulu créer une page nécessitant les sessions de MyBB mais utilisant le design de WordPress.
Sur ma page, il y a donc ces deux codes :

Code :
require('../wp-load.php');
include('/public_html/wp-content/themes/leetpress/header.php');

Code :
define("IN_MYBB", 1);
define('THIS_SCRIPT', 'avantages.php');
require_once "../forum/global.php";

Le problème est le suivant : Une erreur se crée :

Citation :Fatal error: Cannot redeclare get_attachment_icon() (previously declared in /public_html/wp-includes/deprecated.php:1966) in /public_html/forum/inc/functions.php on line 3111

J'ai donc bien compris que WordPress et Mybb avaient des fonctions utilisant le même nom, mais malheureusement, je ne suis pas un expert en php... J'ai donc fait quelques recherches, puis j'ai fini par trouvé quelque chose qui me paraissait bon sur le forum mybb italien, disant de faire ceci :
Code :
if(!function_exists('get_attachment_icon'))
{
  function get_attachment_icon($ext)
   {
      tutto il bla bla bla
   }
}

Voici donc mon code actuel :

Code :
if(!function_exists('get_attachment_icon'))
{
function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) {
    _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image()' );
    $id = (int) $id;
    if ( !$post = & get_post($id) )
        return false;

    if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) )
        return false;

    list($src, $src_file) = $src;

    // Do we need to constrain the image?
    if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) {

        $imagesize = getimagesize($src_file);

        if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) {
            $actual_aspect = $imagesize[0] / $imagesize[1];
            $desired_aspect = $max_dims[0] / $max_dims[1];

            if ( $actual_aspect >= $desired_aspect ) {
                $height = $actual_aspect * $max_dims[0];
                $constraint = "width='{$max_dims[0]}' ";
                $post->iconsize = array($max_dims[0], $height);
            } else {
                $width = $max_dims[1] / $actual_aspect;
                $constraint = "height='{$max_dims[1]}' ";
                $post->iconsize = array($width, $max_dims[1]);
            }
        } else {
            $post->iconsize = array($imagesize[0], $imagesize[1]);
            $constraint = '';
        }
    } else {
        $constraint = '';
    }

    $post_title = esc_attr($post->post_title);

    $icon = "<img src='$src' title='$post_title' alt='$post_title' $constraint/>";

    return apply_filters( 'attachment_icon', $icon, $post->ID );
}
}
else
{
function get_attachment_icon($ext)
{
    global $cache, $attachtypes, $theme;

    if(!$attachtypes)
    {
        $attachtypes = $cache->read("attachtypes");
    }

    $ext = my_strtolower($ext);

    if($attachtypes[$ext]['icon'])
    {
        if(defined("IN_ADMINCP"))
        {
            $icon = str_replace("{theme}", "", $attachtypes[$ext]['icon']);
            if(my_substr($icon, 0, 1) != "/" && my_substr($icon, 0, 7) != "http://")
            {
                $icon = "../".$icon;
            }
        }
        elseif(defined("IN_PORTAL"))
        {
            global $change_dir;
            $icon = $change_dir."/".str_replace("{theme}", $theme['imgdir'], $attachtypes[$ext]['icon']);
        }
        else
        {
            $icon = str_replace("{theme}", $theme['imgdir'], $attachtypes[$ext]['icon']);
        }
        return "<img src=\"{$icon}\" border=\"0\" alt=\".{$ext}\" />";
    }
    else
    {
        if(defined("IN_ADMINCP"))
        {
            $theme['imgdir'] = "../images";
        }
        else if(defined("IN_PORTAL"))
        {
            global $change_dir;
            $theme['imgdir'] = "{$change_dir}/images";
        }
        
        return "<img src=\"{$theme['imgdir']}/attachtypes/unknown.gif\" border=\"0\" alt=\".{$ext}\" />";
    }
}
}
(J'ai mis dans la première parti le code utilisé par WordPress, dans la seconde (après le else), celui utilisé par Mybb.

Ca a donc tout d'abord fonctionné. Une autre erreur est apparu, j'ai répété l'opération. Jusqu'à ce que je revienne au début ! Donc en gros, le code de l'italien ne m'a servit a rien ^^

Si quelqu'un à une idée à me proposer, je suis preneur Smile

Merci d'avance !

Edit:
URL de la page http://land-of-craft.fr/avantages/
Version MyBB : 1.6.8
Version WordPress : 3.4.1

Edit2 : Surtout que cette technique ne fonctionne qu'à moitié, car la page d'index du forum et les sous forum s'affichent correctement, mais pas les sujets (erreur d'une fonction appelée)
Personne n'a d'idée ? Sad
Les 2 fonctions ont certainement du code différent pour WP et MyBB, elles ne sont pas mutuellement remplaçable. Il faudra donc éliminer une des deux fonctions, préférablement celle qui ne sera pas utilisée. J'imagine que ce devrait être celle de WP qui sera supprimée, pour cela il faudra contrôler les insertions faites par "wp-load.php". Wink

Salut

Je comprends l'idée, mais comment est-ce que je pourrais m'y prendre ?
Je suggère de copier les lignes essentielles contenues dans le fichier "wp-load.php" plutôt que de l'insérer en bloc avec une commande comme "require('../wp-load.php');".

Ceci pourra éliminer la section chargeant la fonction "get_attachment_icon" de WP qui est problématique ...
Je viens d'essayer ceci (à noter que je m'y suis peut-être mal pris) mais je n'ai pas vraiment réussi... Tous les fichiers sont liés, j'ai donc renommé plusieurs fichiers en "nom2.php", histoire de tester puis j'ai supprimé la fonction gênante, mais au bout de la seconde, ça m'affichait une autre erreur jusqu'alors inconnue au bataillon...

Je vais chercher plus du côté de chez WordPress pour savoir s'il n'y a pas moyen d'appeler uniquement le header et le footer.

Si jamais tu as d'autres idées, je suis toujours preneurs, mais merci de ton aide déjà Smile
 Utilitaire de traduction fourni par Regentronique