Страница настроек пользовательских типов записей, выберите страницу для отображения архива

12

Итак, я следовал принятому ответу на этот пост. Можно добавить еще один параметр для параметра «Отображение на передней странице» для пользовательского типа сообщения.

но не совсем работал, пришлось сравнить с принятым ответом в этом посте.

Не могу вывести do_settings_sections. Не могу понять почему

Теперь это на самом деле работает с использованием следующего кода

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

Чтобы заставить его работать, я заметил различия между этими двумя примерами и изменил do_settings_sections на edit_posts ... Теперь, на мой взгляд, цель заключается в разрешениях или возможностях, я пробовал другие биты, но просто придумываю У вас нет разрешений и т. Д. В WordPress.

Может ли кто-нибудь помочь разобраться в моем коде, пожалуйста? Я ходил кругами и был бы очень признателен за еще один взгляд.

После этого мне нужно сделать так, чтобы страница фактически работала так же, как настройка страниц на странице «Чтение», для загрузки моих пользовательских архивов типов записей.

Большое спасибо, ребята!

РЕДАКТИРОВАТЬ:

Нужно натыкаться, отчаянно нужна помощь в этом! Рад заплатить пиво за исправление!

Люк Уэйл
источник
Кто-нибудь может помочь?
Люк Уэйл
он должен работать. Я проверил твой код. или вам нужна помощь с чем-нибудь еще здесь?
iantsch
Читая ваш вопрос, я не уверен, что вам нужна помощь, но вот ответ, который позволяет вам назначить шаблон страницы как страницу архива
Howdy_McGee
Ваша цель - просто создать собственный шаблон для типа сообщений?
Шлем

Ответы:

1

Существует грязный (на самом деле грязный как ад) способ прикрепить обычную страницу WordPress в качестве страницы архива со страницы настроек пользовательского типа записи.

Сначала нужно отменить регистрацию типа записи и создать заново. Если вы не используете настраиваемые аргументы или достаточно смелы, попробуйте этот код.

Добавьте этот фрагмент кода в конец страницы настроек.

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
Это заставило меня чувствовать себя грязным, просто читая это, но я впечатлен.
MikeNGarrett