page Paramètres de type de publication personnalisée, choisissez la page pour afficher l'archive

12

J'ai donc suivi la réponse acceptée de ce message Possibilité d'ajouter un autre paramètre au paramètre 'Affichages page de garde' pour le type de message personnalisé

mais n'a pas entièrement fonctionné, a dû comparer avec la réponse acceptée dans ce message.

Impossible de générer do_settings_sections. Je ne comprends pas pourquoi

Maintenant, cela fonctionne en utilisant le code suivant

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

Pour que cela fonctionne, j’ai remarqué des différences entre les deux exemples et changé de do_settings_sections en edit_posts ... maintenant, dans mon esprit, c’est pour les permissions ou les fonctionnalités que j’ai essayé, j’ai essayé d’autres bits, mais j’ai simplement trouvé Vous n’avez pas autorisations etc dans wordpress.

Quelqu'un pourrait-il aider à donner un sens à mon code s'il vous plaît? J'ai tourné en rond et j'apprécierais massivement un autre regard qui passe dessus.

Après cela, je dois ensuite faire en sorte que la page fonctionne réellement comme pour définir des pages dans la page Lecture, afin de charger mes archives de type publication personnalisées.

Merci beaucoup les gars!

EDIT:

Devoir cogner et avoir désespérément besoin d’aide! Heureux de payer une bière à PayPal pour une solution!

    
posée Luke Wale 24.07.2015 - 12:30

1 réponse

0

Il existe un moyen sale (en fait très sale) d’attacher une page WordPress ordinaire en tant que page d’archive à partir d’une page de paramètres de type publication personnalisée.

Vous devez d'abord désenregistrer le type de message, puis le recréer. Si vous n'utilisez pas d'arguments personnalisés ou si vous êtes assez courageux, essayez ce code.

Ajoutez ce fragment de code à la fin de votre page de paramètres.

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' );
}
    
réponse donnée Serkan Algur 28.11.2018 - 01:27