web-dev-qa-db-ja.com

ショートコード問題のデバッグ

私は自分のウェブサイト上で Miscellaneous shortcodes を正しく動かそうとしています。特に、私は[list-pages]、[child-pages]、[sibling-pages]というページのショートコードを使用したいと思います。私は、テンプレートへの最小限の変更(背景とフォントの変更)で15歳の子供を使っています。

これが現在の動作です。私のすべてのプラグインでjetpackとakismetが無効になっているので、[youtube]や[archives]などのショートコードは正しく表示されます。 functions.phpファイルにショートコードを作成することもできます。

function test_shortcode() {return 'Working';}
add_shortcode('test_shortcode', 'test_shortcode');

それは同様にうまくいきます。ただし、いずれかのページのショートコードを使用すると、括弧で囲まれたショートコードだけが返されます。私のウェブサイトは現在いくつかのテストページ(2人の親、1人の子供)を含んでいます。

私は自分のプラグイン(Akismet用に保存)がこのショートコードの振る舞いを変えないことを(無効にすることによって)確認しました。また、動作が場所(ページ/投稿/サイドバー)、投稿形式(標準/横)、テンプレート(15/14/14)の影響を受けないことも確認しました。この時点ではデバッグのアイデアが足りなくなりました。

証明に追加されたメモ:上記でリンクしたサポートページでは他のプラグについては特に触れていないので、これらのショートコードは現在のWordpressプラットフォームに統合されていると思いますそして このプラグイン はもう必要ありません。私はこの仮定に誤りがありますか?

1
bobthechemist

@Miloが言ったように、wordpress.comはそれ自体がプラットフォームであり、wordpress.comで利用可能なものはすべてwordpress.comでホストされているサイトでのみ利用可能です。 jetpackプラグインは、しかしながら、いくつかの機能を自己ホスト型のサイトで利用可能にしますが、私は特にどれが確実であるかわかりません。

あなたが話しているショートコードはwordpress.comでホストされているサイトでのみ利用可能で、セルフホストサイトでは利用できません。

私はすぐにWordPressで 私が最近フィルタやアクションを探すために行ったスクリプト を書き直して、すべてのショートコードをセルフホストサイトで利用できるようにしました。これが関数です

function get_all_filters_and_actions2( $path = '' )
{
    //Check if we have a path, if not, return false
    if ( !$path ) 
        return false;

    // Validate and sanitize path
    $path = filter_var( $path, FILTER_SANITIZE_URL );
    /**
     * If valiadtion fails, return false
     *
     * You can add an error message of something here to tell
     * the user that the URL validation failed
     */
    if ( !$path ) 
        return false;

    // Get each php file from the directory or URL  
    $dir   = new RecursiveDirectoryIterator( $path );
    $flat  = new RecursiveIteratorIterator( $dir );
    $files = new RegexIterator( $flat, '/\.php$/i' );

    if ( $files ) {

        $output = '';
        $array  = [];
        foreach($files as $name=>$file) {
            /**
             * Match and return all instances of apply_filters(**) or do_action(**)
             * The regex will match the following
             * - Any depth of nesting of parentheses, so apply_filters( 'filter_name', parameter( 1,2 ) ) will be matched
             * - Whitespaces that might exist between apply_filters or do_action and the first parentheses
             */
            // Use file_get_contents to get contents of the php file
            $get_file_contents =  file( $file );
            foreach ( $get_file_contents as  $key=>$get_file_content ) {
                preg_match_all( '/add_shortcode\s*(\([^()]*(?:(?-1)[^()]*)*+\))/', $get_file_content, $matches );

                if ( $matches[0] )
                    $array[$name][$key+1] = $matches[0];
            }
        }

        if ( $array ) {
            foreach ( $array as $file_name=>$values ) {
                $output .= '<ul>';
                    $output .= '<strong>File Path: ' . $file_name .'</strong></br>';
                    $output .= 'The following shortcodes are available';

                    foreach ( $values as $line_number=>$string ) {
                        $whitespaces = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
                        $output .= '<li>Line reference ' . $line_number . $whitespaces . $string[0] . '</li>';
                    }
                $output .= '</ul>';
            }
        }
        return $output;

    }

    return false;
}

フロントエンドで利用可能なすべてのショートコードはwp-includesファイルに入っているはずなので、次のように関数を実行することができます。(NOTE私はこれをlocalhostでテストしました。

echo get_all_filters_and_actions2( 'E:\xampp\htdocs\wordpress/wp-includes/' );

どの出力

File Path: E:\xampp\htdocs\wordpress/wp-includes\class-wp-embed.php
The following shortcodes are available
Line reference 31       add_shortcode( 'embed', '__return_false' )
Line reference 60       add_shortcode( 'embed', array( $this, 'shortcode' ) )

File Path: E:\xampp\htdocs\wordpress/wp-includes\media.php
The following shortcodes are available
Line reference 1379       add_shortcode('wp_caption', 'img_caption_shortcode')
Line reference 1380       add_shortcode('caption', 'img_caption_shortcode')
Line reference 1490       add_shortcode('gallery', 'gallery_shortcode')
Line reference 2021       add_shortcode( 'playlist', 'wp_playlist_shortcode' )
Line reference 2270       add_shortcode( 'audio', 'wp_audio_shortcode' )
Line reference 2525       add_shortcode( 'video', 'wp_video_shortcode' )

File Path: E:\xampp\htdocs\wordpress/wp-includes\shortcodes.php
The following shortcodes are available
Line reference 59       add_shortcode( 'footag', 'footag_func' )
Line reference 72       add_shortcode( 'bartag', 'bartag_func' )
Line reference 80       add_shortcode( 'baztag', 'baztag_func' )
Line reference 89       add_shortcode($tag, $func)

wp-includes\shortcodes.phpの関数によって取得されたショートコードはコメント内のサンプルにすぎないため、セルフホストサイトでは以下のショートコードのみがデフォルトで利用可能です。

  • [caption]

  • [gallery]

  • [playlist]

  • [audio]

  • [video]

  • [embed]

注:これはWordPress 4.4と同じです。

2
Pieter Goosen