web-dev-qa-db-ja.com

Wp-admin上の特定のページ/投稿を隠し、カスタムフィルタを表示する

バスケット、検索、チェックアウトなどのページ用のページテンプレートを使用して、独立したeコマースCMSをワードプレスのテーマに統合しています。

これは今のところかなりうまくいっています。しかし、通常はsingle-posttype.phpテンプレートを作成するための動的ページがいくつかありますが、この場合のようにできません。 eコマースCMSから来ています。たとえば、商品の詳細ページや商品カテゴリの検索ページなどです。

私の解決策は、product-detailsというテンプレートを作成し、それ用のページを作成することでした。このテンプレートでは、実際のワードプレスのページデータは無視され、代わりにデータがeコマースCMSから読み込まれます。

私の直感は、これはベストプラクティスではありませんが、eコマースシステムの完全なワードプレスプラグイン統合を書くことを除いて、それは私が思い付くことができる最高です。

TL; DR

これが私に残す問題は、管理者がそのページを削除するか、テンプレートの割り当てを解除しようとすると、店が壊れることです。そのため、誤って削除したり編集したりしないように、これらのページを非表示にします(ページの内容は関係ありません)。

カスタムフィルタ(例:[システムページ])をクリックしない限り、wp-adminの[すべてのページ]メニューから一部のページを非表示にする方法はありますか?

1
jammypeach

実行前にクエリを調整するpre_get_posts()を使用してこれを行うことができます。そのため、クエリからページを除外できます。

function wpse_hide_special_pages($query) {

    // Make sure we're in the admin and it's the main query
    if ( !is_admin() && !is_main_query() ) {
        return;
    }

    // Set the ID of your user so you can see see the pages
    $your_id = 1;

    // If it's you that is logged in then return
    if ($your_id == get_current_user_id()) {
        return;
    }

    global $typenow;

    // Only do this for pages
    if ( 'page' == $typenow) {

        // Don't show the special pages (get the IDs of the pages and replace these)
        $query->set( 'post__not_in', array('8', '15', '14', '22') );
        return;

    }

}
add_action('pre_get_posts', 'wpse_hide_special_pages');

それが役立つことを願っています。

3
Steven Jones

あるいは、Bryan Gentryは、希望するページのゴミと削除の機能をプラグイン以外では削除できないように管理するという別の方法を説明しました。ここで、 ユーザーによって削除されているワードプレスのページ

0
Damian Green