web-dev-qa-db-fra.com

Pouvons-nous permettre aux utilisateurs de choisir une page de garde parmi les options de thème?

Je sais qu’il est facile de choisir une page statique avant à partir de paramètres> lecture> page principale. Cependant, je cherche un moyen d’avoir cette fonctionnalité dans les options de thème. Pouvons-nous faire cela?

1
Ayanize

Depuis wp 3.4, vous pouvez utiliser le Customizer pour faire cela. Autant que je sache, "Static Front Page" est l'une des options par défaut du thème Customizer.

Consultez la page sur l'écran de personnalisation de l'apparence au codex pour une introduction générale. Et ensuite, peut-être les didacticiels et la documentation du personnaliseur pourraient s'avérer utiles.

enter image description here

1
tillinberlin

WordPress utilise les options API pour enregistrer ces paramètres. Tout ce que vous avez à faire est de trouver le nom du paramètre et sa valeur. Dans votre cas c'est comme suit:

//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>

Tout ce que vous avez à faire est de créer un formulaire qui affiche correctement les options. Vous pouvez inspecter le formulaire dans la page des paramètres WordPress et le copier. Les noms doivent correspondre à ceux que j'ai donnés ci-dessus (ce qui sera le cas si vous copiez le formulaire WordPress). Maintenant, lorsque vous envoyez le formulaire, il suffit de mettre à jour les paramètres comme suit:

//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);

C'est tout. J'espère que cela t'aides.

1
Rutwick Gangurde

METTRE À JOUR

Je l'ai compris. J'ai pris l'aide de wp-admin/options-reading.php. Voici l exemple de code. Il ne fait qu'ajouter l'option permettant de sélectionner une page à définir comme page d'accueil dans les options de mon thème.

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