1

Woocommerce (サブスクリプション) と Elementor があります。Woocommerce の Myaccount エリア内にページ/コンテンツを追加しようとしています - 新しいナビゲーション メニュー項目です。

エンドポイントとナビゲーション メニュー ビットの作成は問題なく機能します。私が直面している問題は、Elementor で作成されたページを表示することです。一方のページ (これも Elementor で作成) は問題なく動作しますが、もう一方のページは問題ありません。

elementor で作成されたページは、基本的に 4 列 10 行を作成するかなり単純なものです。各行には、ショートコードを使用してボタンのテキストと、押されたときに移動する URL を取得するボタンがあります。これはすべてテスト済みで、ページに直接アクセスしても問題なく動作します。

このコードを使用すると

$post = get_post(1114); 
$content = apply_filters('the_content', $post->post_content); 
echo $content;

ページを表示するエンドポイントでは、出力は左から右に表のセルを示すテキスト行のリストにすぎません。これはボタンのテキストのみを表示し (URL の符号なし)、エレメントまたはエディターのページのように (または直接アクセスした場合) 書式設定されていません。たとえば、テーブルが

H1    H2    H3    H4
R1a   R1b   R1c   R1d
R2a   R2b   R2d   R2d

ディスプレイは

H1
H2
H3
R1a
R1b
R1c
R1d
R2a
R2b
R2c
R2d

以下のコードを使用する場合

$content = \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( 1119);
echo $content;

テーブルの大部分は、すべての書式設定などで正しく表示されます。機能していないことの 1 つは、ボタンのテキストです。ショートコードによって返されたテキストを表示する代わりに、ショートコードを表示するだけです。

どこかで処理する必要がある何かが欠けているだけだと確信していますが、それが何であるかはわかりません.Elementorページは残念ながらあまり役に立ちません.

どんな助けでも大歓迎です。

4

1 に答える 1

1

EDIT : 正解は、テキスト フィールドの横に動的なボタン/ドロップダウンがあることです。これは以前は気付きませんでした。これを使用してショートコードを選択し、ショートコードの詳細を入力すると、手動で処理しなくても正しく表示されます。

そもそも上記のように正しくロードされない理由はわかりませんが、それを回避するために以下を行いました。これがこれを行う正しい方法かどうかはわかりませんが、機能します。

$content = \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( 1013 );
    $content = process_subswitch_content_for_shortcodes( $content );
    echo $content;

以下は基本的に、get_builder_content_for_display関数から返されたコンテンツで、問題のショートコードの開始である '[subswitch' を検索します (elementor がコンテンツに他の [] を入れるため、] だけを検索することはできません)。

function process_subswitch_content_for_shortcodes( $content ) {

    $keepprocessing = true;
    $searchstart_pos = 0;
    do {

        $startchar_pos = strpos( $content, "[subswitch", $searchstart_pos );
        if ( $startchar_pos == false ) {
            $keepprocessing = false;
        }

        $endchar_pos = strpos( $content, "]", $startchar_pos );
        $shortcode_request = substr( $content, $startchar_pos, $endchar_pos );
        if ( $shortcode_request == false ) {
            $keepprocessing = false;
        }

        $shortcode_content = do_shortcode( $shortcode_request );
        $content = str_replace( $shortcode_request, $shortcode_content, $content );

        $searchstart_pos = $endchar_pos;

    } while ( $keepprocessing ); 

    return $content;
}

もちろん、いわばショートコードを手動で処理しなくても表示されるように、これを直接ロードする方法を知りたいです。

于 2019-02-25T13:25:13.947 に答える