Página de configuración de tipo de publicación personalizada, elija la página para mostrar el archivo

12

Entonces, seguí la respuesta aceptada de esta publicación Es posible agregar otra configuración a la configuración de 'Portada de la página' para Tipo de publicación personalizada

pero no funcionó completamente, tuvo que comparar con la respuesta aceptada en esta publicación.

No se puede generar do_settings_sections. No puedo entender por qué

Ahora, realmente funciona con el siguiente código

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

Para que funcione, noté diferencias entre los dos ejemplos, y cambié do_settings_sections por edit_posts ... ahora en mi mente, el propósito es para permisos o capacidades, he intentado otras partes pero simplemente aparece. No tienes permisos etc en wordpress.

¿Alguien podría ayudar a entender mi código, por favor? He dado vueltas en círculos y apreciaría enormemente otro par de ojos que lo revisan.

Después de esto, necesito hacerlo para que la página funcione como la configuración de páginas en la página de Lectura, para cargar mis archivos personalizados de tipo de publicación.

Muchas gracias chicos!

EDITAR:

Tener que toparse, ¡necesito ayuda desesperadamente en esto! Feliz de pagar una cerveza por una corrección!

    
pregunta Luke Wale 24.07.2015 - 12:30

1 respuesta

0

Hay una forma sucia (realmente sucia como el infierno) de adjuntar una página de WordPress normal como una página de archivo desde una página de configuración de tipo de publicación personalizada.

Primero debe cancelar el registro del tipo de publicación y volver a crear. Si no usa argumentos personalizados o si es lo suficientemente valiente, intente este código.

Agrega este fragmento de código al final de tu página de configuración.

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' );
}
    
respondido por el Serkan Algur 28.11.2018 - 01:27