Zmiana tabeli pobierania i zapisywania customowych postów

Zmiana tabeli pobierania i zapisywania customowych postów
KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 83
1

Cześć,

Chciałbym wordpresie we własnym typie postów podmienić tabelę pobierania danych z wp_posts na wp_moja_wlasna tabele.
Przejrzałem Internet w zadłuż i szerz, genialne chat boty też nie wiedzą jak zrobić.
odpowiednikiem jest np. tabela wc_orders i zapis zamówień w woocomerca
Próbowałem to robić za pomocą:

Kopiuj
public function __construct() {
    add_filter( 'manage_edit-joboffers_candidates_columns', array( $this, 'modify_job_offer_candidates_columns' );
    add_action( 'manage_joboffers_candidates_posts_custom_column', array( $this, 'display_job_offer_candidates_data', 10, 2 );
}

function modify_job_offer_candidates_columns( $columns ) {
    // Usuwamy domyślne kolumny
    unset( $columns['title'] );
    unset( $columns['date'] );

    // Dodajemy nowe kolumny
    $columns['id'] = __( 'ID', 'job-offers-plugin' );
    $columns['create_data'] = __( 'Data utworzenia', 'job-offers-plugin' );
    $columns['name'] = __( 'Imię', 'job-offers-plugin' );
    $columns['surname'] = __( 'Nazwisko', 'job-offers-plugin' );
    $columns['phone'] = __( 'Telefon', 'job-offers-plugin' );
    $columns['email'] = __( 'Email', 'job-offers-plugin' );
    $columns['status'] = __( 'Status', 'job-offers-plugin' );

    return $columns;
}
function display_job_offer_candidates_data( $column, $post_id ) {
    global $wpdb;

    // Zapytanie SQL do pobrania danych z tabeli wp_st_candidate_applications
    $sql = "SELECT `id`, `create_data`, `name`, `surname`, `phone`, `email`, `status` 
            FROM `wp_mojatabela` 
            WHERE `post_id` = %d"; 

    $results = $wpdb->get_results( $wpdb->prepare( $sql, $post_id ) );

    if ( ! empty( $results ) ) {
        $candidate_data = $results[0]; // Pobieramy pierwszy wynik (zakładamy, że jest tylko jeden kandydat na ofertę)

        switch ( $column ) {
            case 'id':
                echo $candidate_data->id;
                break;
            case 'create_data':
                echo $candidate_data->create_data;
                break;
            case 'name':
                echo $candidate_data->name;
                break;
            case 'surname':
                echo $candidate_data->surname;
                break;
            case 'phone':
                echo $candidate_data->phone;
                break;
            case 'email':
                echo $candidate_data->email;
                break;
            case 'status':
                echo $candidate_data->status;
                break;
        }
    } else {
        echo '-'; // Wyświetlamy "-" jeśli nie ma danych dla danego postu
    }
}
L7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 435
0

@kiui - generalnie obiekt WC_Order() nie jest obiektem typu custom post type. Jeżeli byś chciał mieć coś takiego to musiałbyś to stworzyć trochę inaczej. Czyli:

  • tworzysz w wp-admin własną podstronę (a raczej podstrony) do obsługi swoich elementów
  • tworzysz sobie tabelę jaką chcesz (nazwa dowolna, nie musi być nawet prefix)

Problem jest tylko taki, że korzystając z custom post type masz już od razu zapewnione pewne "podstawowe" funkcjonalności (tworzenie, edytowanie, kategorie, url'e itp). W przypadku robienia swoich rzeczy "od zera" musisz wszystko napisać sobie sam (więcej roboty) ale też i masz od początku większą kontrolę nad tym.

Problem, który tutaj przedstawiasz możesz łatwo rozwiązać na DWA problemy:

  • korzystasz przykładowo z ACF (fajna wtyczka, która pozwoli Tobie dodać nowe pola do swojego custom type, oczywiście możesz te pola dodać nie używając tej wtyczki)
  • dodajesz sobie swoją własną tabelę i "spinasz ją" po postId i tam po prostu przechowujesz dodatkowe dane jakie potrzebujesz (tutaj musisz użyć dodatkowych hook'ów przy zapisie swojego custom posta żeby dodatkowe pola się również zapisywały)
KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 83
0

@leonpro778 - odkryłem jak oni to zrobili a raczej mi się to przyśniło jak się zluzowałem z tematem, oni zapisują lipne dane z typem order jako normalny post po czym rozszerzają zapytanie o joina do "wc_orders". Przez modyfikacje template tabli edit.php oraz strony edycji i innych stron nie wyświetlają danych z postu tylko z tamtej . zapis zapisuje fakowe dane do wp_post. tworząc ten typ danych wywalili ui i inne rzeczy które mogły by co kolwiek wyświetlić użytkownikowi i od cała magia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.