从WordPress小部件获取数据以修改帖子内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从WordPress小部件获取数据以修改帖子内容相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个接受段落编号的小部件,并在帖子中那些指定的段落之后插入一些html(用于广告)。例如,如果用户在第一个字段中输入1,在第二个字段中输入3,我希望我定义的某些标记出现在这些段落之后。
我创建了小部件,并设法在$paragraph_targets = array('1', '3');
方法内通过insert_post_ads
手动创建数组时使其工作。
我所坚持的是如何将小部件中的段落编号添加到insert_post_ads
方法中。
完整代码在下面。
class Ad_Inserter extends WP_Widget
public function __construct()
parent::__construct(
'ad_inserter',
'Ad Inserter',
array(
'description' => 'Inserts ads in post content',
)
);
add_filter( 'the_content', array( $this, 'insert_post_ads' ));
public function form($instance)
$instance = array_merge( [
'ad_1' => '',
'ad_2' => '',
], $instance );
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'ad_1' ) ); ?>">Ad 1 Position</label>
<input type="text" name="<?php echo esc_attr( $this->get_field_name( 'ad_1' ) ); ?>" id="<?php echo esc_attr( $this->get_field_name( 'ad_1' ) ); ?>" value="<?php echo esc_attr( $instance['ad_1'] ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'ad_2' ) ); ?>">Ad 2 Position</label>
<input type="text" name="<?php echo esc_attr( $this->get_field_name( 'ad_2' ) ); ?>" id="<?php echo esc_attr( $this->get_field_name( 'ad_2' ) ); ?>" value="<?php echo esc_attr( $instance['ad_2'] ); ?>">
</p>
<?php
public function widget($args, $instance)
public function insert_post_ads($content)
if ( is_single() && ! is_admin() )
$paragraph_targets = array('1', '3');
sort($paragraph_targets);
return $this->insert_after_paragraph( $paragraph_targets, $content );
return $content;
// Go through paragraphs and insert ads
public function insert_after_paragraph( $paragraph_targets, $content )
$ad_ids = array('advert-1', 'advert-2');
$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );
foreach ($paragraphs as $index => $paragraph)
if ( trim( $paragraph ) )
$paragraphs[$index] .= $closing_p;
if ( $paragraph_targets[0] == $index + 1 )
$ad_code = '<div id="' . $ad_ids[0] . '" class="advert">**** AD ****</div>';
$paragraphs[$index] .= $ad_code;
array_shift($paragraph_targets);
array_shift($ad_ids);
return implode( '', $paragraphs );
add_action('widgets_init','registerWidget');
function registerWidget()
register_widget('Ad_Inserter');
答案
https://www.geeksforgeeks.org/how-to-declare-a-global-variable-in-php/以上是关于从WordPress小部件获取数据以修改帖子内容的主要内容,如果未能解决你的问题,请参考以下文章