web-dev-qa-db-ja.com

同じプラグイン設定フォームでの画像のアップロードとその他のオプション

私はワードプレスのプラグインを書きます。私のプラグインには2つの選択肢があります。 1つは画像のアップロードメカニズム、もう1つはチェックボックスです。私のコードは以下の通りです。

<?php
/*
Plugin Name: Plugin Name
Plugin URI:
Description: Description
Version: 0.0.1
Author: Author Name
Author URI:
License: GPL3+
*/

add_action( 'admin_menu', 'pluginname_menu' );

function pluginname_menu()
    {
    add_options_page( 'PluginName Options', 'pluginname', 'manage_options', 'pluginname_options_page', 'pluginname_options_page' );
    }

add_action( 'admin_init', 'pluginname_admin_init' );

function pluginname_admin_init()
    {
    register_setting( 'pluginname_options', 'pluginname-settings' );
    add_settings_section( 'section', 'Section', 'pluginname_section_callback', 'pluginname_options-section' );
    $options_array = get_option('pluginname-settings');
    add_settings_field( 'upload_image', 'Upload image', 'image_upload_callback', 'pluginname_options-section', 'section');
    add_settings_field( 'use_image', 'Use image', 'use_image_callback', 'pluginname_options-section', 'section', array(
    'name' => 'pluginname-settings[use_image]',
    'value' => isset($options_array['use_image']) ? $options_array['use_image'] : '')
    );

    }

function pluginname_validate($input)
    {
    $options_array = get_option('pluginname-settings');
    $output = array_merge($options_array, $input);
    return $output;
    }

function pluginname_section_callback()
    {
    echo 'Feel free to change parameters below.';
    }

function upload_image_callback()
    {
    echo "<label for='image'>Filename:</label><input type='file' name='file' value='image' />";
    }

function use_image_callback( $args )
    {
    $name = esc_attr( $args['name'] );
    $value = esc_attr( $args['value'] );
    echo "<input type='checkbox' name='$name' value='$value'>";
    }

function pluginname_options_page()
    {
    $uploadedfile = isset($_FILES['file']) ? $_FILES['file'] : '';
    if ($uploadedfile['error'] == '0')
        {
        $upload_overrides = array( 'test_form' => false );
        $movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
        $options_array = get_option('pluginname-settings');
        $options_array['upload_image'] = $movefile['url'];
        update_option('pluginname-settings', $options_array);
    }

    echo "<div class='wrap'>";
    echo "<h2>Options</h2>";
    echo "<form action='options.php' method='POST' enctype='multipart/form-data'>";
    settings_fields( 'pluginname_options' );
    do_settings_sections( 'pluginname_options-section' ); 
    submit_button('Update', 'primary',  'submit-form', false);
    echo "</form>";
    echo "</div>";
}
?>

同じ形式で両方のオプションを使用することは困難です。 action='options.php'を削除した場合、チェックボックスの値は保存されません(検証関数は呼び出されません)。 enctype='multipart/form-data'を削除するとアップロードできません。すべてをそのままにしておくと、オプションページは完全に使用できなくなります。助けてください。

1

テキストフィールドのパスとして画像を保存します。 WP mediaUploaderを使用して画像のアップロードを処理することを試みることができます。

https://laurahoughcreative.co.uk/using-the-wordpress-media-uploader-in-your-plugin-options-page/ /

1
André Kelling