web-dev-qa-db-ja.com

WP エディタが入力プレースホルダ属性を削除する

WP Editorが入力テキスト要素の "placeholder"属性も削除するのはなぜですか?もちろん、私はHTMLモードを使用しています。これが入力です。

<input type="text" value="" name="s" style="width: 550px;" placeholder="Search this website..">

投稿を更新した後(削除後):

<input type="text" value="" name="s" style="width: 550px;">

WP Editorにそのような属性を取り除かせたくありません。

どんな助け?

3
premtech11

許可された要素と属性のリストは、$allowedposttagsに設定されているグローバル変数wp-includes/kses.phpに格納されています。

これを上書きするには、次の内容の単純な muプラグイン を作成します。

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: Enable placeholder attribute for input elements in post tags.
 * Version: 2012.07.18
 */

add_action( 'init', 'wpse_54829_register_placeholder' );


function wpse_54829_register_placeholder()
{
    global $allowedposttags;

    $default = empty ( $allowedposttags['input'] ) ? array () : $allowedposttags['input'];
    $custom  = array (
        'placeholder' => TRUE,
        'name'        => TRUE,
        'value'       => TRUE,
        'size'        => TRUE,
        'maxlength'   => TRUE,
        'type'        => TRUE,
        'required'    => TRUE
    );

    $allowedposttags['input'] = array_merge( $default, $custom );
}

コンテンツ<input placeholder="pass" required />を含むこの投稿は、作成者アカウントで作成されました:

enter image description here

3
fuxia

あなたはショートコードを使うことができます! ;)

<?php

// desired output: <input type="text" value="" name="s" style="width: 550px;" placeholder="Search this website..">
// sc: [text_input name="s" style="width: 550px;" placeholder="Search this website.."]

add_shortcode('text_input','text_input_sc');
function text_input_sc($atts) {

    // modify defaults as you wish
    $defaults = array(
        'id' => null,
        'class' => null,
        'value' => null,
        'name' => null,
        'size' => null,
        'style' => null,
        'placeholder' => null
    );

    $args = shortcode_atts($defaults, $atts);

    $out = array();

    foreach ($args as $attr => $value) {

        if ( null !== $value )
            $out[] = $attr.'="'.$value.'"';

    }

    $out = trim(implode(' ', $out));

    if( !empty($out) )
        $out = ' '.$out;

    return vsprintf('<input type="text"%s>', $out);

}

テストされていませんが、間違いなく動作するはずです。

0
Evan Mattson