web-dev-qa-db-ja.com

設定API:ブログカテゴリを含むマルチチェックボックスを作成する方法

私はマルチオプションとしてすべてのWeb /ブログカテゴリを持つマルチチェックボックスを持つコールバック関数を作成する必要があります。

私のadd_settings_fieldsは次のとおりです。

   add_settings_field(  
        'select_page',                      
        'Select Blog Page',                         /
        'journal_combo_select_page_callback',   
        'journal_theme_blog_2_col',
        'blog_page_blog_2_col_section'  

    );

    add_settings_field( 
        'limit_posts',                      
        'Limit Posts',                          
        'journal_limit_posts_callback', 
        'journal_theme_blog_2_col',
        'blog_page_blog_2_col_section'  
    );

    add_settings_field(      // $id, $title, $callback, $page, $section, $args
    'check_categories',     // $id  
    'Choose Categories',    // $title 
    'journal_check_cats_callback', // $callback -
    'journal_theme_blog_2_col', // $page
    'blog_page_blog_2_col_section' // $section 
);

私はコールバック関数と通信するためにsettings_field 'check_categories'である種の配列を宣言する必要がありますか?

    function journal_check_cats_callback() {
$options = get_option('journal_theme_blog_2_col');

    $pag = journal_theme_blog_2_col;
    $_cats = get_terms( 'category' );

        $html = '';
        foreach ($_cats as $term) {
            $checked = isset( $term->term_id ) ? $term->term_id : '0' ;
            $html .= sprintf( '<input type="checkbox" id="%1$s[%2$s]" name="journal_theme_blog_2_col[]" value="%2$s"%3$s />', $pag, $term->term_id, checked( $checked, $options['check_categories'], false ) );
            $html .= sprintf( '<label for="%1$s[%3$s]"> %2$s</label><br>', $pag, $term->name, $term->term_id );
        }
        $html .= sprintf( '<span class="description"> %s</label>', '' );

        echo $html;
}

編集:

さて、私はこのコードを動かそうとしています、しかしそれはまだ静かではありません...私がSaveボタンをクリックする(送信する)現在、値はwp_optionsテーブルに保存されます。例えば:

settings_sectionには3つのsettings_fieldがあります。 1つのコンボボックス(select_page)、1つの入力テキストフィールド(limit_posts)、およびブログカテゴリ(check_categories)を含む1つのマルチチェックボックス、および以下はwp-optionsテーブルに保存されたデータです。

a:4:{s:11: "select_page"; s:1: "4"; s:11: "limit_posts"; s:3: "100"; i:0; s:2: "13"; i :1; s:1: "7";}

これが対応する配列です。

配列([select_page] => 4 [limit_posts] => 100 [0] => 13 [1] => 7)

解決する問題点:1 - チェックボックスはチェックされたままではありません!そしてもちろん私が新しいものをチェックせずにもう一度保存をクリックすると、オプションテーブルの値は消去されます。

2 - 私はまた "check_categories"が直列化された値に保存されないことに気づいた...だから私は "check_categories"からの配列の値だけをどのように扱うかわからないのでこれは問題だ

誰かが私に手助けをしてくれる?

ありがとう、ネルソン

2
naires

私は同じ問題を抱えていた、そしてここで私のために働くもの:

function journal_check_cats_callback() {
    $options    = get_option('journal_theme_blog_2_col');
    $pag        = journal_theme_blog_2_col;
    $_cats      = get_terms( 'category' );
    $html       = '';

    foreach ($_cats as $term) {

        $checked = in_array($term->term_id, $options) ? 'checked="checked"' : '';
        $html .= sprintf( '<input type="checkbox" id="%1$s[%2$s]" name="%1$s[]" value="%2$s" %3$s />', $pag, $term->term_id, $checked );
        $html .= sprintf( '<label for="%1$s[%3$s]"> %2$s</label><br>', $pag, $term->name, $term->term_id );
    }

    $html .= sprintf( '<span class="description"> %s</label>', '' );

    echo $html;

}
2
Vince