WordPress: замена квадратных скобок в the_content - PullRequest
1 голос
/ 25 октября 2010

Прежде всего, я признаю, что я WP-нуб, поэтому я даже не уверен, что поступлю правильно. Я пытаюсь создать простой плагин, который заменяет соответствующий текст в the_content. Код работает на моем тестовом сервере PHP, но не работает в WP, заставляя меня поверить, что я что-то упустил. Я надеюсь, что кто-то может указать мне правильное направление.

Я бы хотел, чтобы код выполнял поиск в the_content для строки в формате [custom attr = "x" attr2 = "y"] sometext [/ custom]. Для этого я просто использую preg_match / regex для сопоставления с шаблоном, а затем заменяю его str_replace. Я не уверен, что квадратные скобки вызывают проблему (так как WP, очевидно, использует их для быстрых ссылок). Кто-нибудь может протянуть руку?

Ниже приведен пример кода (упрощенно $txt, но вы все еще можете понять, чего я пытаюсь достичь). Спасибо.


function test_function($content)
{
    global $post;
    $match = preg_match_all('/[custom w="(\d+)" h="(\d+)"\]((?:[a-z][a-z]<em>[0-9]+[a-z0-9]</em>))\[\/custom\]/is', $content, $matches);
    if($match) {
        $width = $matches[1][0];
        $height = $matches[2][0];
        $customtxt = $matches[3][0];</p>

<pre><code>    $rep = '[custom attr="' . $width . '" attr2="' . $height . '"]' . $customtext . '[/custom]';

    $txt = '        
    <div id="' . $customtxt . '_container" class="overlay">
        <img width="'.$width.'" height="'.$height.'" src="'.$customtxt.'_thumb.jpg" />
    </div>      

    ';

    if(strpos($content, $rep)) {            
        $content = str_replace($rep, $txt, $content);           
    }
}
return $content;

}

функция insert_head () { ?> <script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> <script language="javascript" type="text/javascript" src="<?php bloginfo('wpurl') ?>/wp-content/plugins/test_function/js/test_function.pack.js"></script> <? PHP } </p>

add_action ('wp_head', 'insert_head'); if (is_single ()) { add_filter ('the_content', 'test_function'); } еще { add_filter ('the_excerpt', 'test_function'); }

Ответы [ 2 ]

4 голосов
/ 25 октября 2010

почему бы вам просто не использовать API шорткода WordPress?-> http://codex.wordpress.org/Shortcode_API

1 голос
/ 25 октября 2010

Насколько я могу судить, здесь есть много неправильных вещей.Во-первых, я бы использовал preg_replace вместо preg_match.Поэтому я написал бы такую ​​функцию:

function test_function($content)
{
    $txt = '        
    <div id="\3_container" class="overlay">
        <img width="\1" height="\2" src="\3_thumb.jpg" />
    </div>';

    return preg_replace('%\[custom w="(\d+)" h="(\d+)"\]((?:[a-z][a-z][0-9]+[a-z0-9]))\[\/custom\]%', $txt, $content);
}

, которая в основном состоит из 2 строк кода.Некоторые другие проблемы, с которыми вы сталкиваетесь:

1) Не удается выполнить ваше регулярное выражение.Первый [не экранирован, и, как вы знаете, это специальный символ в регулярных выражениях.Я подозреваю, что есть и другие проблемы с вашим регулярным выражением.

2) Из руководства по PHP для strpos:

Эта функция может возвращать логическое значение FALSE, но также может возвращать не-логическое значение, которое оцениваетЛОЖЬ, например 0 или "".Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации.Используйте оператор === для проверки возвращаемого значения этой функции.

...