在函数外调用自定义posttype。php

时间:2016-03-18 作者:hello123

在WordPress中,我可以创建一个带有“是”或“否”复选框的用户。当复选框为“是”时,我想创建一个自定义帖子类型。这可能吗?我尝试调用if语句中的函数:

 global $current_user;
 $client_id = $current_user->ID;

 if(get_field(\'client-selectbox\',\'user_\'. $client_id) == "yes")
 {
      create_posttype();
 }
在我的职能中。php我有:

function create_posttype() {

register_post_type( \'faq\',
// CPT Options
    array(
        \'labels\' => array(
            \'name\' => __( \'Faq\' ),
            \'singular_name\' => __( \'Faq\' )
        ),
        \'public\' => true,
        \'has_archive\' => true,
        \'rewrite\' => array(\'slug\' => \'faq\'),
    )
);
}
但它并没有创建自定义的帖子类型。

1 个回复
SO网友:iantsch

一步一步:

如果你把所有的东西都放在functions.php 或者插件文件,应该可以正常工作。

我们需要一个用户元字段,用户可以在其中决定是否要激活某个CPT。

add_action( \'show_user_profile\', \'my_user_meta_show_faq\' );
add_action( \'edit_user_profile\', \'my_user_meta_show_faq\' );
add_action( \'user_new_form\', \'my_user_meta_show_faq\' );

function my_user_meta_show_faq( $user ) {
    $show_faq = get_user_meta($user->ID, \'show_faq\', true); ?>
    <h3>Show FAQs?</h3>
    <?php _e(\'Yes\', \'my_textdomain\');?>
    <input type="radio" name="show_faq" value="yes" <?php checked(\'yes\', $show_faq); ?> /><br />
    <?php _e(\'No\', \'my_textdomain\');?>
    <input type="radio" name="show_faq" value="no" <?php checked(\'no\', $show_faq); ?> /><br />
<?php }

add_action( \'personal_options_update\', \'my_user_meta_save\' );
add_action( \'edit_user_profile_update\', \'my_user_meta_save\' );

function my_user_meta_save( $user_id ) {
    if ( !current_user_can( \'edit_user\', $user_id ) )
        return;
    if($_POST[\'show_faq\'] === \'yes\') {
        update_user_meta($user_id, \'show_faq\', \'yes\');
    } else {
        delete_user_meta($user_id, \'show_faq\');
    }
}
我们需要在WP init上查询该选项。如果该选项为真,我们将注册我们的CPT。

add_action( \'init\', \'my_cpt_init\' );

function my_cpt_init() {
    if ( !is_user_logged_in() )
        return;
    $current_user = wp_get_current_user();
    $show_faq = get_user_meta($current_user->ID, \'show_faq\', true);
    if($show_faq === \'yes\') {
        register_post_type( \'faq\', array(
            \'labels\' => array(
                \'name\' => __( \'Faq\' ),
                \'singular_name\' => __( \'Faq\' )
            ),
            \'public\' => true,
            \'has_archive\' => true,
            \'rewrite\' => array(\'slug\' => \'faq\'),
            \'publicly_queryable\' => true,
            \'supports\' => array(
                \'title\',
                \'editor\'
            )
        ));
    }
}
现在,我们可以使用用户元字段的状态切换CPT。