如何将功能 Wordpress 插件放入简码(一个用户头像)

How to put function Wordpress plugin Into Shortcode (One User Avatar)

我想弄清楚是否可以将这段代码插入 functions.php

中的 wordpress 短代码
<p id="<?php echo esc_attr( ( 'add-new-user' == $user ) ? 'wpua-upload-button' : 'wpua-upload-button-existing' ); ?>">
                <input name="wpua-file" id="<?php echo esc_attr( ( 'add-new-user' == $user ) ? 'wpua-file' : 'wpua-file-existing' ); ?>" type="file" />

                <button type="submit" class="button" id="<?php echo esc_attr( ( 'add-new-user' == $user ) ? 'wpua-upload' : 'wpua-upload-existing' ); ?>" name="submit" value="<?php esc_html_e( 'Upload', 'one-user-avatar' ); ?>">
                    <?php esc_html_e( 'Upload', 'one-user-avatar' ); ?>
                </button>
            </p>

这段代码是插件的一部分,这是文件:https://github.com/onedesigns/one-user-avatar/blob/main/includes/class-wp-user-avatar.php#L253

能不能有好心人帮我看看怎么走?对不起,我是代码新手,我没有太多的技能,我是一个粉丝。

编辑:我按照评论中给我的用户的建议,以这种方式修改了代码。按钮显示正确,但如果我选择图像并单击加载,则不会执行保存。

//CUSTOM SHORTCODE
function short_shortcode() {
 
 //Global
 global $current_user;
 
 $user = $current_user;
 
 ob_start();
?>
<form>
 <p id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-upload-button' : 'wpua-upload-button-existing'); ?>">
   <input name="wpua-file" id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-file' : 'wpua-file-existing'); ?>" type="file" />

   <button type="submit" class="button" id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-upload' : 'wpua-upload-existing'); ?>" name="submit" value="<?php esc_html_e('Upload', 'one-user-avatar'); ?>">
     <?php esc_html_e('Upload', 'one-user-avatar'); ?>
   </button>
 </p>
</form> 
<?php
 return ob_get_clean();
}
add_shortcode('short', 'short_shortcode');

您需要捕获并 return 输出。以下是如何做到这一点:

<?php

function short_shortcode() {
  ob_start();
?>
  <p id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-upload-button' : 'wpua-upload-button-existing'); ?>">
    <input name="wpua-file" id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-file' : 'wpua-file-existing'); ?>" type="file" />

    <button type="submit" class="button" id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-upload' : 'wpua-upload-existing'); ?>" name="submit" value="<?php esc_html_e('Upload', 'one-user-avatar'); ?>">
      <?php esc_html_e('Upload', 'one-user-avatar'); ?>
    </button>
  </p>
<?php
  return ob_get_clean();
}
add_shortcode('short', 'short_shortcode');

更多信息在这里:https://codex.wordpress.org/Shortcode_API#Output

我找到了解决问题的办法。对于任何对此感兴趣的人,它在下面。我所做的是按照插件作者的建议,向从 https://github.com/onedesigns/one-user-avatar/blob/main/includes/class-wp-user-avatar-shortcode.php 中找到的 global 添加一些变量。 (有些可能不需要,但我已经包含了它们,因为我将在未来扩展短代码功能)。

之后,我引入了以下函数:do_action( 'wpua_update', $valid_user->ID );(总是取自我上面链接的文件)。

最后我添加了我对表单标签和 ob_start (); - return ob_get_clean();

感兴趣的代码

此外,在插件获取的 html 代码中,有必要为表单添加几行 php 以保存所有内容。 <? php wp_nonce_field ('update-user_'. $ user-> ID); ?><? php submit_button (__ ('Update Profile', 'one-user-avatar')); ?>

这是最终的工作代码

//SHORTCODE UPLOAD BUTTON ONE-USER-AVATAR
function short_shortcode() {
    
//Global
global   $wpua_force_file_uploader, 
         $show_avatars, 
         $wpua_shortcode, 
         $wp_user_avatar, 
         $all_sizes, 
         $blog_id, 
         $post, 
         $wpdb, 
         $current_user, 
         $wp_user_avatar, 
         $wpua_allow_upload, 
         $wpua_edit_avatar, 
         $wpua_functions;   

//Default user is current user
$user = $current_user;

//Function
do_action( 'wpua_update', $user->ID );

  ob_start();
?>
    <form id="wpua-edit-<?php echo esc_attr( $user->ID ); ?>" class="wpua-edit" action="" method="post" enctype="multipart/form-data">
        <p id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-upload-button' : 'wpua-upload-button-existing'); ?>">
         <input name="wpua-file" id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-file' : 'wpua-file-existing'); ?>" type="file" />
         <button type="submit" class="button" id="<?php echo esc_attr(('add-new-user' == $user) ? 'wpua-upload' : 'wpua-upload-existing'); ?>" name="submit" value="<?php esc_html_e('Upload', 'one-user-avatar'); ?>">
         <?php esc_html_e('Upload', 'one-user-avatar'); ?></button>
        </p>
        <?php wp_nonce_field( 'update-user_' . $user->ID ); ?>
        <?php submit_button( __( 'Update Profile', 'one-user-avatar' ) ); ?>
    </form>
        
<?php
  return ob_get_clean();
}
add_shortcode('short', 'short_shortcode');