Добавяне на персонализирано поле в TAB с обща настройка в wordpress

Искам да добавя персонализирано поле в TAB с общи настройки в 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
@Hobo Не получавам нищо. Когато щракна върху запазване, след като задам изображението в моето поле за качване, се казва Settings Saved.. Но не качва изображението, нито полето на базата данни, което съм задал в таблицата с 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 до ново състояние.


Отговор на заглавието на въпроса

Добавяне на персонализирано поле в TAB с общи настройки в wordpress

Следва пример от WordPress Answers. Ключовата функция е 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 Е, тогава OP трябва да оправдае защо хаква 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