web-dev-qa-db-ja.com

どのように使用しますか WP ナメクジ PDF ファイル/メディア?

私は私のサイト中でリンクされている何百ものPDFを持っています、そしてこれらのPDFはすべてユニークな文書番号と改訂を持っています。例えば902367バージョンI

Mysite.com/902367/のように、ドキュメントに直接リンクするように、ドキュメントごとにスラッグを定義します。リダイレクトはこれを実現する1つの方法ですが、REGEXを使用しても、これはずさんで理想的とは言えません。

テーマに添付ファイルがある場合、そのページにアップロードされた添付ファイルはすべて同じカテゴリに分類されることを説明する質問がもう1つ見つかりました。ただし、PDFをカテゴリやページに割り当てようとしているのではなく、本質的にそれらをページ自体にしているので、これは実際の状況には当てはまりません。これを達成するための最もクリーンな方法は、文書用の疑似ページを作成することですか?

私のPDFファイルにWordPressのスラッグ機能を適用するための最も雄弁な方法は何でしょうか?

1
fwho

私の意見では、mysite.com/pdf/<id>の形のエンドポイントか、あなたの好きなものに似たものを追加するのが最善です。こうすることで、添付ファイルを投稿/ページに添付したり、各pdfファイルのページを作成したりするのを避けることが、必要に応じて冗長になります。

これはとても小さくて基本的なガイドです。あなたはあなたのニーズに合わせて修正することができます。

まず最初に、mysite.com/pdf/<id>という形式のすべての要求に一致する エンドポイントを追加 を実行します。新しいエンドポイントを機能させるには、 書き換えルールをフラッシュ する必要があります。手動で設定 - >パーマリンク - >変更を保存を選択するか、 flush_rewrite_rules を使ってください。これはshutdownフック、またはプラグイン/テーマの起動時に実行されるべきです。 initフックでそれを実行するのは悪い習慣です。

function my_endpoints() {

    add_rewrite_endpoint( 'pdf', EP_ROOT);

}

add_action( 'init', 'my_endpoints' );

それからリクエストを処理するために template_redirect を使います。

function my_template_redirect() {

    global $wp_query;

    /* If it is a /pdf/<id> request then serve the file */        

    if(isset( $wp_query->query_vars['pdf'])){

        // You can use sanitize_file_name also
        $pdf_id = intval($wp_query->query_vars['pdf']); 

        /* Find the file and serve it */

    }

    return;
}

add_action( 'template_redirect', 'my_template_redirect' );
1
Laxmana