Изменить содержание страницы WordPress еженедельно

У меня есть страница WordPress с Еженедельным меню для ресторана, созданная с использованием Быстрое меню ресторана плагин.

Меню меняется каждую неделю до 6 недель, затем возвращается к первой и запускается снова.

Используемый шорткод: [erm_menu_fullweek id=11910]

Теперь необходимо изменить только идентификатор внутри шорткода для отображения меню следующих недель.

Есть ли подход php для изменения содержимого страницы в SQL с помощью cron или плагина WordPress, чтобы запланировать его запуск самостоятельно?

0

Решение

Хотя использование WordPress cron для изменения содержимого публикации является возможным, создание собственного шорткода для генерации периодически изменяемого конечного шорткода является более мощным.

Это дает вам возможность изменять тег шорткода, аргументы (идентификаторы), дату начала, длительность интервала непосредственно со страницы редактирования / пост-редактирования WordPress, не касаясь какого-либо кода.

Использовать собственный шорткод [mm1707_shortcode_rotator] чтобы создать ваш окончательный шорткод. Это может быть полезно, если конечный шорткод будет изменен в будущем или будут изменены идентификаторы, которые вы хотите повернуть. Вы также можете заключить содержимое между этим шорткодом, если этого требует ваш конечный шорткод.

Пример 1: [mm1707_shortcode_rotator shortcode="erm_menu_fullweek" args="1,2,3,4,5,6,7" start_date="2018-01-08" interval="1 week"]

Пример 2: [mm1707_shortcode_rotator shortcode="erm_menu_fullweek" args="1,2,3,4,5,6,7" start_date="2018-01-08" interval="1 week"] some content here [/mm1707_shortcode_rotator] в случае, если ваш конечный шорткод также требует некоторого контента.

<?php
/**
* Custom shortcode which generates another supplied shortcode with ID argument swapped per
* specified time interval.
*
* @param  array  $atts {
*     Array of attributes specifiying shortcode, arguments to rotate and time interval.
*
*     @type string $shortcode  Shortcode to execute.
*     @type string $args       Comma seperated arguments to rotate per interval period.
*     @type string $start_date Date from which rotation should be counted.
*     @type string $intereval  Interval for rotation. Expects relative dates.
*                              See http://php.net/manual/de/datetime.formats.relative.php.
* }
* @param  string $content Optional. Content passed to shortcode.
* @return string|bool          Returns output of supplied shortcode with ID argument
* as per calculated period or false when $shortcode and $args are not supplied
*/
function mm1707_shortcode_rotator( $atts = [], $content = null ) {
if ( empty( $atts['shortcode'] ) || empty( $atts['args'] ) ) {
return false;
}

// Normalize attribute keys, lowercase.
$atts = array_change_key_case( (array) $atts, CASE_LOWER );

// Convert IDs from string to array.
$args = explode( ',', $atts['args'] );
$args = array_map( 'trim', array_filter( $args ) );

// Override default attributes with user attributes.
$attributes = shortcode_atts(
[
'shortcode'  => '',
'args'       => array(),
'start_date' => '',
'interval'   => '1week', // Expects relative dates. See http://php.net/manual/de/datetime.formats.relative.php.
], $atts
);

// Get the start date, if empty then first date of current year would be used.
$start_date = empty( $attributes['start_date'] ) ? new DateTime( '1 Jan' ) : new DateTime( $attributes['start_date'] );

// Get the rotation interval.
$rotation_interval = $attributes['interval'];
$rotation_interval = DateInterval::createFromDateString( $rotation_interval );

// Create DatePeriod and iterate over it to count ocurrences.
$rotation_period = new DatePeriod( $start_date, $rotation_interval, new DateTime() );
$args_count      = count( $args );
$rotation        = 0;

foreach ( $rotation_period as $date ) {
$rotation++;
if ( $rotation > $args_count - 1 ) {
$rotation = 0;
}
}

// Build shortcode.
$shortcode = sprintf( '[%1$s id="%2$s"]', $attributes['shortcode'], $args[ $rotation ] );
if ( ! empty( $content ) ) {
$content    = apply_filters( 'the_content', $content );
$shortcode .= $content . '[/' . $attributes['shortcode'] . ']';
}

// Start output & return it.
return do_shortcode( $shortcode );
}
add_shortcode( 'mm1707_shortcode_rotator', 'mm1707_shortcode_rotator' );

Этот код будет идти внутри вашей темы functions.php файл

Примечание: этот код был протестирован и работает отлично.


Чтобы продолжить

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

Например, вы можете импровизировать логику, чтобы принять многомерный массив как args="foo:'bar',id:'2039',color:'#CC000000'|foo:'bar2',id:'1890',color:'#FFF'",

  • Разобрать сначала | чтобы получить вращающиеся аргументы, используя explode('|', $args);,
  • Тогда просто делай str_replace( array(':',','), array('=', ' '), $args[$rotation] );
  • + Изменить id="%2$s" в %2$s в $shortcode = "'" . sprintf( '[%1$sid="%2$s"]', $attributes['shortcode'], $args[ $rotation ] );,

Это даст вам строку аргументов для конечного шорткода как [shortcode foo='bar' id='2039' color='#cc000000'] когда $rotation = 0;

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]