如何查看当前用户(ID)是否有帖子

时间:2015-05-11 作者:Ammar Ul Hassan

我有一个自定义模板。在其中,我想检查当前登录用户是否有名为(student\\u form)的自定义帖子,如果帖子等于true,我想将其重定向到其他页面,我想向他/她显示我使用wp fronted user创建的表单。

下面是我写的代码,但它显示的是空白页。

     <?php 
     /*
     * Template Name: Form Page
     */
     get_header(); 


     global $current_user=null;
     get_currentuserinfo();

     $args=array(
     \'author\' => $current_user->ID,
     \'post_type\' => \'student_form\',
     \'caller_get_posts\'=> 1
     );
     $my_query = null;
     $my_query = new WP_Query($args);
     if( $my_query->have_posts() ) 
     {

     exit( wp_redirect(\'http://burjhuraira.com/orgibs/dashboard/\') );
     }

     else
     {
     echo do_shortcode(\'[wpuf_form id="414"]\');

     }

     wp_reset_query();

     get_footer(); 
     ?>

1 个回复
SO网友:birgire

请注意,重定向必须在发送HTTP头之前发生。

您可以尝试以下方法,将我们的逻辑放在template_redirect 挂钩回调(PHP 5.4+):

/**
 * Redirect logged-in users to the admin dashboard 
 * if the have written \'student_form\' posts
 * else display [wpuf_form id="414"]
 */

add_action( \'template_redirect\', function()
{
    if( ! is_user_logged_in() )
        return;

    if( wpse_current_user_has_posts( \'student_form\' ) )
    {
        // Redirect to the admin dashboard:
        wp_safe_redirect( admin_url() );  // Edit to your needs!
        exit();
    }
    else
    {
        // Note that here you might instead do a redirect to a page containing that shortcode.
        get_header();
        echo do_shortcode( \'[wpuf_form id="414"]\' );
        get_footer();
        exit();
    }

} );
我们在何处使用此助手函数:

/**
 * Check if the current user has written any posts in a given post type
 * 
 * @param string $post_type
 * @return bool
 */    
function wpse_current_user_has_posts( $post_type = \'post\' )
{
    $posts = [];
    if( $uid = get_current_user_id() )
    {
        $posts = get_posts( 
            [ 
                \'posts_per_page\' => 1, 
                \'post_type\'      => sanitize_key( $post_type ), 
                \'author\'         => $uid,
                \'fields\'         => \'ids\'
            ]
        );
    }
    return 0 < count( $posts );
}

结束

相关推荐

Register users by e-mail

我想使用电子邮件地址而不是用户名来注册和登录我的成员。我已经让登录部分使用中的一些代码工作this answer. 工作正常,但正如预期的那样,wordpress仍然希望在注册页面上有一个用户名(自定义,而不是默认)。这行代码注册用户:$user_signup = wp_insert_user( $user_data );, 注册时出现以下错误:无法创建登录名为空的用户。我猜这可以通过删除适当的过滤器来解决,但我对wordpress还不熟悉。删除用户名要求的代码是什么?