ghoo

مشکل در استفاده از public function و wp_enqueue

18 پست در این موضوع قرار دارد

سلام دوستان

من این کد رو برای یک افزونه نوشتم ولی نمی دونم چرا هیچ کدومشون کار نمیکنن. نه منو نه فراخوانی استایل و اسکریپت و .... خودم مطمئنم این کد یه قسمتاییش اشتباه هست ولی نمی دونم کجا :(

اگه میشه راهنمایی کنید:


public function init(){
add_action('admin_menu', 'test_menu');
add_action( 'admin_enqueue_scripts', 'test_scripts_styles' );
add_action( 'admin_enqueue_scripts', 'test_msg_face' );
add_action('admin_init', 'register_testsettings');
add_action('wp_head', 'sitemsg_add_css');
add_action('admin_head', 'my_admin_head');
add_action( 'init', 'test_translations' );
}

public function test_menu(){
add_menu_page( __("Test 1", 'test'), __("Test 1", 'test'), 1,"test-settings","test_settings_page" ,'dashicons-admin-customizer' );
add_submenu_page("test-settings", __("Test 2", 'test'), __("Test 2", 'test'), 1, "test-settings","test_settings_page");
add_submenu_page('test-settings', __("Test 3", 'test'), __("Test 3", 'test'), 'edit_others_pages', 'test-site-msg', 'sitemsg_settings_page');
}

public function test_scripts_styles($hook){
if ( 'test-settings' != $hook ) {
return;
}

wp_enqueue_scripts( 'admin-test', plugin_dir_url( __FILE__ ) . 'assets/js/admin.js' );
}

public function test_msg_face() {
wp_register_style( 'msg_face_test', plugin_dir_url( __FILE__ ) . 'assets/css/msgs.css' );
wp_enqueue_style( 'msg_face_test' );
}

public function test_translations(){
load_plugin_textdomain('test', false, dirname(plugin_basename(__FILE__)) . '/languages');
}

public function register_testsettings(){
register_setting('site_msg_settings', 'site_msg_settings');
}

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

در ضمن میخوام از wp_enqueue_scripts در دو صفحه خاص از افزونه استفاده کنم نه در همه ی پیشخوان.

اما میخوام از wp_enqueue_style هم در همه ی پیشخوان و هم در سایت استفاده کنم.

ویرایش شده در توسط ghoo
0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

add_action() هارو توی فانکشن

__construct

بذارید

سوال دوم :

کافیه توی فانکشن یه if بذارید و بر اساس نوع صفحه یا اسم صفحه فایل رو فراخوانی کنید !

موفق باشید

ویرایش شده در توسط دانیال
0

به اشتراک گذاری این پست


لینک به پست

add_action() هارو توی فانکشن

__construct

بذارید

یعنی به این صورت؟


public function __construct(){
add_action()
}

0

به اشتراک گذاری این پست


لینک به پست

یعنی به این صورت؟


public function __construct(){
add_action()
}

بله امتحان کنید

0

به اشتراک گذاری این پست


لینک به پست

اینطوری استفاده کردم نشد:


public function __construct(){
add_action('admin_menu', 'test_menu');
add_action( 'admin_enqueue_scripts', 'test_scripts_styles' );
add_action( 'admin_enqueue_scripts', 'test_msg_face' );
add_action('admin_init', 'register_testsettings');
add_action('wp_head', 'sitemsg_add_css');
add_action('admin_head', 'my_admin_head');
add_action( 'init', 'test_translations' );
}

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

اگه براتون مقدوره فایل مربوطه رو ارسال کنید

ویرایش شده در توسط دانیال
0

به اشتراک گذاری این پست


لینک به پست

اگه براتون مقدوره فایل مربوطه رو ارسال کنید


<?php
/*
Plugin Name: MY Plugin
Plugin URI: http://myplugin.ir/myplugin
Description: Plugin Description
Requires at least: 4.1.0
Tested up to: 4.3.1
Author: Me
Author URI: http://myplugin.ir/myplugin
Version: 1.0
Text Domain: test
Domain Path: /languages
*/
if (!defined('ABSPATH'))
{
exit; // Exit if accessed directly
}
final class TESTPLUGIN
{
public function __construct()
{
add_action('admin_menu', 'test_menu');
add_action( 'admin_enqueue_scripts', 'test_scripts_styles' );
add_action( 'admin_enqueue_scripts', 'test_msg_face' );
add_action('admin_init', 'register_testsettings');
add_action('wp_head', 'sitemsg_add_css');
add_action('admin_head', 'my_admin_head');
add_action( 'init', 'test_translations' );
}
public function test_menu()
{
add_menu_page( __("Page 1", 'test'), __("Page 1", 'test'), 1,"test-settings","test_settings_page" ,'dashicons-admin-customizer' );
add_submenu_page("test-settings", __("Page 2", 'test'), __("Page 3", 'test'), 1, "test-settings","test_settings_page");
add_submenu_page('test-settings', __("Page 3", 'test'), __("Page 3", 'test'), 'edit_others_pages', 'test-site-msg', 'sitemsg_settings_page');
}

public function test_scripts_styles($hook)
{
if ( 'test-settings' != $hook ) {
return;
}
wp_enqueue_scripts( 'admin-test', plugin_dir_url( __FILE__ ) . 'assets/js/admin.js' );
}

public function test_msg_face() {
wp_register_style( 'msg_face_test', plugin_dir_url( __FILE__ ) . 'assets/css/msgs.css' );
wp_enqueue_style( 'msg_face_test' );
}


public function test_translations()
{
load_plugin_textdomain('test', false, dirname(plugin_basename(__FILE__)) . '/languages');
}


public function register_testsettings()
{
register_setting('site_msg_settings', 'site_msg_settings');
}
}

0

به اشتراک گذاری این پست


لینک به پست

اصلا چرا توی کلاس این کارو میکنید ؟

خارج از کلاس منو رو اضافه کنید

0

به اشتراک گذاری این پست


لینک به پست

اصلا چرا توی کلاس این کارو میکنید ؟

خارج از کلاس منو رو اضافه کنید

کلاس رو که حذف می کنم این خطا میاد:


Parse error: syntax error, unexpected 'public' (T_PUBLIC) in ..............

0

به اشتراک گذاری این پست


لینک به پست

دلیل این که از کلاس استفاده می کنم:

از یکی از نویسندگان که در Codecanyon افزونه داره پرسیدم گفت باید به این صورت باشه.

0

به اشتراک گذاری این پست


لینک به پست

همچین چیزی


<?php
/*
Plugin Name: MY Plugin
Plugin URI: http://myplugin.ir/myplugin
Description: Plugin Description
Requires at least: 4.1.0
Tested up to: 4.3.1
Author: Me
Author URI: http://myplugin.ir/myplugin
Version: 1.0
Text Domain: test
Domain Path: /languages
*/
if (!defined('ABSPATH'))
{
exit; // Exit if accessed directly
}
add_action('admin_menu', 'e_add_menu');
function e_add_menu(){
add_menu_page("تماس با ایگل دیزاین", "پیام ها", "manage_options", "inbox", "Inbox_messages", 'dashicons-format-status', 4);
add_submenu_page('inbox', 'پیام ها', "پیام ها", 'manage_options', 'inbox', 'Inbox_messages');
add_submenu_page('inbox', 'سفارش ها', "سفارش ها", 'manage_options', 'order', 'Inbox_orders');
}

final class TESTPLUGIN
{
function __construct(){
add_action('admin_menu', 'test_menu');
add_action( 'admin_enqueue_scripts', 'test_scripts_styles' );
add_action( 'admin_enqueue_scripts', 'test_msg_face' );
add_action('admin_init', 'register_testsettings');
add_action('wp_head', 'sitemsg_add_css');
add_action('admin_head', 'my_admin_head');
add_action( 'init', 'test_translations' );

}

function test_menu()
{
add_menu_page( __("Page 1", 'test'), __("Page 1", 'test'), 1,"manage_options","test_settings_page" ,'dashicons-admin-customizer' );
add_submenu_page("test-settings", __("Page 2", 'test'), __("Page 3", 'test'), 1, "manage_options","test_settings_page");
add_submenu_page('test-settings', __("Page 3", 'test'), __("Page 3", 'test'), 'edit_others_pages', 'test-site-msg', 'sitemsg_settings_page');
}
public function test_scripts_styles($hook)
{
if ( 'test-settings' != $hook ) {
return;
}
wp_enqueue_scripts( 'admin-test', plugin_dir_url( __FILE__ ) . 'assets/js/admin.js' );
}

public function test_msg_face() {
wp_register_style( 'msg_face_test', plugin_dir_url( __FILE__ ) . 'assets/css/msgs.css' );
wp_enqueue_style( 'msg_face_test' );
}

public function test_translations()
{
load_plugin_textdomain('test', false, dirname(plugin_basename(__FILE__)) . '/languages');
}

public function register_testsettings()
{
register_setting('site_msg_settings', 'site_msg_settings');
}
}

0

به اشتراک گذاری این پست


لینک به پست

مشکلی با این که خارج از کلاس باشه و به صورت public function نباشه ندارم اما می خوام بدونم چرا با public function کار نمیکنه.

دلیل این که از کلاس استفاده می کنم:

از یکی از نویسندگان که در Codecanyon افزونه داره پرسیدم گفت باید به این صورت باشه.

0

به اشتراک گذاری این پست


لینک به پست

سلام، شما وقتی میخواید یه فانکشن رو در کلاس یا بیرون کلاس، هُک کنید، باید پارامتر تابع رو به صورت آرایه بفرستید. عضو اول آرایه یه instance یا نام کلاسی هست که فانکشن در اون کلاس وجود داره و دوم هم اسم فانکشنه.

مثال:


class A {
public function __construct() {
add_action( 'init', array( $this, 'test' ) );
}

public function test() {
echo 'test';
}
}

مثال 2:


add_action( 'init', array( 'A', 'test' );
class A {
// ...
}

موفق باشید.

2

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

سلام، شما وقتی میخواید یه فانکشن رو در کلاس یا بیرون کلاس، هُک کنید، باید پارامتر تابع رو به صورت آرایه بفرستید. عضو اول آرایه یه instance یا نام کلاسی هست که فانکشن در اون کلاس وجود داره و دوم هم اسم فانکشنه.

مثال:


class A {
public function __construct() {
add_action( 'init', array( $this, 'test' ) );
}

public function test() {
echo 'test';
}
}

مثال 2:


add_action( 'init', array( 'A', 'test' );
class A {
// ...
}

موفق باشید.

خیلی ممنون.

درست شد.

من برای تنظیمات افزونه کدهای html رو به همراه فانکشن مربوط به اون توی یه فایل جدا گذاشتم:


<?php
public function test_settings_page() {
?>
<div class="wrap">
<div class="pptitle"><span class="dashicons dashicons-admin-generic"></span><?php _e('My Plugin', 'test'); ?></div>
<?php
//show saved options message
if($_REQUEST['settings-updated']) : ?>
<br/><br/><div id="message" class="updated below-h2 notice is-dismissible"><p><?php _e('Settings Saved.', 'test'); ?></p><button type="button" class="notice-dismiss"><span class="screen-reader-text"><?php _e('Close', 'test'); ?></span></button></div>
<?php endif; ?>
<form method="post" action="options.php">
<?php settings_fields('plugin_settings'); ?>
<?php $options = get_option('plugin_settings'); ?>
<table class="form-table">
<h3><?php _e('Custom Text', 'test'); ?></h3>
<tr valign="top">
<th scope="row"><?php _e('Custom Text', 'test'); ?></th>
<td><textarea name="plugin_settings[option1]" style="direction:ltr;" cols="60" rows="5" id="plugin_settings[option1]" class="regular-text"><?php esc_attr_e($options['option1']); ?></textarea></td>
</tr>
</table>
<p class="submit">
<input type="submit" class="button-primary" value="<?php _e('Save Changes', 'test'); ?>" />
</p>
</form>
</div>
<?php }

و با دستور include اون فایل رو فراخوانی می کنم.

اگه دستور include رو توی کلاس بزارم این خطا میاد:


Parse error: syntax error, unexpected 'public' (T_PUBLIC) in C:\wamp\www\wp\wp-content\plugins\my-plugin\includes\plugin-settings.php on line 2

اگر هم نزارم باز همین خطا میاد.

فانکشن test_settings_page در add_menu_page استفاده میشه.

ویرایش شده در توسط ghoo
0

به اشتراک گذاری این پست


لینک به پست

در خارج از یک کلاس، کلیدواژه public معنی نداره، برای حل خطا، واژه public رو حذف کنید.

موفق باشید.

1

به اشتراک گذاری این پست


لینک به پست

در خارج از یک کلاس، کلیدواژه public معنی نداره، برای حل خطا، واژه public رو حذف کنید.

موفق باشید.

ممنون مشکل اول یعنی استفاده از public function حل شد. حالا مونده توابع wp_enqueue_style و wp_enqueue_scripts :)

این توابع رو به این صورت استفاده می کنم:


public function myplugin_scripts_styles() {
wp_enqueue_scripts( 'admin-wfc', plugin_dir_url( __FILE__ ) . 'assets/js/admin.js' );
wp_register_style( 'mypluginstyle', plugin_dir_url( __FILE__ ) . 'assets/css/style.css' );
wp_enqueue_style( 'mypluginstyle' );
}

public function __construct() {
add_action( 'wp_enqueue_scripts', array( $this, 'myplugin_scripts_styles'));
}

نه فایل جاوا اسکریپت فراخوانی میشه نه سی اس اس.

0

به اشتراک گذاری این پست


لینک به پست

در ضمن میخوام از wp_enqueue_scripts در دو صفحه خاص از افزونه استفاده کنم نه در همه ی پیشخوان.

اما میخوام از wp_enqueue_style هم در همه ی پیشخوان و هم در سایت استفاده کنم.

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری