web-dev-qa-db-ja.com

ユーザーが自分のプラグインコンテンツを表示するページを選択できるようにするオプションを作成する

私は自分のプラグイン用のオプションページを持っていますが、管理者が自分のプラグインの内容を表示するページを選択できるようにするオプションを作成する方法を理解することはできません。

これがどのように行われるかの例を誰かが持っていますか?

編集:私はプラグインを作成し、私のプラグインの内容を検索するためのウィジェットを持っています。ただし、プラグインのコンテンツが表示されているページに投稿するウィジェットが必要です。ウィジェットはサイドバー上にあるので、どのページからでも送信できますので、プラグインコンテンツがどのページに表示されているのかを検出し、そのページにアクセスできるようにする必要があります。 1.特定のページのショートコードを検出してそれを使用します。 OR 2.設定ページからオプションを作成して、管理者がプラグインコンテンツをどのページに表示するかを選択し、ショートコードを削除できるようにします。それが明確になることを願っています。

私は自分のプラグイン用の設定ページを持っています、私は利用可能なページのリストを取得してwp_optionsテーブルのオプションを保存/更新する方法を理解していません。

1
Russ

これは、 get_pages 関数を使用して、ページを選択するためのドロップダウン選択を提供するクイックオプションページです。 設定API はオプションを保存します。テンプレートにオプションの配列を読み込むには、 get_option を使います。そして get_post あなたのオプションに保存されているIDに関連付けられている投稿データをロードします。

add_action( 'admin_init', 'russ_options_init' );
add_action( 'admin_menu', 'russ_options_page' );

function russ_options_init(){
    register_setting(
        'russ_options_group',
        'russ_options',
        'russ_options_validate'
    );
}

function russ_options_page() {
    add_options_page(
        'Russ Options',
        'Russ Options',
        'manage_options',
        'russ_options',
        'russ_render_options'
    );
}

function russ_render_options() {
    ?>
    <div class="wrap">
        <form method="post" action="options.php">
            <?php
            settings_fields( 'russ_options_group' );
            $options = get_option( 'russ_options' );
            ?>
            <table class="form-table">
                <tr valign="top"><th scope="row">Choose a page</th>
                    <td>
                        <select name="russ_options[page_id]">
                            <?php
                            if( $pages = get_pages() ){
                                foreach( $pages as $page ){
                                    echo '<option value="' . $page->ID . '" ' . selected( $page->ID, $options['page_id'] ) . '>' . $page->post_title . '</option>';
                                }
                            }
                            ?>
                        </select>
                    </td>
                </tr>
            </table>
            <p class="submit">
                <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
            </p>
        </form>
    </div>
    <?php   
}

function russ_options_validate( $input ) {
    // do some validation here if necessary
    return $input;
}
2
Milo