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 `` Affichage de la première page '' pour le type de message personnalisé.

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

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

Maintenant, cela fonctionne réellement 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');
}
///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']
        )
    ); 
}

Pour le faire fonctionner, j'ai remarqué des différences entre les deux exemples et changé do_settings_sections en edit_posts ... maintenant dans mon esprit, le but est pour les autorisations ou les capacités, j'ai essayé d'autres bits mais vient avec Vous n'avez pas d'autorisations, etc. dans wordpress.

Quelqu'un pourrait-il m'aider à comprendre mon code s'il vous plaît? J'ai tourné en rond et j'apprécierais massivement une autre paire d'yeux.

Après cela, je dois faire en sorte que la page fonctionne réellement comme la définition de pages dans la page de lecture, afin de charger mes archives de type de message personnalisé.

Merci beaucoup les gars!

ÉDITER:

Devant se cogner, j'ai désespérément besoin d'aide! Heureux de payer une bière pour une solution!

Luke Wale
la source
Quelqu'un peut-il aider du tout?
Luke Wale
ça devrait marcher. j'ai testé votre code. ou avez-vous besoin d'aide pour autre chose ici?
iantsch
En lisant votre question, je ne sais pas avec quoi vous avez besoin d'aide, mais voici une réponse qui vous permet d'affecter un modèle de page en tant que page d'archive
Howdy_McGee
Votre objectif est-il simplement d'avoir un modèle personnalisé pour un type de publication personnalisé?
Slam

Réponses:

1

Il existe un moyen sale (en fait sale comme l'enfer) de joindre une page WordPress ordinaire en tant que page d'archive à partir d'une page de paramètres de type de publication personnalisée.

Vous devez d'abord désinscrire le type de publication, puis créer à nouveau. 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' );
}
Serkan Algur
la source
1
Cela m'a fait sentir sale juste en le lisant, mais je suis impressionné.
MikeNGarrett