В настоящее время я создаю веб-сайт для некоммерческой организации и использую старую версию темы 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; Если я не ввожу идентификатор, по умолчанию используется самая последняя причина. Однако, если я введу любой идентификатор, даже если это тот же идентификатор, что и у самого последнего сообщения, ничего не появится ...
Есть идеи, что может быть не так с моей логикой?
Спасибо!






Функция render Исправлена!
$fea_cause = $atts['id'];
$donations = new WP_Query( array( 'post_type' => 'donation', 'posts_per_page' => 1, 'post__in' => array($fea_cause )));
Большое спасибо Нилеш Санура за его помощь!