サインアップ時にユーザーがインストールするテーマを選択できるようにする


11

ユーザーが新しいサイトのサインアップページからインストールするテーマを選択できるようにすることは可能ですか?サイトが作成されると、選択したテーマがインストールされます。

wp_get_themesが見つかりました。これは、ドロップダウンメニューに利用可能なすべてのテーマを事前に入力する方法ですか?テーマの情報を実際のサインアッププロセスにどのように渡して、サイトが正しいテーマで作成されるようにしますか?

誰かが重力フォームでこれを行う方法を知っているなら、それも素晴らしいでしょう。

更新:

ここに私がこれまで持ってきたものがあります、それは子のテーマを考慮に入れていません、後でそれに取り組みます

この関数は、ラジオボタン付きのテーマのリストを出力し、選択したテーマを$ _POST ['custom_theme']に保存します

/**
* Show list of themes at bottom of wp-signup.php (multisite)
*/
function 70169_add_signup_extra_fields() { ?>

Themes<br />
<?php
$themes = wp_get_themes();

foreach ( $themes as $theme ) {
    $theme_name = $theme['Name'];
    $theme_stylesheet = $theme->stylesheet;
?>
    <label>
        <input id="<?php echo $theme_stylesheet; ?>" type="radio" <?php if ( isset( $_POST['custom_theme'] ) ) checked( $_POST['custom_theme'], $theme_stylesheet ); ?> name="custom_theme" value="<?php echo $theme_stylesheet; ?>" ><?php echo $theme_name; ?>
    </label>

<?php } ?>

<?php }
add_action( 'signup_extra_fields', '70169_add_signup_extra_fields' );

テーマの値をサイト作成に渡す方法として、隠しフィールドを追加すると思いました。しかし、これには何か問題があります-最後のステップで、それはその価値を失います、まだ理由はわかりません。

/**
 * Add a hidden field with the theme's value
 */
function 70169_theme_hidden_fields() { ?>

<?php
    $theme = isset( $_POST['custom_theme'] ) ? $_POST['custom_theme'] : null;
?>
<input type="hidden" name="user_theme" value="<?php echo $theme; ?>" />
<?php }
add_action( 'signup_hidden_fields', '70169_theme_hidden_fields' );

そして最後に、新しく作成されたサイトにテーマ名を渡す関数です。これは変数をハードコーディングした場合に機能しますが、まだcustom_themeの値を渡すことができません。サイトは正常に作成されますが、テンプレートとスタイルシートのオプションは空白です。私が何を試しても価値はありません。以前に作成した非表示フィールドにアクセスするには、$ _ GETを使用する必要があると思います。繰り返しますが、この時点でやりたいのは、テンプレートとスタイルシートのオプションに同じテーマ名を渡すことだけです。動作させた後で、それらを区別する方法を理解します。

/**     
 * Create the new site with the theme name
*/
function 70169_wpmu_new_blog( $blog_id ) {

// need to get this working, use $_GET?
//    $theme = ???

    update_blog_option( $blog_id, 'template', $theme );  // $theme works if I hardcode it with a theme name
    update_blog_option( $blog_id, 'stylesheet', $theme );
}

add_action( 'wpmu_new_blog', '70169_wpmu_new_blog' );

1
これは良い質問だと思います、+ 1
Anh Tran

1
理論的には追加のフィールドを登録フォームに追加することで可能ですが、ユーザーはテーマがどのように表示されるかをどのように知るのでしょうか?プレビューにより、登録プロセスが少し複雑になります...
krembo99 '26

@ krembo99フェアポイント。質問のためにそれを単純化しようとしました。サムネイルプレビューでラジオフィールドを使用するか、各テーマページに「このテーマでサインアップする」というボタンを配置しました。ボタンは、テーマ名の名前をサインアップフォームに渡すだけです。私は単純に始めると思いました:)
Andrew

1
わかり

回答:


5

必要なことを行うために、必要なフィールドを追加して、それらをuser_meta...に保存できます。

$user_info配列/オブジェクトにそれらを格納することもできますが、何がメリットになるかはわかりません..)

  // Render Form Fields
add_action('register_form','k99_register_form_add_theme_field');
// Checking
add_action('register_post','k99_check_fields',10,3);
// Insert Data
add_action('user_register', 'k99_register_new_register_fields');

// Render the form with the additional radio field 
function k99_register_form_add_theme_field(){
?>

<p>
<label>Theme<br />
 <?php $themes=wp_get_themes();
foreach ($themes as $theme ) {
$theme['Name'] = sanitize_title_with_dashes($theme['Name']);
$checked = checked( $_POST['custom_theme'], 1 );
 echo '<input id="custom_theme'.$theme['Name'] .'" type="radio" name="custom_theme" value="'. $theme['Name'] .'" '.$checked.'>  '. $theme['Name'].'<br />';
$custom_theme = $_POST['custom_theme'];
} ?>
</label>
</p>

<?php
}

// checking , sanitation etc .. of course this is not done...

function k99_check_fields($login, $email, $errors) {
global $custom_theme;
if ($_POST['custom_theme'] == '') {
$errors->add('empty_theme', "<strong>Error:</strong> Please select theme.");
}
else {
$custom_theme = $_POST['custom_theme'];
}
}

