web-dev-qa-db-fra.com

Paramètres de type de publication personnalisés, choisissez la page pour afficher les archives

J'ai donc suivi la réponse acceptée de ce message Possibilité d'ajouter un autre paramètre au paramètre 'Affichages de la page d'accueil' pour le type de message personnalisé

mais n'a pas entièrement fonctionné, a dû comparer avec la réponse acceptée dans ce post.

Impossible de générer do_settings_sections. Je ne comprends pas pourquoi

Maintenant, cela fonctionne réellement en utilisant le code suivant

//Add settings to menu
add_action( 'admin_menu', 'events_options_add_page' );
function events_options_add_page() {
//  add_submenu_page('edit.php?post_type=events', 'Events Admin', 'Events Settings', 'edit_posts', basename(__FILE__), 'events_options_do_page');
    add_submenu_page('edit.php?post_type=events', 'Events Admin', 'Events Settings', 'edit_posts', basename(__FILE__), 'events_options_do_page');
}
//https://wordpress.stackexchange.com/questions/32689/possible-to-add-another-setting-to-front-page-displays-setting-for-custom-post


//Fix Cap to allow editors to edit theme options
function events_get_options_page_cap() {
    return 'edit_posts';    
}
add_filter('option_page_capability_events-options', 'events_get_options_page_cap' );


function events_options_do_page() {
?>
    <div class="wrap">
        <?php screen_icon(); ?>
        <h2><?php _e( 'Events Options', 'FoundationPress' ); ?></h2>
        <form action="options.php" method="post">
            <?php
            settings_fields( "events_settings_options" );
            do_settings_sections( "edit_posts" );
            ?>
            <?php submit_button( __( "Save changes", "FoundationPress" ), "primary", "submit", true ); ?>
        </form>
    </div>
    <?php
}

//Register Settings
add_action( 'admin_init', 'events_settings_register' );

function events_settings_register() {
    register_setting( "events_settings_options", "events_settings_options", "events_settings_validate" ); //Register main settings
//  add_settings_section( "events_cpt_settings", __( "Events Page Settings", "FoundationPress" ), "events_settings_dummy", "edit_posts"  ); //Make settings text section
//  add_settings_field( "events_settings_cpt_page", __( "Page for events", "FoundationPress" ), "events_settings_page_select", "edit_posts", "events_settings_options" );
    add_settings_section( "events_cpt_settings", __( "Events Page Settings", "FoundationPress" ), "events_settings_dummy", "edit_posts"  ); //Make settings text section
    add_settings_field( "events_settings_cpt_page", __( "Page for events", "FoundationPress" ), "events_settings_page_select", "edit_posts", "events_cpt_settings" );
}

function events_settings_dummy() {}

//Validate Settings
function events_settings_validate ($input) {
    $valid = get_option ( "events_settings_options" );
    $valid['events_page'] = (int) $input['events_page'];
    return $valid;  
}

//Settings Fields
function events_settings_page_select() {
    $options = get_option( 'events_settings_options' );
    wp_dropdown_pages(
        array(
            'name' => 'events_settings_options[events_page]',
            'echo' => 1,
            'show_option_none' => __( '&mdash; Select &mdash;' ),
            'option_none_value' => '0',
            'selected' => $options['events_page']
        )
    ); 
}

Pour que cela fonctionne, j'ai remarqué des différences entre les deux exemples, et j'ai changé do_settings_sections en edit_posts ... maintenant, dans mon esprit, le but est d'obtenir des autorisations ou des fonctionnalités. wordpress.

Quelqu'un pourrait-il aider à donner un sens à mon code s'il vous plaît? J'ai tourné en rond et j'apprécierais massivement un autre regard.

Après cela, je dois ensuite faire en sorte que la page fonctionne réellement comme pour définir des pages dans la page Lecture, afin de charger mes archives de type publication personnalisées.

Merci beaucoup les gars!

MODIFIER:

Devoir cogner, a désespérément besoin d’aide! Heureux de payer une bière à Paypal!

12
Luke Wale

Il existe un moyen sale (en fait très sale) d’attacher une page WordPress ordinaire en tant que page d’archive à partir d’une page de paramètres de type publication personnalisée.

Vous devez d'abord désenregistrer le type de message, puis le recréer. Si vous n'utilisez pas d'arguments personnalisés ou si vous êtes assez courageux, essayez ce code.

Ajoutez ce fragment de code à la fin de votre page de paramètres.

if(isset($_GET['settings-updated']) && $_GET['settings-updated'] == true){
    //Dirty as hell
    $esettings = get_option ( "events_settings_options" );
    $getslug = get_post_field('post_name',$esettings['events_page']);

    unregister_post_type('events');
    register_post_type('events',array(
        'public' => true,
        'rewrite' => array('slug'=>'events'),
        'has_archive' => $getslug,
    ));
    //Needed for automated rewrite rules
    flush_rewrite_rules();
    //To test the functionality
    echo get_post_type_archive_link( 'events' );
}
1
Serkan Algur