неожиданная ошибка T_STRING в Collabpress

Я пытаюсь отладить плагин Collabpress для WordPress. Мои знания PHP очень просты.

Ошибка находится в одном php-файле с именем cp-loader.php. Ошибка неожиданная T_STRING в строке 88, которая выделена ниже. Код следующий:

<?php
/*
Plugin Name: CollabPress
Plugin URI: http://collabpress.org/
Description: A Project Management Plugin for WordPress
Version: 1.3.1.2
Author: WebDevStudios.com
Author URI: http://webdevstudios.com/
License: GPLv2
*/

/*  Copyright 2011  WebDevStudios  (email : [email protected])

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

// CollabPress Define(s)
define( 'CP_VERSION', '1.3.1.2' );

if ( ! defined( 'CP_BASENAME' ) ) {
define( 'CP_BASENAME', plugin_basename(__FILE__) );
}

if ( ! defined( 'CP_PLUGIN_DIR' ) ) {
define( 'CP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
}

if ( ! defined( 'CP_PLUGIN_URL' ) ) {
define( 'CP_PLUGIN_URL', plugins_url( substr( CP_BASENAME, 0, strpos( CP_BASENAME, '/' ) ) ) .           '/' );
}

define( 'CP_RSS_URL', 'http://collabpress.org/feed' );

// Before CollabPress
do_action( 'cp_before_collabpress' );

//front-end querystring support
$cp_qs_add = cp_frontend_querystrings();

// Define the dashboard link
$cp_dashboard = ( is_admin() ) ? 'admin.php?page=collabpress-dashboard' : '?' .$cp_qs_add.         'cp=front';

// If we're processing an AJAX request,
// set the dashboard link according to the origin of the request
if ( ! empty( $_REQUEST['data']['collabpress_ajax_request_origin'] ) ) {
$cp_dashboard = ( $_REQUEST['data']['collabpress_ajax_request_origin'] == 'admin' ) ? 'admin.php?        page=collabpress-dashboard' : '?' .$cp_qs_add. 'cp=front';
}

define( 'CP_DASHBOARD', $cp_dashboard );

// CollabPress Core
require_once( 'includes/cp-core.php' );

// activation hook
register_activation_hook( __FILE__, 'cp_activation' );/**
* Returns the query string of CollabPress values
* e.g. task=3&task-list=4
*/
function cp_frontend_querystrings() {

// grab any query strings that exist
if (isset($_SERVER['QUERY_STRING'])) {
$cp_all_querystrings = ( $_SERVER["QUERY_STRING"] ) ? $_SERVER["QUERY_STRING"] : '';
$cp_querystrings = explode( '&', $cp_all_querystrings );
} else {
$vars = $_GET;
}

//set pattern to strip out
$pattern = "/^cp|project|task-list|task|view|activity_page/";
$cp_qs_add = '';

foreach ((array) ( '$cp_querystrings as $cp_querystring')
-->    preg_match ( '$pattern, $cp_querystring ' ) {  <-- line 88: unexpected T_STRING error
$cp_qs_add .= $cp_querystring .'&';
}
}

if ( $cp_qs_add != '&' ) :
return $cp_qs_add;
endif;

}

Я выделил ошибку стрелками выше. В строке 88 «неожиданной ошибки T_STRING» произошла непредвиденная ошибка.

Любая помощь, которую я могу получить, была бы великолепна. Поскольку это проект с открытым исходным кодом на Github, я также опубликую кое-что на Github, если он будет работать.

-2

Решение

Типичный цикл foreach выглядит следующим образом:
foreach($some_array as $item) где $ some_array — массив.
Foreach перебирает все элементы, содержащиеся в массиве.

Но в вашем коде вы используете строку. Видно по кавычкам, которые окружают текст '$cp_querystrings as $cp_querystring', Это главная ошибка в вашем коде.
Чтобы решить эту ошибку, вы пытаетесь преобразовать строку в массив. Это отвечает потребностям цикла Foreach. Но, к сожалению, PHP очень щедр в преобразовании типов, поэтому реальная причина не указана в вашем сообщении об ошибке.

Почти такая же проблема с preg_match ( '$pattern, $cp_querystring ' ),

Вы '$pattern, $cp_querystring ' является единственной строкой и, следовательно, только один параметр для preg_match.

Следующая проблема — отсутствующее условие if для preg_match.

Я положил решение в это исправление:

foreach ($cp_querystrings as $cp_querystring) {
if( preg_match ($pattern, $cp_querystring) > 0 ) {
$cp_qs_add .= $cp_querystring .'&';
}
}

Код, который у вас есть, в целом сломан и не будет работать ни при какой установке PHP. Может быть, вы получили версию, где идет активная разработка?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]