web-dev-qa-db-ja.com

ユーザーがテーマオプションからフロントページを選択できるようにすることはできますか?

私はそれが設定>読書>フロントページからフロント静的ページを選択するのは簡単だと知っています。しかし、私はこのオプションをテーマオプションに含める方法を探しています。これができますか?

1
Ayanize

Wp 3.4以降、テーマカスタマイザを使用してこれを実行できます。私の知る限りでは、「静的フロントページ」はテーマカスタマイザのデフォルトオプションの1つです。

一般的な紹介はcodexの 外観カスタマイズ画面 についてのページをチェックしてください。そして、おそらく カスタマイザのチュートリアルとドキュメント が次のステップに役立つでしょう。

enter image description here

1
tillinberlin

WordPressはoptions APIを使ってこれらの設定を保存します。あなたがする必要があるのは、設定名とその値を見つけることだけです。あなたの場合、それは以下の通りです:

//Option name - Value

//This corresponds to 'Front page displays'
show_on_front - posts/page

//This corresponds to the Static page: Front page name
page_on_front - <page id>

//This corresponds to the Posts page: Posts page name
page_for_posts - <page id>

あなたがしなければならないのは、オプションを正しく表示するフォームを作ることだけです。 WordPress設定ページでフォームを調べてコピーすることができます。名前は私が上で与えたものと一致しなければなりません(あなたがWordPressのフォームをコピーするならばそれはそうするでしょう)。フォームを送信したら、次のように設定を更新してください。

//If you want the page titled 'Home', with the ID 34 to be the homepage.
update_option('show_on_front', 'page');

update_option('page_on_front', 34);

それでおしまい。お役に立てれば。

1

更新

私はこれを考え出しました。私はwp-admin/options-reading.phpから助けを得ました。これがサンプルコードです。それは私のテーマオプションのフロントページとして設定するページを選択するオプションを追加するだけです。

add_menu_page('Menu Name', 'Menu Name', 'manage_options', 'menu-slug', 'menu_manage_options');

function menu_manage_options(){
    ?>

    <div class="wrap">
<h1><?php echo esc_html( $title ); ?></h1>

<form method="post" action="options.php">
<?php
settings_fields( 'reading' );

if ( ! in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) )
    add_settings_field( 'blog_charset', __( 'Encoding for pages and feeds' ), 'options_reading_blog_charset', 'reading', 'default', array( 'label_for' => 'blog_charset' ) );
?>

<?php if ( ! get_pages() ) : ?>
<input name="show_on_front" type="hidden" value="posts" />
<table class="form-table">
<?php
    if ( 'posts' != get_option( 'show_on_front' ) ) :
        update_option( 'show_on_front', 'posts' );
    endif;

else :
    if ( 'page' == get_option( 'show_on_front' ) && ! get_option( 'page_on_front' ) && ! get_option( 'page_for_posts' ) )
        update_option( 'show_on_front', 'posts' );
?>
<table class="form-table">
<tr>
<th scope="row"><?php _e( 'Front page displays' ); ?></th>
<td id="front-static-pages"><fieldset><legend class="screen-reader-text"><span><?php _e( 'Front page displays' ); ?></span></legend>
        <p><label>
        <input name="show_on_front" type="radio" value="page" class="tog" <?php checked( 'page', get_option( 'show_on_front' ) ); ?> />
        <?php printf( __( 'A <a href="%s">static page</a> (select below)' ), 'edit.php?post_type=page' ); ?>
    </label>
    </p>
<ul>
    <li><label for="page_on_front"><?php printf( __( 'Front page: %s' ), wp_dropdown_pages( array( 'name' => 'page_on_front', 'echo' => 0, 'show_option_none' => __( '&mdash; Select &mdash;' ), 'option_none_value' => '0', 'selected' => get_option( 'page_on_front' ) ) ) ); ?></label></li>

</ul>
<?php if ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_for_posts' ) == get_option( 'page_on_front' ) ) : ?>
<div id="front-page-warning" class="error inline"><p><?php _e( '<strong>Warning:</strong> these pages should not be the same!' ); ?></p></div>
<?php endif; ?>
</fieldset></td>
</tr>
<?php endif; ?>


<?php do_settings_fields( 'reading', 'default' ); ?>
</table>

<?php do_settings_sections( 'reading' ); ?>

<?php submit_button(); ?>
</form>
</div>

    <?php

}
0
Ayanize