【问题标题】:How to put function Wordpress plugin Into Shortcode (One User Avatar)如何将功能 Wordpress 插件放入简码(一个用户头像)
【发布时间】:2022-01-19 23:29:21
【问题描述】:

我想知道是否可以将这段代码插入到 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

有好心人可以看一下并指导我如何移动吗?抱歉,但我是代码新手,我没有太多技能,而且我是粉丝。

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

//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');

【问题讨论】:

  • 这能回答你的问题吗? How to make wordpress shortcode
  • @bitski 感谢您的干预,我刚刚阅读了这篇文章,我认为这与我正在尝试做的事情不同。我设法将这段代码放在简码中,它只是不起作用,按钮不执行任何操作。

标签: php html wordpress plugins shortcode


【解决方案1】:

您需要捕获并返回输出。您可以这样做:

<?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

【讨论】:

  • 感谢您的干预。我听从了你的建议,按钮在那里,但它不起作用。它不采取任何行动。我已阅读您在链接中留下的文档,但我无法得出任何结论。不采取行动的原因可能是什么?也许我需要采取一些行动?对不起,我缺乏技能,我希望我能做的更多。
  • 你是如何实现短代码的?
  • 变量$user目前不存在于这个函数的作用域中。它要么需要通过短代码属性传递,要么由一些 WP 函数调用或其他东西确定。
  • @mikerojas 我把你写给我的代码放在 functions.php 文件中。基本上这是我在发布问题之前所做的,只是我没有添加 ob_start ();开头并返回ob_get_clean();最后。
  • @CBroe 在这里我们做了几乎相同的事情,只是插件代码的不同部分。 stackoverflow.com/questions/70278884/… 这行得通,但我不知道我现在是否需要以同样的方式构造新代码。
【解决方案2】:

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

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

最后我添加了我对表单标签和ob_start (); - return ob_get_clean();感兴趣的代码

此外,在插件采用的 html 代码中,需要添加几行 php 以保存所有内容。 &lt;? php wp_nonce_field ('update-user_'. $ user-&gt; ID); ?&gt;&lt;? php submit_button (__ ('Update Profile', 'one-user-avatar')); ?&gt;

这是最终的工作代码

//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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2013-01-02
    • 2015-12-12
    • 2018-07-16
    • 2015-08-09
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多