sql >> データベース >  >> RDS >> Mysql

プラグインのカスタムテーブルでwordpressposts_orderbyフィルター

    わかりました、解決しました。

    問題は、postクエリにpostmetaテーブルが含まれていないため、custom_joinに追加したことです。 このような機能:

    add_filter('posts_join','custom_join');
    add_filter('posts_orderby','custom_orderby');
    
    function custom_join($join){
        global $wpdb;
        $customTable = $wpdb->prefix."custom_table";
    
        if(!is_admin){
            $join .= "LEFT JOIN $wpdb->postmeta p1 ON $wpdb->posts.ID = p1.post_id";
            $join .= "LEFT JOIN $customTable p2 ON p1.meta_value = p2.slug";
        }
    
        return $join;
    }
    
    function custom_orderby($orderby_statement){
        global $wpdb;
    
        if(!is_admin){
            $orderby_statement = "p2.price DESC, $wpdb->posts.post_date DESC";
        }
    
        return $orderby_statement;
    }
    

    posts_groupbyも追加しました 新しいクエリで重複した投稿(重複した投稿がたくさんある)が表示されたため、フィルタリングします。

    コードは次のとおりです:

    add_filter('posts_groupby','custom_groupby');
    
    function custom_groupby($groupby){
        global $wpdb;
    
        if(!is_admin){
           $groupby = "$wpdb->posts.ID";
        }
    
        return $groupby;
    }
    

    すべてがプラグインファイルに書き込まれますが、function.phpにも書き込むことができます テーマのファイル。

    if(!is_admin)を含めることを忘れないでください カスタムクエリをのみ表示する場合はステートメント フロントエンドで。




    1. SQL Serverでのパラメータスニッフィング(またはなりすまし)

    2. 現在の日付と時刻に最も近い結果を表示する(MySQLとPHP)

    3. PythonリストからPostgreSQL配列へ

    4. djangoテーブルにAUTOINCREMENT値を設定します