web-dev-qa-db-ja.com

Wpautop()の番号付けセクションおよびブロックレベル要素。ロングフォームライティング用のCMSとしてのWordpress。

私はWordpressのためのプラグインを書く方法を学び始めています。私はWPを長いエッセイ(6000から9000語以上)のCMSとして使うことに興味があります。私の問題は私がKindleの問題と呼んでいるものです。私の電子書籍リーダーまたはブラウザで電子ブックを引用している場合、特定の箇所を参照して、絶対的な「ページ番号」がないため、読者が正確なテキストの場所までたどることができるとわかりません。

考えられる解決策の1つは、テキストにHTMLアンカーを入れることです。 Wordpressにこれを自動的に行わせる方法はありますか?さらに良いことに、Wordpressは要素をSGML要素の始まりであるかのように扱い、それから各見出し、各小見出し、そしてそれらに囲まれた各段落またはブロックに対して自動的に階層番号付きアンカーを生成することが可能です。私はLaTeXが\ section {}タグに対して何をするのかを考えています。

これは行われましたか?このフィルタは正確にどこに適用されますか? Adam Brown は、1500以上のフックが使えると言っています。それはすごいことですが、同時に大変なことです。

ご協力いただきありがとうございます。

乾杯、

ライアン

http://rschram.org/

4
Ryan Schram

あなたはおそらく the_content のようなフィルタでこれを達成することができます。

これは、<p>のすべてのインスタンスを検索し、名前付きアンカーを挿入してから、コンテンツの先頭に各アンカーへのリンクのリストを追加する簡単で汚い例です。

Shortcode API もチェックしてください。これは同様に[section id="something"]のようなあなた自身のショートコードを追加することによってテキストで任意のセクションを追加することを可能にします。

class InsertAnchors {
    protected $count = 0;
    protected $links = '';
    public function build( $pattern, $content ) {
        $this->count = 0;
        $this->links = '';
        $content = preg_replace_callback( $pattern, array( $this, '_replacer' ), $content );
        return '<p>' . $this->links . '</p>' . $content;
    }
    public function _replacer( $matches ) {
        $this->count++;
        $this->links .= '<a href="#section_' . $this->count . '">Section ' . $this->count . '</a><br>';
        return '<p><a name="section_' . $this->count . '"></a>';
    }
}

function anchors_content_filter( $content ){
    $insert = new InsertAnchors();
    return $insert->build( '~<p>~', $content );
}
add_filter( 'the_content', 'anchors_content_filter', 100 );
2
Milo