Я пытаюсь сделать так, чтобы мои сообщения вставляли цитату после 2 (или любого другого количества) абзацев. В случае с веб-сайтом, с которым я работаю, кавычки являются отдельным полем, поэтому я не могу просто назначить это тегу blockquote. Таким образом, я собрал это решение:
function insert_pullquote( $text ) {
if ( is_singular('review') ) :
$quote_text = get_template_part( 'pullquote' );
$split_by = "\n\n";
$insert_after = 2; //number of paragraphs
// make array of paragraphs
$paragraphs = explode( $split_by, $text);
// if array elements are less than $insert_after set the insert point at the end
$len = count( $paragraphs );
if ( $len < $insert_after ) $insert_after = $len;
// insert $ads_text into the array at the specified point
array_splice( $paragraphs, $insert_after, 0, $quote_text );
// loop through array and build string for output
foreach( $paragraphs as $paragraph ) {
$new_text .= $paragraph;
}
return $new_text;
endif;
return $text;
}
add_filter('the_content', 'insert_pullquote');
Итак, хорошая новость заключается в том, что цитата отображается так, как я хочу (глянь сюда), но не после двух абзацев. Я использую встроенную функцию Wordpress get_template_part ('pullquote');, которая сама извлекает из поля с помощью echo (types_render_field ('pullquote')); Если я просто ввожу простой текст, все работает нормально. Что я делаю не так? Я немного помешан на PHP, поэтому, пожалуйста, терпите меня в случае очевидных ошибок. Спасибо!






Объем $new_text находится внутри цикла.
Тебе нужно
$new_text = ""; // declare out side loop
foreach( $paragraphs as $paragraph ) {
$new_text .= $paragraph;
}
return $new_text; // now is available here.
Вы также можете использовать
$new_text =implode($paragraphs); // to match your explode :-)
Привет, я знаю, что это запоздалый ответ, но я только вернулся к работе над этим. Ваше исправление отлично работает, но теперь цитата печатается дважды, один раз в нужном мне месте, а затем после текста обзора. Есть ли способ заставить его печатать только один раз?
Сложно сказать. Вы просто вставляете строку в массив строк. Я предлагаю сделать count( $paragraphs ); после вставки и убедиться, что его значение увеличилось только на 1 после сварки. Также на случай, если я не понял, не используйте $new_text =implode($paragraphs);, если вы уже использовали цикл foreach.
не уверен, что это решит общую проблему, но указанное мной исправление все равно необходимо.