Wordpress - Как указать идентификатор в пользовательском элементе Visual Composer

В настоящее время я создаю веб-сайт для некоммерческой организации и использую старую версию темы Wordpress, Спаситель.

Существует настраиваемый тип сообщения Пожертвования, который позволяет администратору устанавливать различные «Причины», каждая из которых представляет собой сообщение с определенным идентификатором.

По умолчанию в теме есть настраиваемый элемент Visual Composer (снимок экрана 1 - https://i.stack.imgur.com/cmhTu.png), который позволяет указать самую последнюю «Причину»; единственный вариант настройки, который у вас есть, - это заголовок элемента VC.

Я пытаюсь обновить этот настраиваемый элемент VC, чтобы администратор мог указать точный идентификатор «Причины», который они хотели бы разместить на странице / публикации, а не отображать только последнюю «Причину».

Я скорректировал сопоставление VC для шаблона причина.php, где прокомментировал ниже:

<?php

class STM_VC_Causes {

    function __construct() {
        add_action( 'init', array( $this, 'integrateWithVC' ) );
        add_shortcode( 'stm_causes', array( $this, 'render' ) );
    }

    public function integrateWithVC() {
        if ( function_exists( 'vc_map' ) ) {
            vc_map( array(
                'name'        => __( 'Causes', STM_DOMAIN ),
                'base'        => 'stm_causes',
                'category'    => __( 'STM', STM_DOMAIN ),
                'params'      => array(
                    array(
                        'type' => 'textfield',
                        'class' => '',
                        'heading' => __( 'Title', STM_DOMAIN ),
                        'param_name' => 'title',
                        'value' => __( 'Our Causes', STM_DOMAIN )
                    ),

                    /** ========================================
                     * Qing Custom 8-6-2018
                     * Allow admin to select Cause to feature
                    ======================================== **/

                    array(
                        'type' => 'textfield',
                        'class' => '',
                        'heading' => __( 'Cause ID', STM_DOMAIN ),
                        'param_name' => 'id',
                        'value' => __( '', STM_DOMAIN )
                    )
                )
            ) );
        }
    }


    public function render( $atts, $content = null ) {

        /** ========================================
         * Qing Custom 8-6-2018
         * Display selected Cause ID
        ======================================== **/

        $title = '';
        $id = '';

        extract( shortcode_atts( array(
            'title'       => '',
            'id'       => ''
        ), $atts ) );

        $fea_cause = $atts['id'];
        $donations = new WP_Query( array( 'post_type' => 'donation', 'posts_per_page' => 1, 'post__in' => $fea_cause ) );

        $output = '';
        $output .= '<ul class = "donation-grid first clearfix">';
        while ( $donations->have_posts() ) {

            $donations->the_post();
            $target_amount         = ( get_post_meta( get_the_ID(), 'donation_target', true ) == '' ) ? 0 : get_post_meta( get_the_ID(), 'donation_target', true );
            $raised_amount         = ( get_post_meta( get_the_ID(), 'donation_raised', true ) == '' ) ? 0 : get_post_meta( get_the_ID(), 'donation_raised', true );
            $currency              = ( get_post_meta( get_the_ID(), 'donation_currency', true ) == '' ) ? '$' : get_post_meta( get_the_ID(), 'donation_currency', true );
            $donors                = ( get_post_meta( get_the_ID(), 'donation_donors', true ) == '' ) ? 0 : get_post_meta( get_the_ID(), 'donation_donors', true );
            $target_amount_percent = ( $raised_amount / $target_amount ) * 100;

            $output .= '<li id = "post-' . get_the_ID() . '" class = "' . implode( ' ', get_post_class() ) . '">';
            $output .= '<div class = "donation-thumbnail">';
            $output .= '<a href = "' . get_the_permalink() . '">';
            if ( has_post_thumbnail() ) {
                $output .= get_the_post_thumbnail( get_the_ID(), 'thumb-150x150' );
            }
            $output .= '</a>';
            $output .= '</div>';
            $output .= '<div class = "donation-content">';
            $output .= '<h4><a href = "' . get_the_permalink() . '">' . get_the_title() . '</a></h4>';
            $output .= '<div class = "progress_bar"><span style = "width: ' . $target_amount_percent . '%;"></span></div>';
            $output .= '<div class = "donation-stat">';
            $output .= '<span><i class = "fa fa-child"></i> ' . __( 'Raised', STM_DOMAIN ) . '<br/>' . $currency . $raised_amount . '</span>';
            $output .= '<span><i class = "fa fa-users"></i> ' . __( 'Donors', STM_DOMAIN ) . '<br/>' . $donors . '</span>';
            $output .= '<span><i class = "fa fa-thumbs-up"></i> ' . __( 'Goal', STM_DOMAIN ) . '<br/>' . $currency . $target_amount . '</span>';
            $output .= '</div>';
            $output .= '<div class = "donate_now">';
            $output .= '<a href = "' . get_the_permalink() . '" class = "button cause_donate_btn">' . __( 'DONATE NOW', STM_DOMAIN ) . '</a>';
            $output .= '</div>';
            $output .= '</div>';
            $output .= '</li>';
        }
        $output .= '</ul>';
        wp_reset_query();

        return $output;
    }

}

if ( defined( 'WPB_VC_VERSION' ) ){
    new STM_VC_Causes();
}

?>

Пользовательский элемент VC отображается для меня правильно на стороне админки сайта (снимок экрана 2 - https://i.stack.imgur.com/zKCgs.png), но я не могу понять, как получить введенный администратором идентификатор, чтобы он отображался во внешнем интерфейсе - несмотря ни на что, это по-прежнему показывает самую последнюю «Причину». Снимок экрана 3 (https://i.stack.imgur.com/13Qw4.png) - это просто пример снимка экрана того, как выглядит отдельная «Причина», когда страница с настраиваемым элементом VC размещается в реальном времени.

Я связался со службой поддержки темы, но они предложили только этот Плагин "Порядок типов сообщений" для WP, который позволяет вам изменять отображаемую «Причину» только на всем сайте, вместо того, чтобы указывать ее постранично / постранично. по почте. Я также просмотрел Google / StackOverflow и пробовал различные запросы в WP Codex, создавая собственный шорткод (сам пользовательский элемент VC является пользовательским шорткодом: [stm_causes]), но он просто отображает самую последнюю «Причину».

Изменить 7/7/18:

Я сделал несколько изменений в шаблоне cause.php в теме Savior, но по какой-то причине обновленный цикл WP_Query не получил никаких данных (снимок экрана 3: https://i.stack.imgur.com/JLibO.png).

Единственное исключение - если я опущу какой-либо идентификатор в бэкэнде редактора VC; Если я не ввожу идентификатор, по умолчанию используется самая последняя причина. Однако, если я введу любой идентификатор, даже если это тот же идентификатор, что и у самого последнего сообщения, ничего не появится ...

Есть идеи, что может быть не так с моей логикой?

Спасибо!

wordpress.stackexchange.com
scopchanov 07.08.2018 03:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
445
1

Ответы 1

Функция render Исправлена!

$fea_cause = $atts['id'];    
$donations = new WP_Query( array( 'post_type' => 'donation', 'posts_per_page' => 1, 'post__in' => array($fea_cause )));

Большое спасибо Нилеш Санура за его помощь!

Другие вопросы по теме