בעיה ביצירת אובייקט WP_Query מתוך מחלקה

פורום התמיכה פתוח למשתמשים מנויים בלבד. יש להתחבר או להרשם כדי להוסיף דיון או תגובה בפורום.

פורום התמיכה הועבר
על מנת שנוכל לתת לכם שירות ותמיכה בצורה אישית יותר, פורום התמיכה הועבר למערכת טיקטים באמצעות האימייל. בימים הקרובים יסגר הפורום לכתיבת הודעות חדשות לחלוטין.

ראשי פורומים תמיכה בעיה ביצירת אובייקט WP_Query מתוך מחלקה

דיון זה מוגדר: סגור

תגיות: 

מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)
  • מאת
    תגובות
  • #47516

    nuriel hatav
    משתתף

    משום מה יש בעיה ביצירת אובייקט WP_Query בתוך מחלקה, הדף נתען ריק כמו בשגיאת סיטקס. מחוץ למחלקה אין בעיה.
    האם יש לכם מושג למה?

    הקוד שלי(מתוך תוסף):

    class Architect
    	{
    		private $content;
    		private $side;
    		
    		function __construct()
    		{
    			$this->setAll();
    			add_shortcode('architects-side', array( $this, 'getSide' ));
    		}
    		
    		public function setAll()
    		{
    			global $wpdb, $post, $wp_query;
    			
    			$args_a = array(
    				  'post_type' => 'post',
    				  'posts_per_page' => -1,
    				  /*'meta_key' => 'mycustomfield',*/
    				  /*'meta_value' => 1,*/
    				  'suppress_filters' => false
    			);
    			$the_query = new WP_Query( $args_a );
    			
    			if ( $the_query->have_posts() )
    			{
    				$architects_ = array();
    				while ( $the_query->have_posts() )
    				{
    					$the_query->the_post();
    					//the_title();
    					//print print_r(get_field('project_architector', get_the_ID()));
    					$architect = get_field('project_architector', get_the_ID());
    					if( $architect["display_name"] )
    					{
    						$counter = array_key_exists($architect["display_name"], $architects_) ? $architects_[$architect["display_name"]]["counter"] + 1 : 1;
    						$architects_[$architect["display_name"]] = array_merge(array("counter" => $counter),$architect);
    					}
    					
    				}
    				
    				
    				
    				$this->side = "<div id=\"architects-accordion\" class=\"panel-group\">";
    				$c = 1;
    				foreach($architects_ as $architect_)
    				{
    					//$this->content_ = "555";
    					$this->side .= "
    					<div class=\"panel panel-warning\">
    						<div class=\"panel-heading\">
    							<div class=\"panel-title\">
    								<a data-toggle=\"tab\" data-parent=\"#architects-accordion\" data-architect-id=\"".$architect_["ID"]."\" href=\"#architect-".$architect_["ID"]."-tab\">
    									<span class=\"badge font-size-inherit\">".$c++."</span> ".$architect_["display_name"]."
    								</a>
    							</div>
    						</div>
    						<div style=\"height: 0px;\" aria-expanded=\"false\" id=\"architect-".$architect_["ID"]."-collapse\" class=\"architect-".$architect_["ID"]." panel-collapse collapse\" data-toggle=\"false\">
    							<div class=\"panel\">
    								<div class=\"panel-body\">
    									<small class=\"text-danger\"><i class=\"fa fa-chevron-left\"></i> סך פרוייקטים: ".$architect_["counter"]."</small>
    								</div>
    							</div>
    						</div>
    					</div>
    					";
    				}
    				$this->side .= "</div>";
    				wp_reset_postdata();
    			}
    		}
    		
    		public function getSide()
    		{
    			return $this->side;
    		}
    	}
    	
    	$architect = new Architect();
    #47517

    nuriel hatav
    משתתף

    בקיצור:

    What prevent WP_Query() to work inside class method?
    
    class MyClass
    {
    	function __construct()
    	{
    		$this->myFunc(); // not work
    	}
    	public function myFunc()
    	{
    		global $post, $wp_query;
    		$args_ = array(
    			  'post_type' => 'post',
    			  'posts_per_page' => -1,
    			  /*'meta_key' => 'mycustomfield',*/
    			  /*'meta_value' => 1,*/
    			  'suppress_filters' => false
    		);
    		$the_query = new WP_Query( $args_ ); // פה התוכנית נכשלת <--------
    		/*...*/
    	}
    }
    #47518

    Yakir Sitbon
    משתתף

    לפני הכל:
    1) תעיף את ה-global למשתנים $post, $wp_query. אין לך שום עניין שמה.
    2) תשתמש בשם אחר מאשר $the_query.

    לבעיה:
    3) מה שגיאת הסינטקס שאתה מקבל?

    #47524

    nuriel hatav
    משתתף

    1) העפתי
    2) החלפתי
    3) Fatal error: Call to undefined function is_user_logged_in() in /home/oricoil/public_html/roofdagan1/wp-includes/query.php on line 3174

    #47525

    Yakir Sitbon
    משתתף

    תנסה לאתחל את הפונקציה setAll() מהשורטקוד עצמו? יש לי תחושה שאתה עושה את זה לפני ה-init.. אז תנסה לבדיקה משמה..

    #47528

    nuriel hatav
    משתתף

    זו השגיאה שמקבים אם אני קורא ל setAll() או ל getSide() מהשורטקוד:

    Strict Standards: call_user_func() expects parameter 1 to be a valid callback, non-static method Architect::getSide() should not be called statically in /home/oricoil/public_html/roofdagan1/wp-includes/shortcodes.php on line 326
    
    Fatal error: Using $this when not in object context in /home/oricoil/public_html/roofdagan1/wp-content/plugins/architects/architects.php on line 85
    
    #47532

    nuriel hatav
    משתתף

    טוב הבעיה נפתרה, מסתבר שבתוך תוסף צריך לעשות איניט לקריאת פונקציה:
    add_action('init', array($this, 'setAll'));
    במקום
    $this->setAll();

    #47539

    Yakir Sitbon
    משתתף

    זה מה שהתכוונתי 🙂

    שמח שהסתדרת..

מוצגות 8 תגובות – 1 עד 8 (מתוך 8 סה״כ)

הפורום 'תמיכה' נסגר לדיונים ולתגובות חדשות.