web-dev-qa-db-fra.com

Options de thème WordPress Import/Export

J'ai déjà une page d'options de thème qui enregistre dans wp_options> kittens_options.

Je cherche un moyen simple d’incorporer une zone de texte import/export de ces options sur ma page d’options.

Je fais des recherches sur Google depuis plusieurs heures et je n’ai trouvé aucun didacticiel utile. Si quelqu'un le sait, faites-le-moi savoir.

Merci

CODE JE TRAVAILLE AVEC SO FAR

<?php
function kittens_transport_page() {
global $themename, $shortname;
$kittens = get_option( 'kittens_options' );
$currentsettings = "";
if ( isset( $_POST['import'] ) && trim($_POST['kittens_import_settings']) != "" ) {
$currentsettings = $_POST['kittens_import_settings'];
} elseif ( isset( $kittens ) && ( $kittens != "" ) ) {
$currentsettings = base64_encode( serialize( $kittens ) );
}
}
?>
<div id="import-export">
<h2>Import &amp; Export Theme Options</h2>
<form method="post" action="#">
<label class="description">Import Options</label>
<textarea rows="8" cols="40" id="kittens_import_settings" name="kittens_import_settings" class="large-text"></textarea><br />
<input type="submit" value="Import" id="import" name="import" class="button-primary" onClick="return confirm('Are you sure you want to import these settings?')" /> <?php if ( isset( $_POST['import'] ) && $_POST['kittens_import_settings'] != "" ) { echo "Settings Imported Successfully"; } ?>
</form>
<br />
<br />
<label class="description">Export Options</label>
<textarea rows="8" cols="40" id="kittens_export_settings" name="kittens_export_settings" class="large-text" readonly="readonly"><?php echo $currentsettings; ?></textarea>
<?php
function kittens_import_settings(){
global $shortname;
if ( isset( $_POST['import'] ) && trim($_POST['kittens_import_settings']) != "" ) {
if(isset($_POST['kittens_import_settings']) && current_user_can('edit_themes')){
$imported_settings = unserialize(base64_decode($_POST['kittens_import_settings']));
update_option($shortname . '_settings', $imported_settings);
}
}
}
?>
5
user15892

peut-être que vous pouvez écrire 2 fonctions pour vos options

  1. un script pour écrire un fichier txt pour exporter vos options
  2. un script à importer dans votre wordpress (ajouter un champ de téléchargement dans votre page de thème d'option)

toutes ces fonctions peuvent être dans votre functions.php du thème

voici un exemple de fonction pour écrire un fichier ini (txt)

function write_ini_file($assoc_arr, $path, $has_sections=FALSE) { 
    $content = ""; 
    if ($has_sections) { 
        foreach ($assoc_arr as $key=>$elem) { 
            $content .= "[".$key."]\n"; 
            foreach ($elem as $key2=>$elem2) { 
                if(is_array($elem2)) 
                { 
                    for($i=0;$i<count($elem2);$i++) 
                    { 
                        $content .= $key2."[] = \"".$elem2[$i]."\"\n"; 
                    } 
                } 
                else if($elem2=="") $content .= $key2." = \n"; 
                else $content .= $key2." = \"".$elem2."\"\n"; 
            } 
        } 
    } 
    else { 
        foreach ($assoc_arr as $key=>$elem) { 
            if(is_array($elem)) 
            { 
                for($i=0;$i<count($elem);$i++) 
                { 
                    $content .= $key2."[] = \"".$elem[$i]."\"\n"; 
                } 
            } 
            else if($elem=="") $content .= $key2." = \n"; 
            else $content .= $key2." = \"".$elem."\"\n"; 
        } 
    } 

    if (!$handle = fopen($path, 'w')) { 
        return false; 
    } 
    if (!fwrite($handle, $content)) { 
        return false; 
    } 
    fclose($handle); 
    return true; 
}

Vous pouvez utiliser write_ini_file pour envoyer les valeurs dans un fichier, parse_ini_file pour les relire :)

3
Tribalpixel

Votre code est en désordre, mais semble bien.

La seule chose à faire est de décoder les données $_POST 'à l'importation, donc au lieu de:

update_option( $shortname . '_settings', $_POST['kittens_import_settings'] );

utilisation:

if(isset($_POST['kittens_import_settings']) && current_user_can('edit_themes')){
  $imported_settings = unserialize(base64_decode($_POST['kittens_import_settings']));
  update_option($shortname . '_settings', $imported_settings);
}
2
onetrickpony