Pagina Impostazioni tipo di post personalizzato, scegli la pagina per visualizzare l'archivio


12

Quindi, ho seguito la risposta accettata di questo post. Possibile aggiungere un'altra impostazione a "Visualizzazione della prima pagina" per Tipo di post personalizzato

ma non ha funzionato del tutto, ha dovuto confrontare la risposta accettata in questo post.

Impossibile generare do_settings_sections. Non riesco a capire il perché

Ora funziona effettivamente usando il seguente codice

//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');
}
///wordpress/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']
        )
    ); 
}

Per farlo funzionare ho notato differenze tra i due esempi, e ho cambiato do_settings_sections in edit_posts ... ora nella mia mente lo scopo è per permessi o capacità, ho provato altri bit ma ho appena scoperto che non hai permessi ecc. In wordpress.

Qualcuno potrebbe aiutare a dare un senso al mio codice per favore? Ho girato in tondo e apprezzerei moltissimo un'altra serie di occhi che ci passano sopra.

Dopodiché ho bisogno di farlo in modo che la pagina funzioni proprio come l'impostazione delle pagine nella pagina di lettura, al fine di caricare i miei archivi di tipo di post personalizzati.

Mille grazie ragazzi!

MODIFICARE:

Dovendo urtare, ho disperatamente bisogno di aiuto su questo! Felice di pagare una birra per una correzione!


Qualcuno può aiutare affatto?
Luke Wale,

dovrebbe funzionare. ho testato il tuo codice. o hai bisogno di aiuto con qualcos'altro qui?
iantsch,

Leggendo la tua domanda Non sono sicuro di cosa tu abbia bisogno di aiuto, ma ecco una risposta che ti consente di assegnare un modello di pagina come una pagina di archivio
Howdy_McGee

Il tuo obiettivo è semplicemente quello di avere un modello personalizzato per un tipo di post personalizzato?
Slam

Risposte:


1

C'è un modo sporco (in realtà sporco come l'inferno) di allegare una normale pagina WordPress come pagina di archivio da una pagina di impostazioni del tipo di post personalizzato.

Devi prima annullare la registrazione del tipo di post e crearlo di nuovo. Se non usi argomenti personalizzati o se hai abbastanza coraggio, prova questo codice.

Aggiungi questo frammento di codice alla fine della pagina delle impostazioni.

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
Questo mi ha fatto sentire sporco solo leggendolo, ma sono impressionato.
MikeNGarrett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.