사용자 정의 게시물 유형 설정 페이지에서 아카이브를 표시 할 페이지를 선택하십시오.


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로 변경했습니다 ... 이제 목적은 권한 또는 기능을위한 것이므로 다른 비트를 시도했지만 다른 권한은 가지고 있지 않습니다. 워드 프레스.

아무도 내 코드를 이해하도록 도와 줄 수 있습니까? 나는 원을 그리며 돌아 다녔고 또 다른 눈 세트를 넘어서 고맙게 생각할 것입니다.

그런 다음 사용자 정의 게시물 유형 아카이브를로드하기 위해 실제로 페이지가 읽기 페이지의 페이지 설정과 동일하게 작동하도록해야합니다.

많은 감사합니다!

편집하다:

부딪히는 데 필사적으로 도움이 필요합니다! 수정을 위해 맥주를 넘겨 주셔서 감사합니다!


아무도 도와 줄 수 있습니까?
Luke Wale

작동해야합니다. 코드를 테스트했습니다. 아니면 다른 도움이 필요하십니까?
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.