it-swarm.com.de

Wie lassen sich Designoptionen am besten exportieren und importieren?

Also, was ist der beste Weg, um eine Export- und Importfunktion zu erstellen? Ich habe versucht, serialize() und urlencode() für eine Reihe von Optionen zu verwenden, die in einer URL wie der folgenden verwendet werden sollen:

export.php?data=(long string) und verwende die $ _GET-Methode in der export.php-Datei, die den Download mit Hilfe von Headern erzwingt, aber das ist keine gute Idee, da das Array sehr groß ist.

was ist der beste Weg, um Designoptionen zu exportieren und zu importieren?

2
Pierre

Ich bin gerade dabei, meinen eigenen admin panel class eine Import/Export-Funktionalität hinzuzufügen, und ich bin an einem Punkt angelangt, an dem ich der Meinung bin, dass der beste Weg, Daten zu exportieren, ein base64 wäre codiertes Serialize-Array, und das ist so,

das Serialisieren von Daten allein ist einigermaßen für Menschen lesbar und ich wollte dies vermeiden (in den Designoptionen wurden Dateien, Bild-URLs, Pfade und andere vertrauliche Daten gespeichert), daher die Base64-Codierung.

Ich bin damit einverstanden, dass die Daten durcheinander gebracht werden, aber es entsteht eine einfache einzeilige Zeichenfolge, die sich sehr einfach kopieren lässt, ohne Fehler zu machen (wie das Entfernen von Linien, Klammern, Klammern ...).

Wie groß $_GET ist, hängt vom verwendeten Browser ab. Einige unterstützen 2000 Zeichen, andere mehr. Ich habe eine Faustregel für die Verwendung der $_POST-Methode, wenn die Sendedaten mehr als 255 Zeichen haben.

Beispiel: $ options ist ein Array von Theme-Optionen. Der Export erfolgt dann folgendermaßen

echo "<!*!* START export Code !*!*>\n".base64_encode(serialize($options))."\n<!*!* END export Code !*!*>";

und der Importcode ist:

$import_code = $_POST['import_code'];
$import_code = str_replace("<!*!* START export Code !*!*>\n","",$import_code);
$import_code = str_replace("\n<!*!* END export Code !*!*>","",$import_code);
$import_code = base64_decode($import_code);
$import_code = unserialize($import_code);

dies ist eigentlich der Code, den ich in meinem Plugin Shortcodes UI für die Import-Export-Funktionalität verwende.

Update

Was das Herunterladen des Export-Dumps angeht, müssen Sie keine weitere Anforderung erstellen, was bedeutet, dass Sie mit einer einzigen Anforderung in eine Datei exportieren können, z. B .:

//first  add a new query var
public function add_query_var_vars() {
    global $wp;
    $wp->add_query_var('theme_export_options');
}

//then add a template redirect which looks for that query var and if found calls the download function
public function admin_redirect_download_files(){
    global $wp;
    global $wp_query;
    //download theme export
    if (array_key_exists('theme_export_options', $wp->query_vars) && $wp->query_vars['theme_export_options'] == 'safe_download'){
        download_file();
        die();
    }
}


//add hooks for these functions
add_action('template_redirect', 'admin_redirect_download_files');
add_filter('init', 'add_query_var_vars');


//then define the function that will take care of the actual download
public function download_file($content = null, $file_name = null){
    if (! wp_verify_nonce($_REQUEST['nonce'], 'theme_export_options') ) 
        wp_die('Security check'); 

    //here you get the options to export and set it as content, ex:
    $options= get_option('my_theme_options');
    $content = "<!*!* START export Code !*!*>\n".base64_encode(serialize($options))."\n<!*!* END export Code !*!*>";
    $file_name = 'theme_export.txt';
    header('HTTP/1.1 200 OK');


    if ( !current_user_can('edit_themes') )
        wp_die('<p>'.__('You do not have sufficient permissions to edit templates for this site.').'</p>');
    }
    if ($content === null || $file_name === null){
        wp_die('<p>'.__('Error Downloading file.').'</p>');     
    }
    $fsize = strlen($content);
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header('Content-Description: File Transfer');
    header("Content-Disposition: attachment; filename=" . $file_name);
    header("Content-Length: ".$fsize);
    header("Expires: 0");
    header("Pragma: public");
    echo $content;
    exit;
}


//and last a simple function to create the download export url / link
function create_export_download_link($echo = false){
    $site_url = get_bloginfo('url');
    $args = array(
        'theme_export_options' => 'safe_download',
        'nonce' => wp_create_nonce('theme_export_options')
    );
    $export_url = add_query_arg($args, $site_url);
    if ($echo === true)
        echo '<a href="'.$export_url.'" target="_blank">Download Export</a>';
    elseif ($echo == 'url')
        return $export_url;
    return '<a href="'.$export_url.'" target="_blank">Download Export</a>';
}

Alles was ich tun muss, ist einen Aufruf an create_export_download_link(true); in meinem Theme Options Panel hinzuzufügen und es wird ein Link wie dieser erstellt:

<a href="http://domain.com/?theme_export_options=safe_download&nonce=as4d56as4" target="_blank">Download Export</a>

natürlich müssen Sie es ein wenig ändern, um es Ihren Bedürfnissen anzupassen, aber Sie sollten auf die Idee kommen.

2
Bainternet