Сторінка налаштувань користувацького типу публікації, виберіть сторінку для відображення архіву


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.