// Write to DB ... if you will..
function k99_register_new_register_fields($user_id, $password="", $meta=array())  {

$custom_theme = $_POST['custom_theme']; //just in case ..
update_usermeta($user_id, 'user_custom_theme',$custom_theme);

}

結局のところ、次のようにuser_themeを取得できます。

get_user_meta($user_id, 'user_custom_theme', true);

注:これはオンザフライで書かれました。マルチブログでは検証されていませんが、単純なwpインストールで検証されています。大きな違いはありませんが、これはプロダクション機能ではありませんが、正しい方向に進むためだけのものでした。衛生管理、変数のチェック、クリーニングコード、FORM MARKUPが必要です。また、フィールドを他のユーザー関連画面(ユーザーの作成、ユーザーの編集、プロファイルの編集など)にも追加する必要があります。

注II:あなたはあなたのuodateの重力形態について尋ねました- 彼らはそのためのアドオンを持っています


ご協力いただきありがとうございます。私はなんとかつなぎ合わせることができ、それはほぼ機能しています。隠しフィールドを固定して最後の関数に値を渡すのに問題があります。これまでの進捗状況が含まれるように質問を更新しました。
アンドリュー、

私の機能を試しましたか?それは動作するはずです..
krembo99 '28 / 10/28

あなたの例のregister_formフックはマルチサイトでは機能しません。ラジオボタンを追加する別のフックを見つけました。また、get_themes()は非推奨になり、テーマの情報を取得するより良い方法を見つけました。最後に、私は、ユーザーのメタテーブルにテーマの名前を追加すると、最良の方法であるテーマのとは思わないtemplateし、stylesheetオプションのテーブルに格納されています。とはいえ、コードはこれまでのところ非常に役立ちました。
Andrew

register_formフックマルチサイトで機能します(CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_formを参照)。他の多くのフックを見つけることができますが、それはIMHOを使用するのに適しています。他のコメントについて、私はポイントを本当に理解していません。
krembo99 2012年

重力フォームのユーザー登録プラグインについてのメモをありがとう。私はすでにそのプラグインを持っていますが、ユーザーがサイトに登録するときにテーマを選択することはできません。
アンドリュー、

1

これは不正行為の一種であることはわかっていますが、このプラグインを使用しています。既存のネットワークサイトをコピーして、新しいユーザーがサインアップするときにテンプレートとして使用できるようにします。新しいブログテンプレートはいくつでも作成できます。それらにはすべてのコンテンツ、プラグイン、設定などが含まれ、ユーザーは新しいサイト/アカウントを設定するときにいずれかを選択できます:)

http://premium.wpmudev.org/project/new-blog-template/


0

この種の質問への回答:このサイト:focusww.comに「Theme Switch」というプラグインを配置し、テーマのリストから選択できるサイドバーを配置します。使用できるテーマと、Cookieが期限切れになってからデフォルトのテーマに戻るまでの時間を選択できます。


申し訳ありませんが、「テーマスイッチャー」ではありません。マルチサイトインストールでwp-signup.phpを使用してブログにサインアップするときに、ユーザーがテーマを選択できるようにしたいと考えています。
Andrew、

:私はちょうど$ 19のユーザが登録にテーマをインストールすることができますプラグインにつまずいpremium.wpmudev.org/project/new-blog-template <=それをチェックアウト:)
Nohl

0

それでも関連性がある場合、おそらくこれは同様のソリューションを探している他の人を助けることができます

/**
 * Add custom field to registration form
 */
add_action( 'signup_blogform', 'aoc_show_addtional_fields' );
add_action( 'user_register', 'aoc_register_extra_fields' );

function aoc_show_addtional_fields() 
{
    $themes = wp_get_themes();
    echo '<label>Choose template for your site';
    foreach ($themes as $theme){
        echo '<img src="'.$theme->get_screenshot().'" width="240"/>';
        echo $theme->name . ' <input id="template" type="radio" tabindex="30" size="25" value="'.$theme->template.'" name="template" />';
    }
    echo '</label>';
}

function aoc_register_extra_fields ( $user_id, $password = "", $meta = array() ) {
    update_user_meta( $user_id, 'template', $_POST['template'] );
}

// The value submitted in our custom input field needs to be added to meta array as the user might not be created yet.
add_filter('add_signup_meta', 'aoc_append_extra_field_as_meta');
function aoc_append_extra_field_as_meta($meta) 
{
    if(isset($_REQUEST['template'])) {
        $meta['template'] = $_REQUEST['template'];
    }
    return $meta;
}

// Once the new site added by registered user is created and activated by user after email verification, update the template selected by user in database.
add_action('wpmu_new_blog', 'aoc_extra_field', 10, 6);
function aoc_extra_field($blog_id, $user_id, $domain, $path, $site_id, $meta) 
{
    update_blog_option($blog_id, 'template', $meta['template']);
    update_blog_option($blog_id, 'stylesheet', $meta['template']);
}

同様の要件があるときに、ここにブログ投稿(http://artofcoding.in/select-theme-while-registering-wordpress-multisite-network/)を書いています。これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.