Niestandardowa strona ustawień typu posta, wybierz stronę do wyświetlenia archiwum

12

Postępowałem zgodnie z przyjętą odpowiedzią tego postu. Możliwe jest dodanie innego ustawienia do ustawienia „Wyświetlacze na pierwszej stronie” dla niestandardowego typu postu

ale nie do końca działało, musiałem porównać z zaakceptowaną odpowiedzią w tym poście.

Nie można wyprowadzić do_settings_sections. Nie rozumiem dlaczego

Teraz faktycznie działa przy użyciu następującego kodu

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

Aby to zadziałało, zauważyłem różnice między tymi dwoma przykładami i zmieniłem sekcje do_settings_section na edit_posts ... teraz myślę, że celem są uprawnienia lub możliwości, próbowałem innych bitów, ale wymyśliłem, że nie masz uprawnień itp. W wordpress.

Czy ktoś mógłby pomóc w zrozumieniu mojego kodu? Krążyłem w kółko i ogromnie doceniłbym inny zestaw oczu.

Następnie muszę to zrobić, aby strona faktycznie działała tak samo, jak ustawianie stron na stronie Czytanie, aby załadować moje archiwa typu niestandardowego postu.

Wielkie dzięki chłopaki!

EDYTOWAĆ:

Konieczność zderzenia, desperacko potrzebuje pomocy w tym zakresie! Z przyjemnością wypijemy piwo za naprawę!

Luke Wale
źródło
Czy ktoś może w ogóle pomóc?
Luke Wale
powinno działać. przetestowałem twój kod. czy potrzebujesz pomocy z czymkolwiek innym tutaj?
iantsch
Czytając twoje pytanie, nie jestem pewien, z czym potrzebujesz pomocy, ale oto odpowiedź, która pozwala Ci przypisać Szablon strony jako stronę archiwum
Howdy_McGee
Czy Twoim celem jest po prostu niestandardowy szablon niestandardowego typu postu?
Slam

Odpowiedzi:

1

Istnieje brudny (właściwie brudny jak diabli) sposób na dołączenie zwykłej strony WordPress jako strony archiwum z niestandardowej strony ustawień typu posta.

Najpierw musisz wyrejestrować typ wpisu i utworzyć go ponownie. Jeśli nie używasz niestandardowych argumentów lub masz dość odwagi, wypróbuj ten kod.

Dodaj ten fragment kodu na końcu strony ustawień.

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' );
}
Serkan Algur
źródło
1
To spowodowało, że poczułem się brudny, czytając to, ale jestem pod wrażeniem.
MikeNGarrett