Как заменить пользовательский контент базы данных с помощью PHP? - PullRequest
1 голос
/ 03 мая 2019

Я использую «Компании плагинов WP-Job Manager», чтобы показать список компаний с зарегистрированными компаниями в их конфигурации базы данных по умолчанию, которая по умолчанию ведет к базе данных плагинов. Это подключаемый скрипт, который генерирует такой список.

 /**
 * Build the shortcode.
 *
 * Not very flexible at the moment. Only can deal with english letters.
 *
 * @since WP Job Manager - Company Profiles 1.0
 *
 * @param array $atts
 * @return string The shortcode HTML output
 */
public function build_company_archive( $atts ) {
    global $wpdb;

    $output      = '';
    $companies   = $wpdb->get_col(
        "SELECT pm.meta_value FROM {$wpdb->postmeta} pm
         LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
         WHERE pm.meta_key = '_company_name'
         AND p.post_status = 'publish'
         AND p.post_type = 'wp_users'
         GROUP BY pm.meta_value
         ORDER BY pm.meta_value"
    );
    $_companies = array();

    foreach ( $companies as $company ) {
        $_companies[ strtoupper( $company[0] ) ][] = $company;
    }

    if ( $atts[ 'show_letters' ] ) {
        $output .= '<div class="company-letters">';

        foreach ( range( 'A', 'Z' ) as $letter ) {
            $output .= '<a href="#' . $letter . '">' . $letter . '</a>';
        }

        $output .= '</div>';
    }

    $output .= '<ul class="companies-overview">';

    foreach ( range( 'A', 'Z' ) as $letter ) {
        if ( ! isset( $_companies[ $letter ] ) )
            continue;

        $output .= '<li class="company-group"><div id="' . $letter . '" class="company-letter">' . $letter . '</div>';
        $output .= '<ul>';

        foreach ( $_companies[ $letter ] as $company_name ) {
            $count = count( get_posts( array( 'post_type' => 'job_listing', 'meta_key' => '_company_name', 'meta_value' => $company_name, 'nopaging' => true ) ) );

            $output .= '<li class="company-name"><a href="' . $this->company_url( $company_name ) . '">' . esc_attr( $company_name ) . ' (' . $count . ')</a></li>';
        }

        $output .= '</ul>';
        $output .= '</li>';
    }

    $output .= '</ul>';

    return $output;
}

Дело в том, что я создал всех своих пользователей в своей базе данных: eldiades_wp-db »Таблица: wp_users (главная панель пользователя wordpress), и я хочу показать метаключ« display_name »в этом списке, чтобы все мои пользователи создавались в этом стол покажет. Я считаю, что это ошибка синтаксиса, которую я пропускаю или не уделяю достаточно внимания, и это приводит к тому, что мои созданные пользователи не отображаются в этом списке.

Пытался переопределить таблицы и имя базы данных, это то, что я пытался.

  /**
 * Build the shortcode.
 *
 * Not very flexible at the moment. Only can deal with english letters.
 *
 * @since WP Job Manager - Company Profiles 1.0
 *
 * @param array $atts
 * @return string The shortcode HTML output
 */
public function build_company_archive( $atts ) {
    global $wpdb;

    $output      = '';
    $companies   = $wpdb->get_col(
        "SELECT pm.meta_value FROM {$wpdb->postmeta} pm
         LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
         WHERE pm.meta_key = 'display_name'
         AND p.post_status = 'publish'
         AND p.post_type = 'wp_users'
         GROUP BY pm.meta_value
         ORDER BY pm.meta_value"
    );
    $_companies = array();

    foreach ( $companies as $company ) {
        $_companies[ strtoupper( $company[0] ) ][] = $company;
    }

    if ( $atts[ 'show_letters' ] ) {
        $output .= '<div class="company-letters">';

        foreach ( range( 'A', 'Z' ) as $letter ) {
            $output .= '<a href="#' . $letter . '">' . $letter . '</a>';
        }

        $output .= '</div>';
    }

    $output .= '<ul class="companies-overview">';

    foreach ( range( 'A', 'Z' ) as $letter ) {
        if ( ! isset( $_companies[ $letter ] ) )
            continue;

        $output .= '<li class="company-group"><div id="' . $letter . '" class="company-letter">' . $letter . '</div>';
        $output .= '<ul>';

        foreach ( $_companies[ $letter ] as $company_name ) {
            $count = count( get_posts( array( 'post_type' => 'job_listing', 'meta_key' => 'display_name', 'meta_value' => $company_name, 'nopaging' => true ) ) );

            $output .= '<li class="company-name"><a href="' . $this->company_url( $company_name ) . '">' . esc_attr( $company_name ) . ' (' . $count . ')</a></li>';
        }

        $output .= '</ul>';
        $output .= '</li>';
    }

    $output .= '</ul>';

    return $output;
}

но я считаю, что это ошибка синтаксиса, которую я пропускаю или не уделяю достаточно внимания, и это приводит к тому, что мои созданные пользователи не отображаются в этом списке.

Ожидаемые результаты - Показать всех моих пользователей, созданных в моей базе данных: eldiades_wp-db »Таблица: wp_users

Фактические результаты - 'display_name' или 'username' не показывает мой список пользователей.

Может быть, мой синтаксис неправильный, и мне нужна консультация для этого.

Вот мой раздел, если вам нужна дополнительная помощь

https://eldiadespues.mx/directorio-de-asociaciones/

...