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


12

Por lo tanto, seguí la respuesta aceptada de esta publicación Posible agregar otra configuración a la configuración de 'Presentación de la página principal' para Tipo de publicación personalizada

pero no funcionó por completo, tuve que compararlo con la respuesta aceptada en esta publicación.

No se pueden generar las secciones do_settings_sections. No puedo entender por que

Ahora, en realidad funciona usando 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');
}
///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']
        )
    ); 
}

Para que funcione, noté diferencias entre los dos ejemplos, y cambié las secciones do_settings_sections a edit_posts ... ahora, en mi opinión, el propósito es para permisos o capacidades, he intentado otros bits, pero solo aparece No tienes permisos, etc. en WordPress.

¿Alguien podría ayudarme a entender mi código? He dado vueltas en círculos y agradecería enormemente que otro par de ojos lo revisen.

Después de esto, tengo que hacerlo para que la página realmente funcione como configurar páginas en la página de Lectura, para cargar mis archivos de tipo de publicación personalizada.

Muchas gracias chicos!

EDITAR:

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


¿Alguien puede ayudarme?
Luke Wale

deberia de funcionar. Probé tu código. o necesitas ayuda con algo más aquí?
iantsch

Al leer su pregunta, no estoy seguro de con qué necesita ayuda, pero aquí hay una respuesta que le permite asignar una Plantilla de página como una página de Archivo
Howdy_McGee

¿Su objetivo es simplemente tener una plantilla personalizada para un tipo de publicación personalizada?
Slam

Respuestas:


1

Hay una manera sucia (en realidad sucia como el infierno) de adjuntar una página ordinaria de WordPress como página de archivo desde una página de configuración de tipo de publicación personalizada.

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

Agregue este fragmento de código al final de su 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' );
}

1
Esto me hizo sentir sucio al leerlo, pero estoy impresionado.
MikeNGarrett
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.