【问题标题】:Adding custom field in General setting TAB in wordpress在 wordpress 的常规设置选项卡中添加自定义字段
【发布时间】:2013-10-14 06:00:01
【问题描述】:

我想在 wordpress 的常规设置选项卡中添加一个自定义字段。 这是wordpress默认拥有的当前字段。

  1. 网站标题
  2. 标签行
  3. Wordpress 地址 URL ...等

我想添加一个自定义字段,例如,我想要一个图片上传字段。

为此我不得不编辑 options-general.php , options.php, general-template.php, 我必须在我的数据库中的 wp-options 表中插入一个条目

现在,当我用一个简单的 input type as text 对其进行测试时,它运行良好。 但是,当我为我的徽标上传设置 input type as file 时,它不起作用,这是我下面的代码。 options-general.php

<tr valign="top">
<th scope="row"><label for="logo"><?php _e('Logo') ?></label></th>
<td><input name="file" type="file"/></td>
</tr>

如您所见,我已将图像字段放在博客描述字段的正下方,此表单的操作会将我带到 options.php。 这是我的option.php

if ( is_multisite() && !is_super_admin() && 'update' != $action )
    wp_die(__('Cheatin&#8217; uh?'));
/* image upload function goes here */

if($_POST['submit']){

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("images/logo/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],"images/logo/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
}
    /* image upload function ends here */

上面我已经添加了简单的图片上传脚本,有的怎么不行,也没有上传文件到目录。

核心 PHP 代码是否在 WP 环境中工作或者我缺少某些东西,请建议。

【问题讨论】:

  • 在我看来这不是有效的 PHP。你有几个地方有}option.php,而这个}images/logo/" . $_FILES["file"]["name"])) 看起来也很奇怪。 SO 语法高亮显示将代码显示为字符串,反之亦然 - 您在某处缺少 "
  • @Hobo 我已经编辑了上面的代码,请检查。
  • 你得到什么输出?您的 PHP 日志中有任何内容吗?
  • @Hobo 我什么也没得到。当我在上传字段中设置图像后单击保存时,它显示“设置已保存。”。但不上传图像或我在 wp-options 表中设置的数据库字段
  • 假设您在代码的每个分支中都有一个echo,如果代码正在运行,您应该会看到一些输出。这似乎意味着它没有运行。 $_POST['submit'] 确定了吗?您已将正确的文件上传到正确的位置? PHP日志中什么都没有?核心 PHP 确实在 WP 环境中工作,以回答您问题的那一部分。 $_FILES 是一个数组吗?也许你应该循环它?

标签: php mysql wordpress image-uploading


【解决方案1】:

停止机器!

你是_doing_it_wrong(),虽然这个函数不会检测到你在做什么:)
我们不接触核心文件,we do plugins。请把你的 WP 恢复到一个新的状态。


回答问题标题

在 wordpress 的常规设置 TAB 中添加自定义字段

WordPress Answers 为例。关键功能是add_settings_field,现在它添加了一个完整的 WP 编辑器,但可以调整它以显示任何类型的字段。 nice article 解释了设置 API。

<?php
/**
 * Plugin Name: My Custom General Setting
 */

add_action( 'admin_init', 'wpse_57647_register_settings' );

/* 
 * Register settings 
 */
function wpse_57647_register_settings() 
{
    register_setting( 
        'general', 
        'html_guidelines_message',
        'esc_html' // <--- Customize this if there are multiple fields
    );
    add_settings_section( 
        'site-guide', 
        'Publishing Guidelines', 
        '__return_false', 
        'general' 
    );
    add_settings_field( 
        'html_guidelines_message', 
        'Enter custom message', 
        'wpse_57647_print_text_editor', 
        'general', 
        'site-guide' 
    );
}    

/* 
 * Print settings field content 
 */
function wpse_57647_print_text_editor() 
{
    $the_guides = html_entity_decode( get_option( 'html_guidelines_message' ) );
    echo wp_editor( 
        $the_guides, 
        'sitepublishingguidelines', 
        array( 'textarea_name' => 'html_guidelines_message' ) 
    );
}

【讨论】:

  • +1 表示好点和好例子。但这并没有解释为什么原始代码不起作用
  • @Hobo 好吧,那么 OP 必须证明他为什么要入侵 WP 核心。否则就是XY Problem
  • @brasofilo 我真的很喜欢您在常规设置选项卡中设置上传/插入的方式。但这是额外的,因为有一个编辑器并且会让人感到困惑,假设如果添加图像并在其下输入一些文本,它会与图像一起显示吗?我想要一个简单的图像字段。谢谢你,我真的很感激。
  • @Mckenzi,答案已更新。这只是一个演示可以做什么,你必须从这里开始:)
  • @brasofilo 我已在问题中更新了我的代码,请检查。
【解决方案2】:

如果您需要向网站添加一个选项,但它实际上并不需要位于其自己的页面上。您可能可以将其添加到现有设置页面之一。以下是向“常规设置”页面添加选项的方法。

在这种情况下,我添加了一个“最喜欢的颜色”字段,这可能不是最好的示例,所以继续进行更改。 ?

$new_general_setting = new new_general_setting();

class new_general_setting {
    function new_general_setting( ) {
        add_filter( 'admin_init' , array( &$this , 'register_fields' ) );
    }
    function register_fields() {
        register_setting( 'general', 'favorite_color', 'esc_attr' );
        add_settings_field('fav_color', '<label for="favorite_color">'.__('Favorite Color?' , 'favorite_color' ).'</label>' , array(&$this, 'fields_html') , 'general' );
    }
    function fields_html() {
        $value = get_option( 'favorite_color', '' );
        echo '<input type="text" id="favorite_color" name="favorite_color" value="' . $value . '" />';
    }
}

register_setting() 函数的第三个参数是用于验证输入数据的函数的名称,因此请根据需要进行自定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2017-12-26
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2023-04-08
    相关资源
    最近更新 更多