我看到了一些问题:
ajax操作只能由登录用户使用。如果这是正确的,我建议您添加一个返回错误消息的nopriv操作
// Inside Constructor
add_action( \'wp_ajax_nopriv_pp_html_process\', array( $this, \'pp_html_process_not_logged\' ) );
并创建此函数:
public function pp_html_process_not_logged () {
// Status can be used to identify via JS if the operation is OK or KO and print an error with jQuery or a modal window, whatever you prefer.
wp_send_json([
\'status\' => false,
\'error\' => __(\'Error. This service is only for logged users.\', \'your_plugin_lang_slug\')
]);
}
创建一个不会使用的wp\\u nonce字段(稍后在JS中创建其他同名/操作的字段)。在您的“中删除此行”;pp\\U html\\U模板;功能:
<?php wp_nonce_field( \'pp_publisher_save\', \'pp_publisher_name\' ); ?>
wp\\u head在head标记内打印HTML,而这不是;“允许”;。此表单需要位于正文标记内。也许您可以将其添加到页脚中,或者更好的解决方案是使用add\\u shortcode函数创建一个短代码,并将该短代码放在您想要显示此表单的页面或帖子中。
删除构造函数中的这一行,因为在3中解释了原因,并且您正在创建一个AJAX操作,AJAX操作由wp\\u AJAX\\uu{$action}hook处理。
if ( ! is_admin() ) {
add_action( \'wp_head\', array( $this, \'pp_html_template\' ) );
add_action( \'init\', array( $this, \'pp_html_process\' ) );
}
确保;pp\\u enqueue\\u public\\u样式“;在“中调用”;wp\\U enqueue\\U脚本“;或“或”;admin\\u enqueue\\u脚本“;如果它只出现在仪表板上。如果您决定创建一个短代码,可以在窗体之前调用此函数。
在JS文件中更改以下行:
ppFormData.append(\'pp_submit\', 1);
ppFormData.append(\'security\', window.pp_public_ajax.pp_publisher_name)
ppFormData.append(\'action\', \'pp_html_process\');
并删除AJAX函数中的这一行:
action: \'pp_featured_image\',
您的;pp\\u enqueue\\u public\\u样式“;功能:
public function pp_enqueue_public_styles() {
// Register the script first!!
wp_register_script( \'pp_public_ajax\', plugins_url( \'/assets/js/pp-public-ajax.js\', __FILE__ ), array( \'jquery\' ), null, true );
wp_localize_script( \'pp_public_ajax\', \'pp_public_ajax\',
array(
\'pp_ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'pp_publisher_name\' => wp_create_nonce( \'pp_publisher_save\' )
)
);
wp_enqueue_script(\'pp_public_ajax\');
}