web-dev-qa-db-ja.com

WordPressテーマのオプションインポート/エクスポート

私は既にwp_options> kittens_optionsに保存するテーマオプションページを持っています。

私は自分のオプションページにそれらのオプションのインポート/エクスポートテキストエリアを組み込む簡単な方法を探しています。

Googleで数時間検索したところ、便利なチュートリアルが見つかりませんでした。だれかが頭の上を知っているなら、私に知らせてください。

ありがとう

使用しているコード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

多分あなたはあなたのオプションのために2つの関数を書くことができます

  1. あなたのオプションをエクスポートするためのtxtファイルを書くための一つのスクリプト
  2. あなたのワードプレスにインポートする1​​つのスクリプト(あなたのオプションのテーマページにアップロードフィールドを追加する)

これらの機能はすべてテーマのfunctions.phpに含めることができます。

これは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; 
}

write_ini_file を使用して値をファイルに送信することができます。 parse_ini_file を使用して値をファイルに戻すこともできます。

3
Tribalpixel

あなたのコードは面倒ですが、問題ないようです。

あなたがする必要がある唯一のことは、インポート時に$_POSTされたデータをデコードすることです。

update_option( $shortname . '_settings', $_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);
}
2
onetrickpony