错误未捕获ArgumentCountError我找不到

时间:2019-03-10 作者:Jennifer

我在wordpress的默认函数中添加了更多变量,我看到了这个错误。有什么建议吗?提前谢谢!!

add_action(\'new_to_pending\', \'custom_wp_new_user_notification_email\');
 add_action(\'draft_to_pending\', \'custom_wp_new_user_notification_email\');
 add_action(\'auto-draft_to_pending\', \'custom_wp_new_user_notification_email\');
add_action(\'init\', \'approve_post\');

function set_html_content_type() { return \'text/html\'; }


add_filter( \'wp_new_user_notification_email\', \'custom_wp_new_user_notification_email\', 10, 5 );


  function custom_wp_new_user_notification_email( 
 $wp_new_user_notification_email, $user, $blogname, $post ) {

    // get author of post
$author = new WP_User($post->post_author);
 // create a key for security check and save as meta
$check = md5( $author->user_email . $post->ID  );
update_post_meta( $post->ID, \'_approve_key\', $check);
   // set the content for the email

    // create an url vor verify link with some variables: key, post id, and email
   $url = add_query_arg( 
   array(
  \'email\'=>$author->user_email,
  \'approve\'=>$post->ID),
  site_url()
  );

  $check = md5( $author->user_email . $post->ID  );
   update_post_meta( $post->ID, \'_approve_key\', $check);
  $key = get_password_reset_key( $user );

 $headers .= \'Content-type: text/html; charset=utf-8\' . "\\r\\n";
 $message = sprintf(__(\'Bienvenido,\')) . "\\r\\n\\r\\n";
 $message = "Tu cuenta:
  " . sprintf(__(\'%s\'), $user->user_email) . "
   <br>
  Para establecer la contraseña:
   " . "\\r\\n\\r\\n";


  $enlace1= "". network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), \'login\') . "\\r\\n" . "";

 $message .=\'<a href= "\' . $url . \'" onclick="window.open("\' . $enlace1 . \'" , \\\'_blank\\\', \\\'width=600,height=350\\\');" >Crear Contraseña</a>\'. "\\r\\n";

$message .= "Saludos," . "\\r\\n";

 $wp_new_user_notification_email[\'message\'] = $message;

return $wp_new_user_notification_email;
}
错误

错误:Uncaught ArgumentCounter错误:参数太少,无法运行custom\\u wp\\u new\\u user\\u notification\\u email(),传入了3个。。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您的问题是如何使用wp_new_user_notification_email 滤器正如你从中看到的its documentation, 回调函数接收3个参数:

  • $wp_new_user_notification_email
  • $user
  • $blogname

    function custom_wp_new_user_notification_email( 
     $wp_new_user_notification_email, $user, $blogname, $post ) {
    
    此外,您还将要传递给回调的参数数量设置为5:

    add_filter( \'wp_new_user_notification_email\', \'custom_wp_new_user_notification_email\', 10, 5 );
    
    回调函数需要接受至少与在add_filter() 呼叫时,该号码不能超过原始筛选器传递的号码。

    因此,请更新您的add_filter() 呼叫支持所有人3 参数:

    add_filter( \'wp_new_user_notification_email\', \'custom_wp_new_user_notification_email\', 10, 3 );
    
    然后确保custom_wp_new_user_notification_email() 函数仅接受以下参数:

    function custom_wp_new_user_notification_email( 
     $wp_new_user_notification_email, $user, $blogname ) {
    
    您还需要解决$postcustom_wp_new_user_notification_email() 作用如我所示wp_new_user_notification_email 过滤器不通过任何$post 对象,但您在代码中经常使用它。这没有任何意义,因为新用户通知电子邮件与任何帖子无关。

    如果您在发布帖子时创建了一个用户(如图所示),然后需要在通知电子邮件中引用该帖子,那么您需要以不同的方式进行操作,因为新用户电子邮件对该帖子一无所知。

    一个选项是将post ID保存为user metapost_id 创建用户时,然后使用$user 用于检索值的回调函数的参数:

    function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
        $post_id = get_user_meta( $user->ID, \'post_id\', true );
        $post    = get_post( $post_id );
    
        // etc.
    }
    
    最后,我可以看到,您还尝试将此函数挂接到各种post状态转换中:

    add_action(\'new_to_pending\', \'custom_wp_new_user_notification_email\');
    add_action(\'draft_to_pending\', \'custom_wp_new_user_notification_email\');
    add_action(\'auto-draft_to_pending\', \'custom_wp_new_user_notification_email\');
    
    我真的不知道你在这里做什么,但你不能在上使用与筛选器相同的函数wp_new_user_notification_email 在这些钩子上,因为它们接受不同的论点,做不同的事情。如果希望函数在这些挂钩上运行,请使用不同的名称创建一个单独的函数。