Добавление настраиваемого поля на вкладке «Общие настройки» в wordpress

Я хочу добавить настраиваемое поле на вкладке «Общие настройки» в wordpress. Это текущие поля, которые WordPress имеет по умолчанию.

  1. Название сайта
  2. Строка тега
  3. URL-адрес адреса Wordpress ... и т. д.

Я хочу добавить настраиваемое поле, например, я хочу иметь поле для загрузки изображения.

Для этого мне пришлось отредактировать 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 Или я что-то упускаю, пожалуйста, подскажите.


person Leroy Mikenzi    schedule 14.10.2013    source источник
comment
Это не похоже на действительный PHP для меня. У вас есть }option.php в нескольких местах, и это }images/logo/" . $_FILES["file"]["name"])) тоже выглядит странно. Подсветка синтаксиса SO показывает код в виде строк и наоборот - вам где-то не хватает ".   -  person Hobo    schedule 14.10.2013
comment
@Hobo Я отредактировал свой код выше, пожалуйста, проверьте.   -  person Leroy Mikenzi    schedule 14.10.2013
comment
Какой результат вы получаете? Что-нибудь в ваших журналах PHP?   -  person Hobo    schedule 14.10.2013
comment
@ Хобо, я ничего не получаю. Когда я нажимаю «Сохранить» после того, как я установил изображение в поле загрузки, он говорит «Настройки сохранены». Но не загружает ни изображение, ни поле базы данных, которое я установил в таблице wp-options.   -  person Leroy Mikenzi    schedule 14.10.2013
comment
Учитывая, что у вас есть echo в каждой ветке вашего кода, вы должны увидеть некоторый вывод, если код работает. Что, кажется, подразумевает, что он не работает. $_POST['submit'] точно установлено? Вы загрузили нужный файл в нужное место? А в логах PHP ничего нет? Core PHP работает в среде WP, чтобы ответить на эту часть вашего вопроса. Является ли $_FILES массивом? Может быть, вам стоит перебрать его?   -  person Hobo    schedule 14.10.2013
comment
Вы не можете изменить вопрос таким образом, мой ответ больше не имеет смысла. Откройте еще один. Пожалуйста, обратитесь к Meta Stack Exchange, если у вас есть какие-либо вопросы относительно моего отката.   -  person brasofilo    schedule 14.10.2013


Ответы (2)


Остановите машины!

Вы _doing_it_wrong() , хотя эта функция не определяет, что вы делаете :)
Мы не трогаем основной файл, мы делаем плагины. Пожалуйста, восстановите ваш WP до свежего состояния.


Отвечая на заголовок вопроса

Добавление настраиваемого поля на вкладке «Общие настройки» в wordpress

Следует примеру из Ответы WordPress. Ключевой функцией является add_settings_field, сейчас она добавляет полноценный редактор WP, но его можно настроить показать любое поле. отличная статья, объясняющая 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' ) 
    );
}

результирующие настройки

person brasofilo    schedule 14.10.2013
comment
+1 за хороший момент и хороший пример. Но это не объясняет, почему исходный код не работает. - person Hobo; 14.10.2013
comment
@Hobo Ну, тогда ОП должен обосновать, почему он взламывает ядро ​​WP. В противном случае это проблема XY. - person brasofilo; 14.10.2013
comment
@brasofilo Мне очень нравится, как вы установили загрузку / вставку на вкладке «Общие настройки». Но это что-то дополнительное, так как есть редактор, который сбивает с толку, предположим, если добавить изображение и ввести под ним какой-то текст, будет ли он отображаться вместе с изображением? Я хотел что-то простое, как поле изображения. Спасибо, я действительно ценю это. - person Leroy Mikenzi; 14.10.2013
comment
@Mckenzi, ответ обновлен. Это только демонстрация того, что можно сделать, вам придется копать отсюда :) - person brasofilo; 14.10.2013
comment
@brasofilo Я обновил свой код в вопросе, пожалуйста, проверьте. - person Leroy Mikenzi; 14.10.2013

Если вам нужно добавить опцию на сайт, но она не обязательно должна быть на отдельной странице. Вероятно, вы можете добавить его на одну из существующих страниц настроек. Вот как добавить параметр на страницу общих настроек.

В этом случае я добавляю поле «любимый цвет», возможно, не лучший пример, так что действуйте и измените его. ????

$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() — это имя функции, которая должна использоваться для проверки входных данных, поэтому настройте ее по мере необходимости.

person Nasser Ali Karimi    schedule 03.03.2019