web-dev-qa-db-ja.com

行ごとにwpautopを回避してショートコードからテーブルを作成する

私はおそらくこれをすべて間違ってやっている、そしてはるかに簡単な解決策があるでしょう。基本的に、技術的な知識がほとんどなくても編集可能なツアー日程表を作成しようとしていますが、ショートコードは処理できます。 (日付を表示し、有効期限が切れるチケットリンクを持つことに関して)テーブルにカスタム関数がいくつかあります。それは私が不格好なテーブルプラグインを避けたいようにします。

これが私が実験しているコードです。
それぞれの新しい行と別々のショートコードにタグを付けます。

Wpautopを完全に無効にしたくないのは、この表が表示されることになるウェブサイト全体およびページの他の場所で広く使用されているためです。

[tour_table tour_name="The Tour Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[tour_table_line tour_date="2011-06-19" ticket_link="http://ticket.link/" venue="The Venue Name"]
[/table]

テーブルの構文解析はすべてwrap.Functionのtour_table()関数と(wrap関数の)do_shortcode()関数内で実行される関数[tour_table_line]によってfunctions.phpで処理されます。

だから基本的な問題は、それぞれの新しい行がそれ自身新しいものを稼いでいるということです。
タグ。テーブルの上に大きなスペースを置いています。

誰かがより洗練された解決策を持っているか、または私が探している機能を手に入れるのを手伝うことができるならば、私はあなたの助けに非常に感謝しているでしょう。

あなたがより詳細を必要とするならば、私に知らせてください。

関数を追加するために編集します(おそらくそこにはかなり複雑なコードが入ります:

function tour_table($atts,$content = null){
    extract( shortcode_atts( array(
        'tour_name' => '',
        'anchor_table' => ''
    ), $atts ) );

    if($anchor_table!=""){
        $hid = "id=\"tourscrollto\"";
    }else{
        $hid = "";
    }

    $theoutput = "<h3 $hid style=\"text-align: left; font-weight: strong; font-size: 12pt; margin-top: 20px;\">";
    $theoutput .= $tour_name;
    $theoutput .= "</h3><table class=\"tourdates\" style=\"font-size: 10pt;\" width=\"100%\"><tbody>";
    $theoutput .= do_shortcode($content);
    $theoutput .= "</tbody></table>";
    return $theoutput;
}

function tour_table_line($atts){
    extract( shortcode_atts( array(
        'tour_date' => '',
        'ticket_link' => '',
        'venue' => 'The Venue'
    ), $atts ) );

    $date_original = $tour_date;
    $date_unix = strtotime($tour_date);

    $theoutput = "<tr><td>";
    $theoutput .= date('D',$date_unix);
    $theoutput .= "</td><td>";
    $theoutput .= date('j M',$date_unix);
    $theoutput .= "</td><td>";
    $theoutput .= $venue;
    $theoutput .= "</td><td>";
    //$ticketlink = ticketlinkexpire($date_original,"<a href=\"$ticket_link\" target=\"_blank\">Buy Tickets</a>","");
    //$theoutput .= $ticketlink;
    $theoutput .= "</td></tr>";

    return $theoutput;

}

add_shortcode( 'tour_table' , 'tour_table' );
add_shortcode( 'tour_table_line' , 'tour_table_line' );
3
Will

余分なスペースはwpautop()から来ていて、これは改行ごとに<br />を挿入します。 do_shortcode()を呼び出す前にこれらを取り除かなければなりません。

さらに、add_filter( 'the_content', 'shortcode_unautop' );を使用してください。私の経験から、あなたは両方が必要です。おそらくバグです。

例としてmy ショートコードプラグイン を見てください。それはテーブルのためのショートコードも持っています。

余談:ショートコードがテーマの一部になってはいけません。あなた自身やあなたのクライアントを今そのテーマの使用にロックするからです。 Justin Tadlockの記事 を参照してください。

1
fuxia

これをfunctions.phpで使ってから、autopしたくないエディタのコードを<!-- noformat on -->と<!-- noformat off -->の行で囲みます。

   // <!-- noformat on --> and <!-- noformat off --> function

function newautop($text)
{
    $newtext = "";
    $pos = 0;

    $tags = array('<!-- noformat on -->', '<!-- noformat off -->');
    $status = 0;

    while (!(($newpos = strpos($text, $tags[$status], $pos)) === FALSE))
    {
        $sub = substr($text, $pos, $newpos-$pos);

        if ($status)
            $newtext .= $sub;
        else
            $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

        $pos = $newpos+strlen($tags[$status]);

        $status = $status?0:1;
    }

    $sub = substr($text, $pos, strlen($text)-$pos);

    if ($status)
        $newtext .= $sub;
    else
        $newtext .= convert_chars(wptexturize(wpautop($sub)));      //Apply both functions (faster)

    //To remove the tags
    $newtext = str_replace($tags[0], "", $newtext);
    $newtext = str_replace($tags[1], "", $newtext);

    return $newtext;
}

function newtexturize($text)
{
    return $text;   
}

function new_convert_chars($text)
{
    return $text;   
}

remove_filter('the_content', 'wpautop');
add_filter('the_content', 'newautop');

remove_filter('the_content', 'wptexturize');
add_filter('the_content', 'newtexturize');

remove_filter('the_content', 'convert_chars');
add_filter('the_content', 'new_convert_chars');
1
markratledge

gigpress について聞いたことがありますか?これはあなたにいいやり方であなたが望む機能を与えるでしょう(ユーザーフレンドリーな入力)。それはあなたがいくつかのコードを捨ててあなたのテーマを修正しなければならないことを意味するでしょうが、長い目で見ればあなたに多くの時間を節約するでしょう。

0
Digitalchild